可观测性
每个 A2A 调用都会在与模型流量相同的链路上产生用量事件,并更新网关请求指标。这些数据都会带有 A2A 标记,因此无需单独建设遥测链路,就能区分 A2A 流量。被限流、因预算超限或上游失败的调用也会产生事件,因此遥测会反映所有尝试,而不只是成功调用。
用量事件
每个 A2A 调用都会向与模型用量相同的接收端写入一条用量事件。事件包含:
| 字段 | 值 |
|---|---|
inbound_protocol | a2a |
a2a_agent_name | 被调用的已注册 Agent。 |
a2a_method | 被调用的 JSON-RPC 方法,例如 message/send。 |
api_key_id | 发起调用的调用方 API Key。 |
status_code | 调用结果状态。 |
latency_ms | 调用端到端延迟。 |
request_id、occurred_at | 关联 ID 和时间戳。 |
A2A 调用没有模型 Token,因此 Token 和成本字段为零。需要按 Agent 归因调用量时,请使用 a2a_agent_name 和 a2a_method,而不是依赖 Token 或花费分析。
事件会记录 Agent 名称、方法和调用结果,但不会包含请求或响应消息内容。它目前也不会把 A2A 任务标识(task id、context id)或任务状态作为独立字段拆出;请使用 a2a_method 和 status_code 做归因。
A2A 用量事件会通过与模型用量事件相同的路径投递:
- 在 AISIX Cloud 托管部署中,它们会与模型用量一起流向控制面的用量接收端。
- 它们也会扇出到你为每个环境配置的 OTLP、SLS 或 Datadog 导出器,因此 A2A 流量会出现在同一套导出链路中。
指标
A2A 请求会出现在网关的 Prometheus 指标中,并携带可用于区分模型流量的标签:
- 请求计数器
aisix_requests_total会用provider="a2a"和model="a2a"标记 A2A 调用,并同时带有status和outcome。 - 进行中请求 gauge
aisix_proxy_in_flight_requests会用endpoint="/a2a"和inbound_protocol="a2a"标记 A2A 请求。 - 用量投递计数器
aisix_usage_events_emitted_total会用handler="a2a"标记 A2A 事件。
在 aisix_usage_events_emitted_total 上,inbound_protocol 标签来自固定集合(openai、anthropic、mcp、other),因此 A2A 事件在该计数器上会归入 inbound_protocol="other"。请使用 handler="a2a" 过滤 A2A 投递事件。实际投递的用量事件本身会携带 inbound_protocol="a2a",并包含 Agent 名称和方法。
指标通过专用指标监听器的 GET /metrics 暴露。完整指标目录和标签语义请参见指标参考。
验证
通过网关发送一次 A2A 调用,然后抓取指标端点:
curl -sS "http://127.0.0.1:9090/metrics" | grep -E 'handler="a2a"|provider="a2a"'
预期结果: 输出中包含带有 handler="a2a" 的 aisix_usage_events_emitted_total 样本,以及带有 provider="a2a" 的 aisix_requests_total 样本。请根据你的 observability.metrics.prometheus.addr 调整地址。指标族会在首次观测后注 册,因此请先发送一次调用再抓取。
下一步
- 指标参考:查看完整指标目录、标签和 A2A 相关说明。
- 限流与预算:被拒绝的 A2A 调用会带有对应拒绝状态写入事件。
- Agent 网关概览:注册 Agent 并完成端到端访问。