跳到主要内容

日志与审计

AISIX Cloud 控制面为运维人员提供两类证据链:用于 AISIX 网关流量的请求日志,以及用于控制面状态变更的审计日志。两者结合起来,可以帮助团队了解一次请求发生了什么,以及是谁修改了影响流量的资源。

使用请求日志排查具体的 AISIX 网关请求;使用审计日志排查配置、访问权限和其他控制面变更。

请求日志

请求日志基于 AISIX 网关遥测数据生成。它展示单个请求的结果,包括请求时间、状态、请求模型、调用方 API Key、延迟、Token 数量,以及可用时的尝试详情。延迟会从两个角度报告:调用方等待了多久,以及上游处理花费了多久。这样无需猜测即可判断慢请求的延迟来源。

展开一行会看到 AISIX 分配的请求 ID;如果这次调用到达了会返回 ID 的服务提供方,旁边还会有一个服务提供方请求 ID。二者含义不同:前者由 AISIX 通过 x-aisix-request-id 响应头返回给调用方,也是报障的调用方通常手上唯一有的 ID;后者是上游服务提供方在自己的响应中返回的 ID,例如 OpenAI 的 chat.completion.id 或 Anthropic 的消息 id,服务提供方的控制台和技术支持渠道正是按它检索这次调用的。先用前者查到该请求,再从中读取后者,然后拿它去找服务提供方。

如果本次调用没有产生服务提供方请求 ID,该字段不会显示:包括响应由缓存命中返回、请求在 AISIX 到达服务提供方之前就被拒绝,以及服务提供方响应本身就不带 ID 的端点(如 Embedding、音频和图像生成)。重试或故障转移的请求会按拿到响应的尝试各记录一个,因此请展开实际向调用方返回响应的那次尝试。

带有 estimated 标记的行包含一个或多个本地计算的 Token 数量,因为上游响应省略了这些值或将其报告为零。这种情况可能出现在 OpenAI 兼容中继、客户端在流式传输中途断开,以及上游返回部分响应后出错时。估算的 Token 数量会与服务提供方报告的数量一起计入支出和预算计算。排查用量或支出时,可以通过该标记区分估算值。有关支持的端点和估算行为,请参阅用量上报

AISIX Cloud 控制面的请求日志页面,展示筛选条件、请求状态、Token 用量、延迟和展开后的请求详情

数据面会批量刷新遥测数据,因此刚完成的请求可能需要几秒才会出现。

每行都会显示本地日期和时间,因此跨越多天的时间范围仍易于阅读。将鼠标悬停在时间戳上可查看包含时区的完整日期和时间。

当需要验证实时请求、检查上游错误、确认策略拒绝,或查看路由与故障转移如何解析请求时,请先查看请求日志。

解读延迟数据

请求日志行会显示调用方等待的时间。展开该行可以查看拆分后的测量值,因为单个数字无法判断慢请求是由服务提供方还是网关造成的:

字段测量内容范围
调用方延迟从网关收到请求,到完成非流式响应或开始发送流式响应。整个请求,包括每次重试和故障转移尝试。
上游延迟实际处理该请求的尝试与服务提供方通信所花费的时间。一次尝试。
上游 TTFT该尝试等待服务提供方首个流式帧的时间,无论帧内容为何——包括 response.createdmessage_start 等元数据起始帧。仅适用于流式请求。一次尝试。

讨论 SLO 时应引用调用方延迟;Overview 页面中的 Latency p50 / p99 卡片也使用该指标。

上游 TTFT 在流的首个帧到达时停止计时,而不是首个可见 Token。这与部署在 AISIX 前面的代理和网关的统计口径一致,因此该值可以与它们记录的数据直接对比。如果推理模型在思考期间不输出任何可见内容——例如 /v1/responses 上游会立即打开流、但不输出推理摘要——那么即使回答文本很晚才开始,TTFT 也会很小;这段思考等待计入上游延迟,而不是 TTFT。

对于流式响应,调用方延迟会在流开始时停止计时,而不是等到流结束。流的总持续时间会随模型生成的 Token 数量增加,无法有效反映用户体验;用户真正感知的是输出开始出现前的等待时间。

比较这些字段可以定位延迟。如果请求未重试,而调用方延迟远高于上游 TTFT,说明时间花在网关侧处理上。常见原因是执行脱敏的输出安全护栏:它必须缓冲完整响应流后才能释放内容。如果两者接近,则主要耗时来自服务提供方。对于发生重试或故障转移的请求,差值还包含先前的尝试,因此应先查看尝试记录。

Latency p50 / p99 卡片只统计成功请求。被拒绝的请求通常很快,正是因为系统没有执行多少处理;如果将其计入,会拉低百分位数并掩盖实际的慢请求。

备注

0.7 之前的数据面只记录单一延迟值,没有面向调用方的延迟,因此这些记录不会计入延迟百分位数。升级后记录的流量才会使用拆分后的延迟字段。

搜索请求

筛选器上方的搜索框会在请求的所有文本字段中查找输入内容,且不区分大小写。搜索范围包括错误消息和错误类别、请求模型和解析后的模型名称、服务提供方及服务提供方密钥标签,以及客户端 User-Agent、源 IP、完成原因、请求 ID 和服务提供方请求 ID——因此服务提供方技术支持渠道提供的 ID 也能在这里找到对应的请求。当你只掌握客户端报告的部分错误内容,却不知道它位于哪个字段时,可以使用搜索功能。

搜索会与筛选器组合,而不是替代筛选器。例如,搜索 rate limit 并同时选择 5xx 状态筛选器,只会返回文本中提到限流的服务端错误。已知请求 ID、模型、服务提供方密钥或调用方 API Key 时,专用筛选器仍是更精确的方式。

导出请求

Export 会下载符合当前筛选条件和搜索内容的所有请求,而不仅是屏幕上的当前页。选择 CSV 可在电子表格中审查,选择 JSON 可供下游流水线使用;JSON 会返回与控制面 API 相同的字段,并包装在包含 data 数组和 total 总数的对象中。

两种格式都包含请求时间、请求 ID、尝试详情、状态和错误文本,还包括请求模型和解析后的模型名称、调用方 API Key 名称、Token 数量、延迟及成本。调用方延迟和上游延迟会分别写入独立的列。CSV 文件采用带字节顺序标记的 UTF-8 编码,因此电子表格应用可以正确读取非 ASCII 错误消息。

一次最多导出 50,000 个请求,并按时间从新到旧排列。当匹配结果超过该数量时,控制面会导出最新的 50,000 个请求,并报告完整的匹配总数。请缩小时间范围或筛选条件,以导出其余请求。

审计日志

审计日志记录控制面状态变更,用于合规审查和运维调查。它会显示谁创建、更新或删除了环境、模型、API Key、服务提供方密钥、预算、策略和 Admin Token 等资源。

如果配置更新后流量行为发生变化,请使用审计日志。请求日志可以展示请求结果,审计日志则可以确认该结果出现前是否修改了控制面资源。

只有组织 Owner 和 Admin 可以访问审计日志。

条目按时间从新到旧排列,记录列表底部会显示当前筛选条件匹配的条目总数。页码对应完整的已筛选集合,而不是当前已经加载的内容,因此可以从已知位置继续审查。

筛选和搜索审计记录

记录列表上方的筛选器可以按资源类型、Actor 和时间缩小范围。资源类型列表只提供该组织实际记录过的类型。时间范围提供预设值和 Custom range;后者接受明确的开始与结束时间,可将审查锁定到事件发生的精确时间窗口。

搜索框会在条目的可读字段中查找输入文本,且不区分大小写。搜索范围包括变更前后的状态(资源显示名称位于其中)、资源类型和标识符、Action、Actor 标识符、客户端 IP 地址和 User-Agent。如果工单只给出了资源名称,却没有说明是哪次变更影响了它,可以使用搜索功能。

搜索会与筛选器组合,而不是替代筛选器。例如,搜索模型名称并同时选择一个 Actor,只会返回该人员涉及该模型的变更。已知资源类型或 Actor 时,专用筛选器仍是更精确的方式。

导出审计记录

Export 会下载符合当前筛选条件和搜索内容的所有条目,而不仅是屏幕上的当前页。选择 CSV 可在电子表格中审查,选择 JSON 可供下游流水线或证据归档使用。JSON 会返回与控制面 API 相同的字段,并包装在包含 data 数组和 total 总数的对象中。

两种格式都包含条目时间和标识符、Action、资源类型和标识符、客户端 IP 地址和 User-Agent,以及完整的变更前后状态。它们还会同时包含 Actor 的电子邮件地址和 Actor 标识符,使没有控制台访问权限的审查人员也能理解导出文件。CSV 文件采用带字节顺序标记的 UTF-8 编码,因此电子表格应用可以正确读取非 ASCII 资源名称。

一次最多导出 50,000 个条目,并按时间从新到旧排列。当匹配结果超过该数量时,控制面会导出最新的 50,000 个条目,并报告完整的匹配总数。请缩小时间范围或筛选条件,以导出其余条目。

调查请求结果

使用属于同一网关环境的调用方 API Key 和模型别名,通过 AISIX 网关端点发送请求。

请求完成后,在请求日志中检查匹配的请求时间、状态、请求模型和调用方 API Key。如果请求使用了路由或故障转移,请在可用时查看解析后的模型或尝试详情。

上游身份认证、配额或服务提供方侧错误仍可以证明 AISIX 网关路径正常。此时,请求已经到达 AISIX;AISIX 选择了已配置的模型和服务提供方密钥,随后上游服务提供方返回错误。

除非日志显示错误的模型、服务提供方密钥或环境,否则不要把服务提供方错误视为资源投射失败。

调查策略拒绝

AISIX Cloud 策略可以在 AISIX 调用上游服务提供方前拒绝流量。预算硬性限制会返回预算相关错误,限流策略会返回限流错误;安全护栏可以根据钩子点,在服务提供方调用前或调用后拒绝不安全内容。

请求被拒绝时,请先确认响应来自 AISIX 还是上游服务提供方,再通过请求日志检查状态和请求身份。

对于预算拒绝,请把返回的预算 Scope 与 Budgets 视图进行比较。对于限流拒绝,请检查与请求匹配的调用方 API Key、模型、团队或成员策略。对于安全护栏拒绝,请检查安全护栏 Scope,以及触发它的模型或调用方身份。

流量未出现在请求日志中

如果请求日志中没有预期记录,请先检查请求路径。请求日志只包含选中环境的 AISIX 网关流量,因此发送到其他网关端点或其他环境的请求会显示在对应位置。

如果请求路径正确,请检查 AISIX 网关是否有较新的心跳,并确认它可以访问控制面遥测端点。

其他控制面信号也可以帮助缩小原因:

信号显示内容
数据面心跳AISIX 网关是否已连接控制面,并且是否从预期环境上报。
用量控制面是否收到了用于汇总用量和预算工作流的 AISIX Cloud 网关遥测数据。
可观测性导出器健康状态网关是否已应用导出器配置,并是否正在上报外部遥测目的地的投递状态。

外部导出器

请求日志展示控制面对 AISIX Cloud 网关遥测数据的视图。可观测性导出器从环境的 Observability 视图配置,并将用量事件从 AISIX 网关发送到你控制的目的地。

当需要将请求遥测发送到外部链路追踪、日志、存储或核算系统时,请使用导出器。导出器由 AISIX 网关直接向目标目的地投递数据。即使外部目的地存在凭证、网络或接收路径问题,请求日志仍然可能存在。

数据保留

控制面会根据每个组织的保留窗口保存 AISIX Cloud 网关遥测数据,其中包括 Request LogsUsage 视图背后的数据。默认情况下,记录会保留 30 天,控制面每天自动移除更早的记录。

组织 Owner 和 Admin 可以在 Settings 下的 Usage log retention 中,将保留窗口设置为 1 到 3650 天。较长窗口会保留更多历史记录,便于调查和报告;较短窗口会减少存储的数据量。变更只对后续清理生效,并在下一次每日清理时应用。

由于保留策略,较早的流量最终会从请求日志和用量视图中消失。如需在保留窗口之外保存请求遥测,请配置外部导出器,在记录被移除前把用量事件投递到你控制的目的地。

下一步

有关支持的自动化操作,请使用 AISIX Cloud Admin API 参考。如需将网关遥测数据投递到自有系统,请继续阅读可观测性导出器