跳到主要内容

指标参考

AISIX 以 Prometheus 文本格式公开运行指标。Prometheus 服务器或其他兼容采集器可抓取这些指标,用于仪表盘、告警和 PromQL 查询。

默认在专用监听器上启用 Prometheus 指标。默认启动配置如下:

config.yaml
observability:
metrics:
prometheus:
enabled: true
addr: 0.0.0.0:9090
path: /metrics

Prometheus 从此监听器抓取 GET /metrics。Admin API 监听器不提供指标。

指标端点按设计不需要认证。请确保该监听器仅对监控网络开放。

每次抓取端点时,AISIX 都会公开配置状态。其他指标系列会在 AISIX 首次记录相应活动时注册,因此流量指标可能不会在启动后立即出现。请通过代理发送请求,然后再次抓取,即可看到相应序列。

指标目录

搜索指标名称、描述、标签和值,或按指标系列和类型筛选目录。 展开条目即可查看详细信息。

指标
41
系列
8
查询行为

指标类型

counter

持续累加并在进程重启前只增不减的值,例如请求总数或 Token 总数。使用 rate() 计算其变化速率。

gauge

可增可减的当前值,例如活跃请求数或剩余配额。

histogram

按可配置分桶统计的观测值。计算百分位数前,可以聚合 _bucket_sum_count 序列。

summary

由各网关实例计算分位数的观测值。摘要也公开 _sum_count,但其分位数无法跨实例聚合。

系列
类型
41 个条目,当前显示 41

请求指标

跟踪请求结果以及代理当前正在处理的工作。

指标条目:5
详细请求标签

对于三个详细请求计数器,stream 记录客户端是否请求流式响应。is_fallback 记录请求是否由回退目标处理,并且不会出现在延迟指标中。

provider_key_nameuser_name 是对应 ID 的可读名称。每个名称与其 ID 一一对应,因此不会增加新的序列维度。在控制平面提供名称前,user_nameunknown

inbound_protocol 是有界的协议类型集合。详细的聊天和消息序列使用 openaianthropic;在途请求仪表还可使用 mcpa2arealtime

aisix_requests_total 。描述:兼容性序列中的代理请求结果,覆盖的端点范围最广。 。类型:counter 。标签数量:4 个标签
标签
provider, model, status, outcome
outcome 的值
success, client_error, rate_limited, upstream_error

success 表示 HTTP 200–399;client_error 表示除 429 外的 HTTP 400–499;rate_limited 表示 HTTP 429;其他所有状态均映射为 upstream_error

行为

A2A 智能体调用使用 provider="a2a"model="a2a"

PromQL 示例
sum(rate(aisix_requests_total[5m])) by (outcome)
aisix_llm_requests_total 。描述:聊天补全和消息请求的结果,包括成功和失败的请求。 。类型:counter 。标签数量:15 个标签
标签
endpoint, inbound_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name, stream, is_fallback, status, outcome
inbound_protocol 的值
openai, anthropic
stream 的值
false, true
is_fallback 的值
false, true
outcome 的值
success, client_error, rate_limited, upstream_error

success 表示 HTTP 200–399;client_error 表示除 429 外的 HTTP 400–499;rate_limited 表示 HTTP 429;其他所有状态均映射为 upstream_error

aisix_proxy_requests_total 。描述:聊天补全和消息流量的详细请求结果。 。类型:counter 。标签数量:15 个标签
标签
endpoint, inbound_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name, stream, is_fallback, status, outcome
inbound_protocol 的值
openai, anthropic
stream 的值
false, true
is_fallback 的值
false, true
outcome 的值
success, client_error, rate_limited, upstream_error

success 表示 HTTP 200–399;client_error 表示除 429 外的 HTTP 400–499;rate_limited 表示 HTTP 429;其他所有状态均映射为 upstream_error

aisix_proxy_failed_requests_total 。描述:结果不为 success 的代理请求子集。 。类型:counter 。标签数量:15 个标签
标签
endpoint, inbound_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name, stream, is_fallback, status, outcome
inbound_protocol 的值
openai, anthropic
stream 的值
false, true
is_fallback 的值
false, true
outcome 的值
client_error, rate_limited, upstream_error

client_error 表示除 429 外的 HTTP 400–499;rate_limited 表示 HTTP 429;其他所有状态均映射为 upstream_error

aisix_proxy_in_flight_requests 。描述:代理当前正在处理的请求,按标准化端点和入站协议分组。 。类型:gauge 。标签数量:2 个标签
标签
endpoint, inbound_protocol
inbound_protocol 的值
openai, anthropic, mcp, a2a, realtime
行为

MCP 请求使用 endpoint="/mcp"inbound_protocol="mcp"。A2A 调用使用 endpoint="/a2a"inbound_protocol="a2a"

PromQL 示例
sum(aisix_proxy_in_flight_requests) by (endpoint, inbound_protocol)

延迟指标

检查单个网关的延迟,或跨网关实例聚合直方图分桶。

指标条目:6
延迟聚合与标签

跨网关实例的服务级仪表盘和告警应使用直方图,因为可在调用 histogram_quantile() 前聚合其 _bucket_sum_count 序列。摘要用于检查单个网关实例预先计算的分位数。摘要分位数无法跨实例聚合,因此不要对其取平均值。

两个直方图均使用 10 毫秒到 300 秒的分桶边界。env_id 标识托管网关服务的环境;网关未连接 AISIX Cloud 时其值为 unknownstatus_class2xx3xx4xx5xxother。为控制分桶序列数量,不包含按密钥和按用户的标签;这些维度请使用用量分析。

aisix_request_duration_seconds 。描述:兼容性序列中的端到端请求延迟。 。类型:summary 。标签数量:3 个标签
标签
provider, model, status
行为

摘要分位数由各 AISIX 实例计算,无法跨实例聚合。

aisix_llm_request_duration_seconds 。描述:聊天补全和消息请求的延迟。对于流式请求,该指标测量从请求开始到响应开始的时间。 。类型:summary 。标签数量:14 个标签
标签
endpoint, inbound_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name, stream, status, outcome
inbound_protocol 的值
openai, anthropic
stream 的值
false, true
outcome 的值
success, client_error, rate_limited, upstream_error

success 表示 HTTP 200–399;client_error 表示除 429 外的 HTTP 400–499;rate_limited 表示 HTTP 429;其他所有状态均映射为 upstream_error

aisix_proxy_request_duration_seconds 。描述:聊天补全和消息请求的详细延迟,其流式语义与 LLM 时长序列相同。 。类型:summary 。标签数量:14 个标签
标签
endpoint, inbound_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name, stream, status, outcome
inbound_protocol 的值
openai, anthropic
stream 的值
false, true
outcome 的值
success, client_error, rate_limited, upstream_error

success 表示 HTTP 200–399;client_error 表示除 429 外的 HTTP 400–499;rate_limited 表示 HTTP 429;其他所有状态均映射为 upstream_error

aisix_llm_time_to_first_token_seconds 。描述:流式聊天补全和消息请求从进入网关到生成首个 Token 的时间。 。类型:summary 。标签数量:11 个标签
标签
endpoint, inbound_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name
inbound_protocol 的值
openai, anthropic
aisix_request_e2e_latency_seconds 。描述:客户端感知的聊天补全、消息和响应延迟,包括完整的流式传输时长。 。类型:histogram 。标签数量:6 个标签
标签
env_id, endpoint, model, provider, status_class, streaming
status_class 的值
2xx, 3xx, 4xx, 5xx, other
streaming 的值
false, true
行为

分桶范围为 10 毫秒到 300 秒。跨网关实例计算百分位数前,请先聚合 _bucket 序列。

每个请求只观测一次。非流式请求和失败请求在处理程序返回时记录。流式请求在流结束时记录,包括客户端取消的情况;取消的流保留已提交的状态,并记录截至取消时的时长。

PromQL 示例
histogram_quantile(
  0.90,
  sum by (le) (rate(aisix_request_e2e_latency_seconds_bucket[5m]))
)
aisix_request_ttft_seconds 。描述:流式聊天补全和消息请求的首个 Token 延迟。 。类型:histogram 。标签数量:6 个标签
标签
env_id, endpoint, model, provider, status_class, streaming
status_class 的值
2xx, 3xx, 4xx, 5xx, other
streaming 的值
true
PromQL 示例
histogram_quantile(
  0.90,
  sum by (le) (rate(aisix_request_ttft_seconds_bucket[5m]))
)

用量与成本指标

测量 Token 用量、估算支出和标准化客户端用量。

指标条目:6
aisix_tokens_consumed_total 。描述:已完成的非流式聊天补全请求中 usage.total_tokens 的总和。 。类型:counter 。标签数量:2 个标签
标签
provider, model
aisix_llm_input_tokens_total 。描述:上游为聊天补全和消息请求报告的输入 Token 数。 。类型:counter 。标签数量:11 个标签
标签
endpoint, inbound_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name
inbound_protocol 的值
openai, anthropic
aisix_llm_output_tokens_total 。描述:上游为聊天补全和消息请求报告的输出 Token 数。 。类型:counter 。标签数量:11 个标签
标签
endpoint, inbound_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name
inbound_protocol 的值
openai, anthropic
aisix_llm_total_tokens_total 。描述:上游为聊天补全和消息请求报告的 Token 总数。 。类型:counter 。标签数量:11 个标签
标签
endpoint, inbound_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name
inbound_protocol 的值
openai, anthropic
aisix_llm_spend_micro_usd_total 。描述:非流式聊天补全的估算支出,以微美元计;1 美元等于 1,000,000 微美元。 。类型:counter 。标签数量:11 个标签
标签
endpoint, inbound_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name
inbound_protocol 的值
openai, anthropic
aisix_llm_tokens_by_client_total 。描述:聊天补全、消息和响应请求的 Token 用量,按标准化客户端、请求模型和 Token 类型分组。 。类型:counter 。标签数量:3 个标签
标签
client_type, model, token_type
client_type 的值
openai-python, openai-node, anthropic-python, anthropic-typescript, claude-code, codex, cline, roo-code, kilocode, zoo-code, github-copilot, cursor, opencode, qwen-code, gemini-cli, crush, zed, aider, vercel-ai-sdk, langchain, llamaindex, litellm, curl, python-requests, httpx, aiohttp, okhttp, go-http-client, node, postman, browser, other, unknown

无法识别的 User-Agent 映射为 other;缺少 User-Agent 时映射为 unknown。部署可通过管理员定义的映射规则(observability.metrics.client_type_rules)扩展此集合。完整的 User-Agent 字符串和版本仍会保留在请求日志和用量分析中。

token_type 的值
input, output, total

total 包含输入、输出以及 Anthropic 缓存创建和缓存读取 Token。

行为

model 是调用方请求的模型名称,与 aisix_llm_* Token 序列的 model 标签值相同。路由、语义、合议和故障转移分发会保留此别名,而不是报告所选直接模型。

有界的 client_type 白名单可防止客户端可控的 User-Agent 导致 Prometheus 基数无限增长。具体模型别名受已配置模型集合的限制,但通配符别名会记录通过该模式请求的每个具体模型名称。基数很重要时,请限制通配符访问并监控标签增长。

管理员定义的映射规则(observability.metrics.client_type_rules)可对更多客户端进行分类。规则在内置白名单之前匹配,并输出固定且经过验证的标签值,因此标签集合保持有界。

对于聊天补全和消息流量,跨标签聚合且包含缓存的总量与 aisix_llm_total_tokens_total 一致。/v1/responses Token 用量会出现在此客户端类型序列中,但不会出现在按密钥统计的指标系列中,因此这里的总量可能更大。

由于两个指标系列使用不同的标签集合,单条序列并不对应。专用客户端类型序列避免为按密钥统计的 Token 序列再增加一个标签维度。

Anthropic 将缓存 Token 与输入 Token 分开报告,因此 total 可能大于 inputoutput 之和。

PromQL 示例
sum by (client_type, model, token_type) (
  rate(aisix_llm_tokens_by_client_total[5m])
)

限流与预算指标

监控每个标签集合的限流拒绝,以及最新配额或预算状态。

指标条目:8
aisix_ratelimit_rejections_total 。描述:因限流而被拒绝的聊天补全请求。 。类型:counter 。标签数量:1 个标签
标签
scope
scope 的值
requests, tokens
aisix_ratelimit_remaining_requests 。描述:处理聊天补全请求时报告的剩余请求配额,按 API Key 和模型分组。 。类型:gauge 。标签数量:2 个标签
标签
api_key_id, model
aisix_ratelimit_remaining_tokens 。描述:处理聊天补全请求时报告的剩余 Token 配额,按 API Key 和模型分组。 。类型:gauge 。标签数量:2 个标签
标签
api_key_id, model
aisix_budget_limit_usd 。描述:预算上限(美元)。 。类型:gauge 。标签数量:3 个标签
标签
api_key_id, team_id, user_id
aisix_budget_spent_usd 。描述:已用预算(美元)。 。类型:gauge 。标签数量:3 个标签
标签
api_key_id, team_id, user_id
aisix_budget_remaining_usd 。描述:剩余预算(美元)。 。类型:gauge 。标签数量:3 个标签
标签
api_key_id, team_id, user_id
aisix_budget_reset_seconds 。描述:距离预算周期重置的秒数。 。类型:gauge 。标签数量:3 个标签
标签
api_key_id, team_id, user_id
aisix_budget_details_present 。描述:是否已填充预算详情。 。类型:gauge 。标签数量:3 个标签
标签
api_key_id, team_id, user_id
指标值 的值
0, 1

1 表示存在预算详情;0 表示预算详情已清除。

部署指标

监控目标模型是否仍参与轮转,以及进入冷却的次数。

指标条目:2
aisix_deployment_state 。描述:目标模型是否参与轮转。 。类型:gauge 。标签数量:4 个标签
标签
provider, model, upstream_model, provider_key_id
指标值 的值
0, 2

0 表示健康。2 表示目标因正在冷却或后台健康检查失败而退出轮转。

aisix_deployment_cooled_down_total 。描述:目标模型进入冷却的次数。 。类型:counter 。标签数量:4 个标签
标签
provider, model, upstream_model, provider_key_id

安全护栏指标

跟踪所有端点上各安全护栏的执行延迟和结果,以及聊天补全请求的聚合阻断和 fail-open 绕过。

指标条目:3
安全护栏执行延迟

在每个端点上,请求中执行的每个安全护栏都会为每个阶段记录一次 aisix_guardrail_latency_seconds 观测,其中包括流式传输结束时和窗口扫描时的检查、缓存命中的输出检查,以及分段审核过程。该直方图使用从 1 毫秒到 30 秒的显式分桶,因此可通过 histogram_quantile 计算各安全护栏的 P50/P95/P99。

kind 标签用于区分本地进程内检测(keywordpii)和远程审核服务(其他所有种类);result 标签用于区分 fail-open 绕过(bypassed,失败标签位于 error_type 中)与策略决策。fail-closed 的远程故障会显示为 blocked,其延迟会集中在配置的服务提供方超时时间附近。

_count 序列同时也可用作各安全护栏的执行计数器:sum by (guardrail, result) (rate(aisix_guardrail_latency_seconds_count[5m])) 无需单独的计数器即可提供执行率和阻断率。

aisix_guardrail_latency_seconds 。描述:一次安全护栏执行的实际耗时;在每个端点上,为每个阶段中执行的每个安全护栏记录。guardrail 为配置的安全护栏名称。 。类型:histogram 。标签数量:6 个标签
标签
env_id, guardrail, kind, phase, result, error_type
kind 的值
keyword, pii, aliyun_text_moderation, azure_content_safety, azure_content_safety_text_moderation, bedrock, lakera, openai_moderation, presidio

keywordpii 在进程内运行(本地检测);其他种类均会调用远程审核服务。

phase 的值
input, output
result 的值
allowed, blocked, masked, bypassed, would_block, would_mask

bypassed 表示远程故障采用 fail-open;fail-closed 的远程故障记录为 blockedwould_block/would_mask 来自配置为 enforcement_mode: monitor 的安全护栏。

error_type 的值
none, aliyun_5xx, aliyun_config_error, aliyun_throttled, aliyun_timeout, azure_cs_5xx, azure_cs_config_error, azure_cs_throttled, azure_cs_timeout, bedrock_5xx, bedrock_throttled, bedrock_timeout, lakera_5xx, lakera_config_error, lakera_throttled, lakera_timeout, openai_moderation_5xx, openai_moderation_config_error, openai_moderation_throttled, openai_moderation_timeout, presidio_5xx, presidio_config_error, presidio_throttled, presidio_timeout

result="bypassed" 时,设置为有界失败标签(与 aisix_guardrail_bypasses_total{reason} 的值相同);其他情况为 none

行为

显式分桶:0.001、0.0025、0.005、0.01、0.025、0.05、0.1、0.25、0.5、1、2.5、5、10 和 30 秒。

监控模式执行会在请求继续处理的同时记录 would_block/would_mask,因此可以在实施策略前评估其规模。

通过同步逐字段脱敏器执行的 PII 和关键词掩码改写不会计入该序列;其进程内耗时为微秒级。

aisix_guardrail_blocks_total 。描述:被输入或输出安全护栏拒绝的请求,包括策略阻断和 fail-closed 结果。仅限聊天补全请求;若要统计所有端点上各安全护栏的阻断率,请使用 aisix_guardrail_latency_seconds_count 序列,并设置 result="blocked" 。类型:counter 。标签数量:无标签
标签

无。

aisix_guardrail_bypasses_total 。描述:远程安全护栏不可达时,fail_open 允许请求继续处理的 fail-open 事件。 。类型:counter 。标签数量:1 个标签
标签
reason
reason 的值
aliyun_5xx, aliyun_config_error, aliyun_throttled, aliyun_timeout, azure_cs_5xx, azure_cs_config_error, azure_cs_throttled, azure_cs_timeout, bedrock_5xx, bedrock_throttled, bedrock_timeout, lakera_5xx, lakera_config_error, lakera_throttled, lakera_timeout, openai_moderation_5xx, openai_moderation_config_error, openai_moderation_throttled, openai_moderation_timeout, presidio_5xx, presidio_config_error, presidio_throttled, presidio_timeout

用量事件指标

区分用量事件发送尝试与传递队列未接受的事件。

指标条目:2
用量事件传递

每次发送尝试的事件要么被队列接受,要么计为丢弃。跨标签求和后,从发送尝试速率中减去丢弃速率,即可计算接受速率。

status_code 标签为 2xx3xx4xx5xxotherhandler 示例值包括 chatembeddingsmessagesmcp

MCP 工具调用使用 handler="mcp"inbound_protocol="mcp"。其用量事件负载会标识 MCP 服务器和工具;Token 与成本字段为零。

A2A 智能体调用使用 handler="a2a"。该指标将其有界的 inbound_protocol 标签映射为 other,而传递的事件使用 inbound_protocol="a2a",并标识智能体名称和 JSON-RPC 方法。Token 与成本字段为零。

aisix_usage_events_emitted_total 。描述:用量事件发送尝试,在 AISIX 尝试将事件加入队列前计数,包括已传递和已丢弃的事件。 。类型:counter 。标签数量:3 个标签
标签
handler, status_code, inbound_protocol
handler 的值
a2a, audio, batch, batches, chat, completions, embeddings, files, fine_tuning, images, mcp, messages, passthrough, realtime, rerank, responses
status_code 的值
2xx, 3xx, 4xx, 5xx, other
inbound_protocol 的值
openai, anthropic, mcp, other
aisix_usage_event_drops_total 。描述:未被队列接受的用量事件。 。类型:counter 。标签数量:1 个标签
标签
reason
reason 的值
sink_disabled, sink_full, sink_closed

配置指标

监控 AISIX 是否能从配置源加载并应用变更。

指标条目:9
配置状态

AISIX 在这些指标以及指标和状态监听器的 GET /status/config 中反映相同的实时配置状态。

重新加载指标适用于文件和 etcd 配置源。仅当 AISIX 从 etcd 加载配置时,才会公开版本和配置源连接指标。

比较已观测和已应用的版本,以判断网关是否正在使用最新的 etcd 配置。

aisix_config_last_reload_successful 。描述:最近一次配置加载是否成功。 。类型:gauge 。标签数量:无标签
标签

无。

指标值 的值
0, 1

1 表示成功,0 表示失败。

aisix_config_last_reload_success_timestamp_seconds 。描述:最近一次成功加载配置的 Unix 时间戳(秒)。 。类型:gauge 。标签数量:无标签
标签

无。

行为

在配置成功加载前不会公开该序列。

aisix_config_reloads_total 。描述:完整配置重新加载尝试,包括配置源获取失败。 。类型:counter 。标签数量:无标签
标签

无。

行为

etcd 增量 watch 事件不会增加此计数器。

aisix_config_reload_failures_total 。描述:按原因分组的配置重新加载失败。 。类型:counter 。标签数量:1 个标签
标签
reason
reason 的值
fetch, parse, validate

fetch 表示无法读取配置源,parse 表示配置源数据无效,validate 表示资源无效。

aisix_config_rejected_resources 。描述:当前被拒绝的资源数,按资源类型分组。 。类型:gauge 。标签数量:1 个标签
标签
kind
行为

某类资源的所有拒绝均清除后,AISIX 会将其现有序列设为 0

aisix_config_observed_revision 。描述:网关观测到的最新 etcd 版本。 。类型:gauge 。标签数量:无标签
标签

无。

aisix_config_applied_revision 。描述:网关当前使用的配置所对应的 etcd 版本。 。类型:gauge 。标签数量:无标签
标签

无。

aisix_config_hash_info 。描述:已应用配置的哈希值。 。类型:gauge 。标签数量:1 个标签
标签
hash
指标值 的值
0, 1

筛选值 1 可选择当前哈希。应用的配置变更后,AISIX 会保留值为 0 的旧哈希标签。

aisix_config_source_connected 。描述:网关是否已连接到 etcd 配置源。 。类型:gauge 。标签数量:无标签
标签

无。

指标值 的值
0, 1

1 表示已连接,0 表示未连接。

使用 PromQL 分析指标

配置 Prometheus 表达式浏览器或其他兼容监控界面抓取 AISIX 指标端点后,可使用以下 PromQL 示例。请根据要检查的流量和网关实例调整时间窗口、标签筛选条件和分组维度。

计算成功率

用成功请求速率除以总请求速率可计算成功率。以下查询合并五分钟窗口内的聊天补全和消息流量:

sum(rate(aisix_llm_requests_total{outcome="success"}[5m]))
/
sum(rate(aisix_llm_requests_total[5m]))

若要单独分析某个 API,请添加 endpoint 筛选条件或按 endpoint 分组。

若只测量主路由路径,请将分子和分母限制为未由回退目标处理的请求:

sum(rate(aisix_llm_requests_total{outcome="success", is_fallback="false"}[5m]))
/
sum(rate(aisix_llm_requests_total{is_fallback="false"}[5m]))

是否将受限流的请求纳入总体取决于运维策略。若要从分母中排除已达到配额的客户端,请使用:

sum(rate(aisix_llm_requests_total{outcome="success"}[5m]))
/
sum(rate(aisix_llm_requests_total{outcome!="rate_limited"}[5m]))

计算聚合延迟百分位数

计算百分位数前,请跨网关实例合并直方图分桶。P90 表示 90% 的观测值小于或等于该值。请在 sum by 分组中保留 le;需要细分时,可添加 modelprovider 等标签:

# 所有匹配网关实例的 P90 端到端延迟
histogram_quantile(
0.90,
sum by (le) (rate(aisix_request_e2e_latency_seconds_bucket{status_class="2xx"}[5m]))
)

# 各模型的 P90 端到端延迟
histogram_quantile(
0.90,
sum by (le, model) (rate(aisix_request_e2e_latency_seconds_bucket{status_class="2xx"}[5m]))
)

# 各服务提供方的 P90 首个 Token 延迟
histogram_quantile(
0.90,
sum by (le, provider) (rate(aisix_request_ttft_seconds_bucket[5m]))
)

流式端到端时间涵盖完整生成过程,因此流式和非流式请求具有不同的延迟分布。请使用 streaming 标签分别分析:

# 成功流式请求的 P90 端到端延迟
histogram_quantile(
0.90,
sum by (le) (rate(aisix_request_e2e_latency_seconds_bucket{streaming="true", status_class="2xx"}[5m]))
)

比较单实例流式延迟

摘要序列为每个网关实例公开预先计算的 quantile 标签。比较首个 Token 延迟与端到端延迟前,请选择一个抓取目标以及要检查的模型或服务提供方:

# 流式请求的 P90 首个 Token 延迟
aisix_llm_time_to_first_token_seconds{quantile="0.9"}

# 同一流式请求总体的 P90 端到端延迟
aisix_llm_request_duration_seconds{stream="true", quantile="0.9"}

不要对跨实例的摘要分位数取平均值。请使用上述直方图查询计算跨网关实例的百分位数。

测量安全护栏延迟和结果

aisix_guardrail_latency_seconds 会为每个阶段中执行的每个安全护栏记录一次观测,并使用安全护栏名称、种类、阶段和 result 作为标签。计算各安全护栏执行延迟的 P95,以验证是否符合审核延迟预算:

histogram_quantile(
0.95,
sum by (le, guardrail) (rate(aisix_guardrail_latency_seconds_bucket[5m]))
)

安全护栏在一次请求中顺序执行,因此请求产生的安全护栏延迟是各次执行时间之和,即每个阶段中每个已关联安全护栏各执行一次。计算各安全护栏在每个阶段中单次执行所增加的平均延迟,并与审核延迟预算比较:

sum by (guardrail, phase) (rate(aisix_guardrail_latency_seconds_sum[5m]))
/
sum by (guardrail, phase) (rate(aisix_guardrail_latency_seconds_count[5m]))

使用 kind 标签比较本地检测与远程审核服务:keywordpii 在进程内运行,其他种类都会发起网络调用:

histogram_quantile(
0.95,
sum by (le, kind) (rate(aisix_guardrail_latency_seconds_bucket[5m]))
)

_count 序列同时也可用作执行计数器。按安全护栏跟踪阻断率和 fail-open 绕过率,并在远程安全护栏开始 fail-open 时发出告警:

sum by (guardrail, result) (rate(aisix_guardrail_latency_seconds_count[5m]))

# 按失败原因统计 fail-open 绕过
sum by (guardrail, error_type) (rate(aisix_guardrail_latency_seconds_count{result="bypassed"}[5m]))

按客户端计算 Token 用量

使用 token_type="total" 按标准化客户端类型计算包含缓存的 Token 用量:

sum by (client_type) (rate(aisix_llm_tokens_by_client_total{token_type="total"}[5m]))

若要比较输入和输出用量,请同时选择两种 Token 类型,并在分组中包含 token_type

sum by (client_type, token_type) (rate(aisix_llm_tokens_by_client_total{token_type=~"input|output"}[5m]))

按客户端类型和模型细分 Token 用量

model 标签记录客户端请求的模型名称,而不是 AISIX 选择的直接模型。按 client_typemodel 分组,可以查看各标准化客户端类型如何在不同模型间分配 Token 用量:

sum by (client_type, model) (rate(aisix_llm_tokens_by_client_total{token_type="total"}[5m]))

若要检查单个客户端类型,请按 client_type 筛选,并仅按模型分组:

sum by (model) (rate(aisix_llm_tokens_by_client_total{client_type="claude-code", token_type="total"}[5m]))

将自定义客户端映射到客户端类型

AISIX 开箱即用地识别常见 AI 编程客户端和 SDK。若要对内部工具进行分类,或将被内置规则归入 node 等通用类别的客户端重新分类,请在网关配置中定义映射规则:

config.yaml
observability:
metrics:
client_type_rules:
- pattern: "^billing-batcher/"
client: billing-batcher
- pattern: "internal-eval-harness"
client: eval-harness

每条规则将正则表达式映射到固定的 client 值,AISIX 将其作为 client_type 标签公开。规则会在内置规则之前按顺序与原始 User-Agent 请求头匹配,首个匹配项生效。匹配不区分大小写且默认不锚定;需要前缀匹配时,请使用 ^ 锚定模式。

标签使用 client 值,而不是请求的 User-Agent,因此无论客户端发送什么内容,标签集合都保持有界。配置限制进一步保证这一点:最多 64 条规则,模式最长 512 字节,client 值最长 64 个字符且必须匹配 [a-z0-9][a-z0-9._-]*。AISIX 会在启动时验证规则,遇到无效规则时拒绝启动;变更在重启后生效。

User-Agent 为空的请求始终报告为 unknown;未匹配任何规则的请求会继续使用内置分类。