Skip to content

监控、日志与告警

Sub2API 自带 Ops 页面,路径为 /admin/ops。它适合从请求、账号和应用三个层面做第一轮定位,但仍应配合主机、容器、PostgreSQL、Redis 和反向代理监控。

先开启两层开关

运维模块有两层控制:

  1. 部署硬开关:OPS_ENABLED=true 或 YAML ops.enabled: true,修改后需要重启。
  2. 后台软开关:系统设置中的 Ops Monitoring,可运行时启停。

实时 QPS WebSocket 还有独立软开关。Ops 接口被关闭时不应影响网关主链路。

Ops 页面能看什么

区域主要用途
健康分快速发现业务或基础设施退化,不作为唯一判断
QPS/TPS当前、峰值和平均吞吐
吞吐/切换趋势请求量、Token、账号切换是否异常
延迟duration 与 TTFT 分位数
错误趋势/分布请求错误、业务限制、上游 429/529 等
并发/排队平台、Group、Account、User 的 in-use 和 queue
账号可用性可用、限流、过载、错误和临时摘除
请求明细按 Request ID、用户、Key、账号、模型定位
系统日志按 component、level 和上下文检索
Job heartbeat聚合、清理、刷新、告警等后台任务状态

健康分的实现侧重业务 70%、基础设施 30%;无流量时可能显示健康,不能据此证明真实模型请求可用。

/health 的边界

当前 /health 只返回进程存活:

json
{"status":"ok"}

它不主动 Ping PostgreSQL、Redis、上游 API,也不验证调度是否有账号。因此应拆分探针:

  • LivenessGET /health,用于判断进程能否响应。
  • 外部可达性:通过公网域名访问 /health,验证 DNS/TLS/Proxy。
  • 依赖健康:看 Ops system metrics 或独立检查 DB/Redis。
  • 业务合成监控:用低额度专用 Key 定时请求低成本模型。

不要让合成监控使用生产用户 Key,也不要高频调用昂贵模型。

错误归因字段

排障优先看这些字段:

字段回答的问题
request_id / client_request_id是否是同一个请求
phaseauth、routing、upstream、billing 等哪一阶段失败
error_ownerclient、provider 还是 platform
error_sourceclient_request、upstream_http 还是 gateway
user_id / api_key_id影响哪个用户和凭证
group_id / account_id最终路由到哪里
inbound/upstream endpoint入口与真实上游端点是否一致
requested/upstream model模型映射是否符合预期
upstream status/message上游真实错误是什么
auth/routing/upstream/response latency慢在哪一段

先按 Request ID 查单请求,再按 account/group/platform 扩大时间范围。不要直接用错误消息全文作为唯一筛选条件。

建议的告警基线

按业务量调整,以下只作为起点:

告警建议条件级别
分组可用账号数< 1 持续 1 分钟P0/P1
分组可用比例< 50% 持续 5 分钟P1
请求错误率> 5% 持续 5 分钟P1
上游错误率> 10% 持续 5 分钟P1
限流账号比例> 50% 持续 5 分钟P1/P2
并发队列深度> 0 持续 5 分钟P2
CPU> 85% 持续 10 分钟P2
内存> 90% 持续 10 分钟P1/P2
错误账号数超过冗余容量P1
临时不可调度账号持续增长P2

Group 级可用账号告警必须指定 group_id。全局有账号不代表某个生产 Group 有账号。

告警运行设置

规则支持窗口、持续时间、冷却时间、严重级别、平台/Group 过滤和邮件通知。多实例环境中告警评估使用 Redis 分布式锁,避免每个副本重复发信。

运维要求:

  • 配置真实收件人并发一次测试告警。
  • 冷却时间不应长到掩盖持续故障。
  • 维护窗口使用有截止时间和原因的 silence。
  • 维护结束后检查 silence 已失效。
  • resolved 通知与 firing 通知都应可追溯。

日志等级和采样

运行时可以调整日志 level、采样、caller、stacktrace 和保留期。故障调试建议:

  1. 先按 Request ID 使用现有 info/error 日志。
  2. 只对必要时间窗口提高日志等级。
  3. 记录开始和恢复时间。
  4. 结束后恢复默认,避免日志量和敏感信息风险。

系统日志写入也有自己的队列健康指标:queue depth、dropped count、write failed count、平均写入延迟。应用正常但日志 dropped 持续增长时,应处理写入压力或采样,而不是假设“没有错误”。

数据保留

Ops 默认提供错误日志、分钟指标、小时指标的清理和预聚合。保留时间要结合:

  • 故障回溯周期。
  • 财务和用户投诉周期。
  • PostgreSQL 容量。
  • 隐私与合规要求。

清理 Ops 错误日志不等于清理全部 usage 或审计数据。修改前确认具体数据集,并先备份。

本文档用于帮助你理解、部署和运维 Sub2API。使用前请确认上游服务条款与当地法律要求。