Prhub

#22247 [Anthropic] Fix clock mismatch in received_time causing negative Prometheus metrics

原始 PR 作者 lixuwei2333 合并时间 2026-04-14 12:22 文件变更 1 提交数 3 评论 3 代码增减 +3 / -2

执行摘要

修复 Anthropic API 入口时钟不匹配导致的 Prometheus 指标负值问题。

修复Issue #22249描述的Anthropic API入口产生负TTFT和端到端延迟指标问题。PR body指出:Anthropic入口使用time.time()(挂钟,约1.7e9),而下游req_time_stats.py计算与time.perf_counter()(单调,约1e5)的差值,导致Prometheus直方图出现大负值。OpenAI入口已在PR #17640修复,但Anthropic入口被遗漏。生产环境中发现Anthropic API请求在Grafana仪表板持续产生负值。

该PR值得快速浏览,了解时钟不匹配导致的监控指标问题。关注点:

  1. 时钟选择对分布式系统指标的重要性。
  2. 为何保留received_time_perf变量(用于本地validation_time计算)。
  3. 与PR #17640的关联,体现跨入口一致性修复。
讨论亮点

gemini-code-assist[bot]指出monotonic_time是time.perf_counter()的别名,导致received_time和received_time_perf现在持有相同值,建议合并赋值以提高清晰度和效率,例如received_time = received_time_perf = monotonic_time()并移除冗余行。但PR作者未采纳该建议,最终变更保持两个独立变量。JustinTong0323批准PR。

实现拆解

修改单个文件python/sglang/srt/entrypoints/anthropic/serving.py:

  1. 添加from sglang.srt.observability.req_time_stats import monotonic_time导入。
  2. 在_handle_non_streaming和_handle_streaming方法中,将received_time = time.time()替换为received_time = monotonic_time()。received_time_perf保持不变,用于本地validation_time计算。
文件 模块 状态 重要度
python/sglang/srt/entrypoints/anthropic/serving.py entrypoints/anthropic modified 8.0

关键符号

_handle_non_streaming _handle_streaming monotonic_time

分析完成后,这里会展示 LLM 生成的相对完整源码片段和详细注释。

评论区精华

冗余时钟调用优化 性能

gemini-code-assist[bot] 指出 monotonic_time 是 time.perf_counter() 的别名,received_time 和 received_time_perf 现在值相同,建议合并赋值以避免冗余调用。

结论:PR 作者未采纳建议,保持两个独立变量,可能因为 received_time_perf 用于本地 validation_time 计算,但未明确说明。 · 未解决

风险与影响

风险极低:

  1. 仅更改时间戳来源,不影响核心请求处理逻辑或模型输出。
  2. 使用单调时钟避免挂钟调整(如NTP同步)影响延迟测量,提升指标准确性。
  3. 与OpenAI入口修复一致,已验证方案。潜在风险:未合并冗余赋值可能导致轻微性能开销(两次调用同一函数),但影响可忽略。

影响范围:

  1. 用户:修复生产环境监控指标,使Anthropic API的TTFT和端到端延迟指标恢复为正确定值,提升可观测性。
  2. 系统:仅影响Prometheus指标收集,不改变请求处理行为。
  3. 团队:统一Anthropic和OpenAI入口的时钟使用,减少维护不一致性。影响程度:局部,限于Anthropic入口的指标计算。
指标准确性修复 跨入口一致性

关联 Issue

#17640 Use monotonic clock for request timing stats (#17482)
#22249 [Bug] Anthropic API entrypoint produces negative TTFT and e2e latency in Prometheus metrics

完整报告

参与讨论