指标标签与变量
通过 observability.metrics.labels 配置每个 Prometheus 指标族的完整标签列表,既可以添加可用变量,也可以删除默认标签。1.1.0 及更早版本的网关不支持此配置项。
配置标签
observability:
metrics:
labels:
aisix_request_ttft_seconds:
- env_id
- endpoint
- model
- provider
- status_class
- streaming
- provider_key_name
aisix_proxy_requests_total:
- endpoint
- status
aisix_requests_total: []
此示例为 TTFT 添加所选服务提供方凭据的名称。详细请求计数器仅保留入口和状态码。旧版请求计数器的全部业务标签被删除。
- 未配置的指标保留现有默认标签。
labels: {}保持所有指标的默认输出。 - 每个列表都会替换对应指标的默认列表。如果该指标没有必须保留的身份标签,空列表会删除全部业务标签。
- 使用指标族名称,例如
aisix_request_ttft_seconds,不要添加_bucket、_sum或_count后缀。直方图的各个组成部分始终使用相同的标签;Prometheus 自动添加的le和摘要的quantile不受此配置影响。 aisix_request_ttft_seconds、aisix_llm_time_to_first_token_seconds和aisix_request_e2e_latency_seconds上的side始终输出。替换列表无法删除它,因为它的两个取值是不同的测量,删除后会合并为同一条序列。在列表中显式列出它也可以接受。- 指标名未知、变量不适用于该指标、变量重复或删除必要身份标签时,网关会报告配置错误并拒绝启动。唯一的例外是网关已不再发射的
aisix_llm_spend_micro_usd_total:指定它的条目会被忽略,并在启动时输出警告,因此为 1.7.1 及更早版本编写的配置仍能加载。 - 标签在启动时确定,修改后需要重启网关。Prometheus 已存储的序列按其保留策略继续存在;依赖已删除标签的查询和告警也需要相应调整。
通过环境变量配置时,用一个 JSON 对象设置整个映射:
export AISIX_OBSERVABILITY__METRICS__LABELS='{"aisix_request_ttft_seconds":["model","provider_key_name"]}'
使用 AISIX Helm Chart 部署的网关,在 values 文件的 config.observability.metrics.labels 下设置同一个映射:
config:
observability:
metrics:
labels:
aisix_request_ttft_seconds: [model, provider_key_name]
标签选择属于网关自身的配置,由网关的运维人员应用。AISIX Enterprise 或 AISIX Cloud 的控制台生成基础部署模板;请在需要该配置的每个网关上,把 observability.metrics.labels 写入网关的配置文件或 Helm values,或设置上 面的环境变量。请只将其应用到支持此选项的网关版本。
名称标签
api_key_id、team_id 这类 ID 标签稳定,但在看板上不易阅读。每个 ID 标签都有一个对应的名称标签,携带同一对象的显示名称,这样查询无需到别处查 ID,就能直接按可读名称分组或过滤。1.5.0 及更早版本的网关不支持下表中的任何选择。
| 名称标签 | 对应的显示名称 | 可添加该标签的指标族 |
|---|---|---|
api_key_name | 用于认证的 API Key(API 密钥)。 | 所有带 api_key_id 的指标族:详细请求计数器、请求耗时摘要、aisix_llm_time_to_first_token_seconds、Token 和缓存 Token 计数器、预算 Gauge、aisix_request_e2e_latency_seconds、aisix_request_ttft_seconds,以及两个 aisix_ratelimit_remaining_* Gauge。 |
team_name | 该 API Key 所属的团队。 | 同上,但不包括两个 aisix_ratelimit_remaining_* Gauge,它们不携带团队。 |
provider_key_name | 所选的服务提供方密钥。 | 除已将其列为默认标签的指标族外,还有 aisix_deployment_requests_total、aisix_deployment_success_responses_total、aisix_deployment_failure_responses_total 和 aisix_deployment_cooled_down_total。 |
policy_name | 限流策略。 | aisix_ratelimit_rejections_total。 |
aisix_deployment_state 不支持 provider_key_name。该 Gauge 只在目标健康状态变化时写入,重命名后的服务提供方密钥在下一次状态变化之前会一直报告旧名称。没有环境名称标签:一个网关只服务一个环境,env_id 在同一网关上恒定,用 Prometheus 的 target 标签即可区分。各指标族可用的确切标签见各指标可用的变量。
启用名称标签
api_key_name、team_name 和 policy_name 都不是默认标签,部署计数器上的 provider_key_name 也不是。user_name,以及已将 provider_key_name 列为默认标签的指标族上的 provider_key_name,仍是默认标签。要添加名称标签,请把它写入 observability.metrics.labels 中该指标族的条目。每个条目都是该指标族的完整标签列表,因此需要同时写出要保留的默认标签:
observability:
metrics:
labels:
aisix_llm_total_tokens_total: [endpoint, inbound_protocol, upstream_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, api_key_name, team_id, team_name, user_id, user_name]
aisix_ratelimit_rejections_total: [scope, layer, policy_id, policy_name]
aisix_deployment_failure_responses_total: [provider, model, upstream_model, provider_key_id, provider_key_name]
未列出的指标族保留默认标签。网关在启动时校验该选择,遇到未知指标族或不支持的标签会拒绝启动;修改后需要重启才能生效。
通过环境变量设置时,用一个 JSON 对象表示:
export AISIX_OBSERVABILITY__METRICS__LABELS='{"aisix_ratelimit_rejections_total":["scope","layer","policy_id","policy_name"]}'
或者通过 Helm Chart 设置:
config:
observability:
metrics:
labels:
aisix_ratelimit_rejections_total: [scope, layer, policy_id, policy_name]
名称取值
- 无法解析的名称报告为
unknown:例如没有显示名称的 API Key,或网关尚未收到其名称的团队。 policy_name与policy_id一致:拒绝不是由限流策略产生时,二者都为空。- API Key、团队、服务提供方密钥和策略的每个 ID 在任一时刻对应一个名称,但重命名会以新名称开始一条新的时间序列。成员文档提供名称时,
user_name与user_id对应;没有成员文档时,不同 API Key 可能为同一个user_id提供不同的user_name。旧序列不再接收样本;计数器和摘要中的旧序列会保留,直到 Prometheus 按保留策略淘汰。预算 Gauge 和aisix_ratelimit_remaining_*Gauge 会像删除 API Key 时一样将旧序列退役。
名称来源
使用 AISIX Enterprise 或 AISIX Cloud 时,控制面会把所有团队和成员的名称连同其他配置一起投射到网关。重命名或删除团队、成员,会像其他配置变更一样同步到网关。user_name 读取自成员自己的名称文档,因此成员改名后无需改写其 API Key 即可反映新名称。api_key_name 和 provider_key_name 分别来自 API Key 和服务提供方密钥自身的显示名称。
对于 AISIX OSS,可用名称取决于配置如何到达网关:
- 声明式资源文件没有
teams或users集合,只读 Admin API 也没有对应端点。在这种工作流中,team_name报告unknown,user_name则回退到 API Key 自身的user_name字段。如需让团队序列可读,可以在 API Key 上使用可读的team_id。 - 直接向 etcd 写入配置的自动化可以填充
teams和users文档。存在对应文档时,team_name来自团队文档,user_name来自成员文档。成员文档存在但name为空时,报告unknown;只有成员文档不存在时,才使用 API Key 的user_name。
当导出的配置中包含团队或成员名称文档时,aisix export 会给出警告,因为它写出的资源文件无法携带这些文档。
时间序列数量与隐私
api_key_name、team_name 和 policy_name 需要显式启用,部署计数器上的 provider_key_name 也是如此。对于默认标签列表包含 user_name 或 provider_key_name 的指标族,它们仍会默认输出。替换列表只能移除非必需的名称标签;五个 aisix_budget_* Gauge 都要求保留 user_name,删去它会使网关因配置错误而拒绝启动。
无论标签默认存在还是显式添加,名称标签都会给该指标族的每条序列多加一个标签;在未选择对应 ID 的指标族上(例如默认配置下的延迟直方图),它会按每个不同的名称拆分序列,而每次重命名都会再产生一条序列。此外,名称标签会把团队名、API Key 名等显示名称暴露给所有能抓取 /metrics 的人。对于可选的名称标签,请只在看板确实需要且所有抓取者均可查看这些名称的指标族上保留。对于预算 Gauge 必需的 user_name,若不能向所有抓取者公开成员名称,应限制 /metrics 的访问权限,而不能通过替换列表删除该标签。
聚合与时间序列数量
删除标签会在累计观测值之前合并计数器和直方图分布。例如,删除 model 后会合并不同模型的请求,而不是保留某个模型的最后一个样本。标签配置不会改变指标原本统计的请求或尝试范围。
Gauge 表示当前状态,例如某个凭据的剩余额度或某个部署的健康状态。下表列出的必要身份标签必须保留,避免不同对象的值互相覆盖。其他 gauge 标签仍可增减。
每组不同的标签值都会产生独立时间序列。凭据名称、API Key ID 和成员身份可能显著增加序列数量。传统直方图针对每组标签值,分别为有限边界桶、+Inf 桶、_sum 和 _count 创建序列。请只选择查询所需的维度。
删除分类标签也会合并其各个类别。例如,token_type="total" 已包含输入与输出;删除 token_type 会累加三个类别,不能再把结果解释成原来的 Token 总量。
大规模部署
除非显式配置替换列表,默认标签始终保留。API Key 或成员数量较多时,应根据实际查询和告警需求选择维度。如果不需要在 Prometheus 中按成员查询,可通过请求日志或导出的用量事件调查单次调用。
可以从以下选择开始:
- 保留服务级查询所需的
model、provider、协议、状态及结果维度。需要区分故障转移后恢复的请求时,保留is_fallback。保留token_type等分类标签;删除它们会改变求和的含义。 - 如果不按调用者查询,可以从请求、耗时、Token 和用量事件指标中移除
api_key_id、user_id、user_name。此建议不适用于预算及其他 Gauge 的必需身份标签;五个aisix_budget_*Gauge 均须保留user_name,否则网关会拒绝启动。仅在需要按团队监控的指标族中保留team_id。 - 监控凭据健康状态时,优先使用
provider_key_id而非凭据显示名称。名称作为标签时,改名会产生新序列。如果部署和查询需要区分环境,可添加env_id。 - 保留预算、剩余配额、部署状态及其他 gauge 的必需身份标签。这些指标表示各个对象的当前值,删除身份会使一个对象的值覆盖另一个对象,因此网关会拒绝此类配置。
以下示例按模型及服务提供方凭据聚合详细流量指标,移除调用者身份和显示名称。将这些条目加入现有的 observability.metrics.labels 映射,保留其他指标族的设置。每行会替换对应指标族的完整标签列表,因此应先根据仪表盘需求调整,再重启网关。
observability:
metrics:
labels:
aisix_proxy_requests_total: [endpoint, upstream_protocol, provider, model, provider_key_id, inbound_protocol, stream, is_fallback, status, outcome, error_source]
aisix_proxy_failed_requests_total: [endpoint, upstream_protocol, provider, model, provider_key_id, inbound_protocol, stream, is_fallback, status, outcome, error_source]
aisix_llm_requests_total: [endpoint, upstream_protocol, provider, model, provider_key_id, inbound_protocol, stream, is_fallback, status, outcome, error_source]
aisix_proxy_request_duration_seconds: [endpoint, upstream_protocol, provider, model, provider_key_id, inbound_protocol, stream, status, outcome]
aisix_llm_request_duration_seconds: [endpoint, upstream_protocol, provider, model, provider_key_id, inbound_protocol, stream, status, outcome]
aisix_llm_time_to_first_token_seconds: [endpoint, upstream_protocol, provider, model, provider_key_id]
aisix_llm_input_tokens_total: [endpoint, upstream_protocol, provider, model, provider_key_id]
aisix_llm_output_tokens_total: [endpoint, upstream_protocol, provider, model, provider_key_id]
aisix_llm_total_tokens_total: [endpoint, upstream_protocol, provider, model, provider_key_id]
aisix_llm_cached_input_tokens_total: [endpoint, upstream_protocol, provider, model, provider_key_id]
aisix_llm_cache_read_input_tokens_total: [endpoint, upstream_protocol, provider, model, provider_key_id]
aisix_llm_cache_creation_input_tokens_total: [endpoint, upstream_protocol, provider, model, provider_key_id]
aisix_usage_events_emitted_total: [handler, status_code, status, inbound_protocol, upstream_protocol, model, provider_key_id]
aisix_usage_event_drops_total: [reason, model, provider_key_id, upstream_protocol]
此示例保留 SLO 延迟直方图的默认标签,也不修改预算和配额 gauge;这些逐对象序列仍会影响总规模。未列出的指标继续使用全部默认标签,因此还需结合实际流量检查下表中的其他指标族。
容量应按实际观测过的标签组合估算,而非只看配置数量或当前请求速率。大量不同调用者访问后,即使业务暂时空闲,累计指标序列仍然存在。每个默认耗时 summary 输出七个分位值及 sum、count:两个此类指标族各有 50,000 组标签时,仅它们就产生 900,000 行样本,尚未包括 counter 和其他指标。包含 N 个有限桶边界的 histogram,每组标签产生 N + 3 条序列。在记录前裁减标签,可以减少网关存储、维护、序列化和传输成本。Prometheus 的 metric_relabel_configs 在网关生成响应后才执行,不能消除网关侧的这些工作;在那里删除标签也不会聚合样本。
直接抓取每个网关实例,避免通过负载均衡服务轮流读取多个实例的独立计数器。可从 30 秒抓取间隔、10 秒超时开始,在预期的峰值基数下测量,包括预热后的首次抓取。超时应短于抓取间隔,间隔则应满足告警时效要求。仅增大超时不会减少序列数量或 CPU 消耗。
同时检查 scrape_duration_seconds、scrape_samples_scraped、up、网关 CPU、RSS 和请求延迟。例如,查找已入库的 AISIX 指标中序列最多的指标族:
topk(10, count by (__name__) ({job="aisix", __name__=~"aisix_.+"}))
将 job="aisix" 替换为实际抓取任务名称。修改标签后,验证新的抓取结果,更新受影响的仪表盘和告警,并等待 Prometheus 按保留策略淘汰旧序列。
支持的变量
变量名就是输出的标签名。变量是否可用取决于指标;下表分别列出默认标签和额外支持的变量。请求归属缺失时使用 unknown;已有指标明确约定的其他缺省类别保持不变。没有请求上下文的后台指标不能使用请求变量。不支持任意请求头或表达式。
| 变量 | 含义 |
|---|---|
env_id | 配置的环境 ID。AISIX Enterprise 和 AISIX Cloud 会为受管网关设置它;通过 etcd 配置的 AISIX OSS 也可显式设置。未设置时为 unknown。所有指标均可使用。 |
trigger | 触发一次配置应用的原因:watch 表示一批被合并处理的 watch 事件,full 表示读取全 部被监听的前缀。在堆 profile 转储指标上:auto 表示达到内存阈值,manual 表示调试监听端口收到的请求。 |
endpoint | 匹配到的路由模板,不含调用方传入的动态路径参数。 |
inbound_protocol | 调用方使用的协议,由匹配的入口确定。 |
upstream_protocol | 所选服务提供方凭据对应的上游协议;尚未选择上游或非 LLM 请求时为 unknown。 |
provider | 本次观测归属的服务提供方类型;合议模型没有唯一服务提供方时为 ensemble。 |
model | 指标归属的网关模型配置标识。通配符请求使用配置中的模式;请求或尝试的归属范围见指标参考。 |
upstream_model | 上游模型标识。通配符请求使用配置中的模式,避免调用方生成无限多种标签值。 |
provider_key_id | 所选服务提供方凭据的 ID,不包含密钥内容。 |
provider_key_name | 同一服务提供方凭据的显示名称;重命名后会产生新的时间序列。 |
api_key_id | 用于认证的网关 API Key ID,不包含明文密钥。 |
api_key_name | 同一 API Key 的显示名称;没有显示名称时为 unknown。选择该变量后,重命名密钥会产生新的时间序列。1.5.0 及更早版本不支持。 |
team_id | 认证所用 API Key 关联的团队。 |
team_name | 同一团队的显示名称,读取自其团队名称文档;没有文档提供名称时为 unknown。选择该变量后,重命名团队会产生新的时间序列。1.5.0 及更早版本不支持。 |
user_id | 认证所用 API Key 关联的成员。 |
user_name | 同一成员的显示名称,读取自其成员名称文档;不存在该文档时取 API Key 自身的 user_name;两者都没有名称时为 unknown。1.5.0 及更早版本始终取 API Key 携带的名称。 |
stream | 是否请求流式响应,取值 true 或 false;用于详细请求指标。 |
streaming | 是否为流式请求,取值 true 或 false;用于请求延迟直方图。 |
is_fallback | 请求归属是否为回退尝试,取值 true 或 false。 |
status | 请求和用量事件指标中的 HTTP 状态码;A2A 指标中表示状态码类别。 |
status_class | HTTP 状态码类别:2xx、3xx、4xx、5xx 或 other。 |
side | 延迟观测所测量的区间。在两个 TTFT 指标上:upstream 表示从服务该请求的那次尝试开始,到上游第一个帧;downstream 表示从网关收到请求,到写给客户端的第一个帧。在 aisix_request_e2e_latency_seconds 上:upstream 表示产生响应的那次尝试的上游耗时;downstream 表示客户端感知的整个请求。在带有该标签的指标上始终输出,标签选择无法删除它。1.4.0 及更早版本的网关在 TTFT 指标上不输出 side 标签,1.4.0 及更早版本的网关在 aisix_request_e2e_latency_seconds 上不输出。 |
status_code | 用量事件指标中的 HTTP 状态码类别;同类指标的 status 标签保留具体状态码。 |
outcome | 指标定义的结果,例如请求结果、缓存决策或请求体大小限制结果。 |
error_source | 结束失败请求的一方:upstream 表示服务提供方返回错误或对其调用失败,aisix 表示网关自己决定或自身失败,成功或调用方断开时为空值。只在三个详细请求计数器上可用。显式列出标签的指标族只有在列表中写明时才携带它。1.8.0 及更早版本不支持。 |
client_type | 由内置规则或 client_type_rules 识别的客户端名称,不使用原始 User-Agent。 |
token_type | Token 类别:input、output 或 total;total 已包含 input 和 output。 |
fallback_model | 路由回退归属的模型配置名称。 |
scope | 限流决策的作用域。 |
layer | 限流决策的层级。 |
policy_id | 限流策略 ID,或该指标约定的缺省策略值。 |
policy_name | 同一限流策略的名称,或与 policy_id 相同的缺省策略值。1.5.0 及更早版本不支持。 |
reason | 认证、安全护栏、配置或导出器指标定义的有限原因代码。 |
method | 凭据认证所使用的方法。 |
result | 指标定义的认证、安全护栏执行或堆 profile 转储结果。 |
guardrail | 安全护栏配置的名称。 |
kind | 安全护栏指标中的防护类型,或配置指标中的资源类型。 |
phase | 安全护栏执行阶段。 |
error_type | 有限的安全护栏错误类别;无错误时为 none。 |
handler | 用量事件的处理入口族,例如 chat、messages、embeddings 或 mcp。 |
policy | 缓存策略配置的名称。 |
cause | 语义缓存向量嵌入失败的有限原因类别。 |
op | 语义缓存的存储操作。 |
operation | 指标定义的 Redis 操作或 A2A 操作。 |
exporter | 可观测性导出器配置的名称。在组件指标上,除导出器队列外为空。 |
agent | 已注册的 A2A Agent(智能体)名称。 |
state | 上游 Agent 报告的 A2A 任务状态。 |
hash | 网关已应用资源配置的哈希值。 |
stat | 内存分配器统计项:allocated、active、resident、mapped、retained 或 metadata。 |
runtime | 异步运行时:control,或表示第 N 个 thread-per-core 代理 worker 的 tpc-N。 |
component | 被测量的进程内存储,取自固定集合,例如 response_cache 或 log_queue。 |
各指标可用的变量
所有指标均可添加 env_id。所有默认标签都属于可选变量。额外变量列表示默认标签以外可以添加的变量;短横线表示没有。配置替换列表时必须包含必要身份标签。
| 指标族 | 默认标签 | 额外变量 | 必要身份标签 |
|---|---|---|---|
aisix_requests_total | provider, model, status, outcome | env_id | — |
aisix_request_duration_seconds | provider, model, status | env_id | — |
aisix_ratelimit_rejections_total | scope, layer, policy_id | policy_name, env_id | — |
aisix_tokens_consumed_total | provider, model | env_id | — |
aisix_llm_input_tokens_total | endpoint, inbound_protocol, upstream_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name | api_key_name, team_name, env_id | — |
aisix_llm_output_tokens_total | endpoint, inbound_protocol, upstream_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name | api_key_name, team_name, env_id | — |
aisix_llm_total_tokens_total | endpoint, inbound_protocol, upstream_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name | api_key_name, team_name, env_id | — |
aisix_llm_cached_input_tokens_total | endpoint, inbound_protocol, upstream_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name | api_key_name, team_name, env_id | — |
aisix_llm_cache_read_input_tokens_total | endpoint, inbound_protocol, upstream_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name | api_key_name, team_name, env_id | — |
aisix_llm_cache_creation_input_tokens_total | endpoint, inbound_protocol, upstream_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name | api_key_name, team_name, env_id | — |
aisix_llm_requests_total | endpoint, inbound_protocol, upstream_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, error_source | api_key_name, team_name, env_id | — |
aisix_llm_request_duration_seconds | endpoint, inbound_protocol, upstream_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name, stream, status, outcome | is_fallback, api_key_name, team_name, env_id | — |
aisix_llm_time_to_first_token_seconds | side(始终输出), endpoint, inbound_protocol, upstream_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name | api_key_name, team_name, env_id | — |
aisix_llm_tokens_by_client_total | client_type, model, token_type | env_id | — |
aisix_proxy_in_flight_requests | endpoint, inbound_protocol | env_id | endpoint |
aisix_proxy_requests_total | endpoint, inbound_protocol, upstream_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, error_source | api_key_name, team_name, env_id | — |
aisix_proxy_failed_requests_total | endpoint, inbound_protocol, upstream_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, error_source | api_key_name, team_name, env_id | — |
aisix_proxy_request_duration_seconds | endpoint, inbound_protocol, upstream_protocol, provider, model, upstream_model, provider_key_id, provider_key_name, api_key_id, team_id, user_id, user_name, stream, status, outcome | is_fallback, api_key_name, team_name, env_id | — |
aisix_proxy_client_cancelled_requests_total | endpoint, model, provider_key_id, provider_key_name | env_id | — |
aisix_proxy_request_body_limit_rejections_total | endpoint, inbound_protocol, outcome | env_id | — |
aisix_deployment_requests_total | provider, model, upstream_model, provider_key_id | provider_key_name, env_id | — |
aisix_deployment_success_responses_total | provider, model, upstream_model, provider_key_id | provider_key_name, env_id | — |
aisix_deployment_failure_responses_total | provider, model, upstream_model, provider_key_id | provider_key_name, env_id | — |
aisix_deployment_state | provider, model, upstream_model, provider_key_id | env_id | provider, model, upstream_model, provider_key_id |
aisix_deployment_cooled_down_total | provider, model, upstream_model, provider_key_id | provider_key_name, env_id | — |
aisix_routing_successful_fallbacks_total | model, fallback_model | env_id | — |
aisix_routing_failed_fallbacks_total | model, fallback_model | env_id | — |
aisix_ratelimit_remaining_requests | api_key_id, model | api_key_name, env_id | api_key_id, model |
aisix_ratelimit_remaining_tokens | api_key_id, model | api_key_name, env_id | api_key_id, model |
aisix_budget_limit_usd | api_key_id, team_id, user_id, user_name | api_key_name, team_name, env_id | api_key_id, team_id, user_id, user_name |
aisix_budget_spent_usd | api_key_id, team_id, user_id, user_name | api_key_name, team_name, env_id | api_key_id, team_id, user_id, user_name |
aisix_budget_remaining_usd | api_key_id, team_id, user_id, user_name | api_key_name, team_name, env_id | api_key_id, team_id, user_id, user_name |
aisix_budget_reset_seconds | api_key_id, team_id, user_id, user_name | api_key_name, team_name, env_id | api_key_id, team_id, user_id, user_name |
aisix_budget_details_present | api_key_id, team_id, user_id, user_name | api_key_name, team_name, env_id | api_key_id, team_id, user_id, user_name |
aisix_redis_failures_total | operation | env_id | — |
aisix_usage_event_drops_total | reason, model, provider_key_id, provider_key_name, user_id, user_name, upstream_protocol | env_id | — |
aisix_usage_events_rejected_total | — | env_id | — |
aisix_guardrail_blocks_total | — | env_id | — |
aisix_guardrail_bypasses_total | reason | env_id | — |
aisix_auth_decisions_total | method, result, reason | env_id | — |
aisix_guardrail_latency_seconds | env_id, guardrail, kind, phase, result, error_type | — | — |
aisix_usage_events_emitted_total | handler, status_code, status, inbound_protocol, upstream_protocol, model, provider_key_id, provider_key_name, user_id, user_name | env_id | — |
aisix_cache_requests_total | policy, outcome | env_id | — |
aisix_cache_semantic_embedding_seconds | policy | env_id | — |
aisix_cache_semantic_embedding_failures_total | policy, cause | env_id | — |
aisix_cache_semantic_store_failures_total | policy, op | env_id | — |
aisix_otlp_fanout_drops_total | exporter, reason | env_id | — |
aisix_otlp_fanout_failures_total | exporter | env_id | — |
aisix_request_e2e_latency_seconds | side(始终输出), env_id, endpoint, model, provider, status_class, streaming | inbound_protocol, upstream_protocol, upstream_model, provider_key_id, provider_key_name, api_key_id, api_key_name, team_id, team_name, user_id, user_name |