PagerDuty 告警炸开:checkout-service p99 延迟 > 2s,当前 4.7s,3 分钟前触发

你知道哪个服务出了问题,但为什么慢,一眼看不出来。

这时候 SigNoz AI 助手可以帮你从"知道哪慢"到"知道为什么慢",全程用自然语言,不用手写一行查询。

这篇文章基于 SigNoz 官方文档 - Latency Spike Explainer,完整还原一次延迟排查的实战过程。


为什么延迟排查这么让人头大?

告警触发之后,摆在你面前的问题往往不是一个,而是一串:

  • 是单个请求慢,还是所有请求都慢?
  • 慢在哪一层?前端?网关?下游服务?
  • 是最近改了什么引起的,还是外部依赖的问题?
  • 影响了多少用户?要不要现在回滚?

传统做法:拉 Trace 看 span、翻 Grafana 看折线、搜日志找关键词——每一步都要你自己知道去哪找、怎么问。

SigNoz AI 助手通过 MCP Server 把这些查询能力打通,你只需要用自然语言描述你想知道什么,它帮你查、帮你解读。


实战复盘:checkout-service 延迟飙到 4.7s

下面是一次完整的排查过程,按顺序走五步。


🔍 第一步:打开慢链路,看 span 结构

PagerDuty 告警已经告诉你是 checkout-service,但慢在哪一层还不知道。第一步就是找一条具体的慢请求,把调用链展开来看。

提问方式:

显示过去 30 分钟内 checkout-service 中时长超过 2 秒的链路追踪,
拆解最慢的一条的 span 结构

AI 返回的 span 树:

POST /api/checkout (checkout-service, 4,712ms)
  |-- ValidateCart        (checkout-service,   8ms)
  |-- GetCustomerProfile  (customer-service,  41ms)
  |-- ProcessPayment      (payment-service,  4,480ms)  ← 占总时长 95%
  |     |-- ChargeCard    (stripe-gateway,   4,430ms)
  |-- SendConfirmation    (notification-service, 已跳过,上游失败)

一眼就看出来了:95% 的耗时在 ChargeCard 这一个 span 上,是调用 Stripe 网关的那步。

📌 经验:直接看 span 树,比看监控折线更快定位瓶颈层。找出占比最高的那个 span,那就是重点。


🔍 第二步:判断是个别请求慢,还是全部都慢?

慢链路找到了,但要搞清楚:这是个别倒霉请求,还是所有用户都受影响了?

提问方式:

显示过去 2 小时内 checkout-service /api/checkout 接口的 p50 和 p99 延迟,
按 5 分钟间隔拆分

AI 返回的趋势:

  • 01:47 之前:p50 和 p99 都稳定在 ~400ms
  • 01:47 之后:p50 跳到 3.8s,p99 跳到 4.7s,同步飙升

结论:

p50 和 p99 一起涨,说明这不是尾部延迟(tail latency)问题,而是系统性故障——几乎所有请求都变慢了。

📌 经验:只看 p99 容易误判。p50 正常 + p99 异常 = 少数请求慢(可能是某类特殊数据);p50 p99 都异常 = 全面故障,优先级更高。


🔍 第三步:拿出"健康对照组",找出唯一差异

知道了问题在 ChargeCard,下一步要搞清楚:是代码改了,还是外部依赖出问题了?

拉一条故障发生的健康链路做对比。

提问方式:

帮我找 2-3 小时前 checkout-service 中时长低于 500ms 的链路追踪

故障前的健康 span 树:

POST /api/checkout (checkout-service, 387ms)
  |-- ValidateCart        (checkout-service,   6ms)
  |-- GetCustomerProfile  (customer-service,  38ms)
  |-- ProcessPayment      (payment-service,  291ms)
  |     |-- ChargeCard    (stripe-gateway,   248ms)
  |-- SendConfirmation    (notification-service, 31ms)

对比一眼看穿:

span 健康时 故障时 倍数
ValidateCart 6ms 8ms 1.3×
GetCustomerProfile 38ms 41ms 1.1×
ChargeCard 248ms 4,430ms 17.9×
SendConfirmation 31ms 跳过

调用链结构完全一样,只有 ChargeCard 耗时暴涨了近 18 倍。问题不在本地代码,根因在下游

📌 经验:对比"健康 trace vs 故障 trace"是最快排除自身代码问题的方法。结构不变、某个 span 暴涨,就去查那个依赖。


🔍 第四步:顺着依赖链追到真相

现在确定问题在 payment-service → stripe-gateway 这条链路上,去看这两个服务的延迟和日志。

提问方式:

显示过去 2 小时内 payment-service 的 p99 延迟,按 5 分钟间隔拆分。
同时拉取过去 30 分钟内 payment-service 的所有错误/警告日志

AI 返回的日志(关键片段):

01:47:12 WARN  Stripe 端点配置重载:区域从 us-east-1 切换为 eu-west-1
01:47:14 WARN  ChargeCard 延迟升高(2,341ms),正在重试
01:47:15 ERROR ChargeCard 5000ms 后超时
01:47:18 WARN  ChargeCard 延迟升高(4,102ms)

根因确认:

01:47:12 有一次配置变更,把 Stripe 的 API 端点从 us-east-1 切换到了 eu-west-1

之后每次支付请求都要跨大西洋往返——延迟从 248ms 涨到 4,430ms,完美吻合。

📌 经验:找到"第一条告警之前的日志"是关键。01:47:12 的配置变更比第一条延迟告警(01:47:14)早了整整 2 秒——根因往往藏在错误开始之前。


📊 第五步:量化影响,决定要不要回滚

找到根因还不够,要说清楚"损失多大",才能决定下一步动作。

提问方式:

显示过去 2 小时内 checkout-service 的总请求量和错误率,按 5 分钟间隔拆分。
超过 2 秒的请求占比是多少?

AI 返回的影响数据:

指标 数据
故障后总请求数 847 次
超过 2 秒的请求占比 94%
错误率(超时) 12%
趋势 稳定,未继续恶化

94% 的支付请求都在等 4 秒以上,用户体验全面崩盘。决策:立即回滚配置变更。

📌 经验:量化数据不只是为了汇报,更是决策依据。"影响 94% 用户"和"影响少数用户"的处置优先级是完全不同的。


整个排查路径,梳理成一张图

PagerDuty 告警 (p99 = 4.7s)
        ↓
[步骤1] 展开慢 trace → 定位 ChargeCard 占 95% 耗时
        ↓
[步骤2] 看 p50/p99 趋势 → 确认系统性故障(01:47 起)
        ↓
[步骤3] 对比健康 trace → 排除代码问题,锁定下游依赖
        ↓
[步骤4] 查 payment-service 日志 → 发现 01:47:12 配置变更
        ↓
[步骤5] 量化影响(94% 请求受影响)→ 决策:回滚

五步,平均每步一个自然语言问题,从"知道哪慢"到"知道为什么慢",不需要手写一行查询语句。


底层是怎么跑的?

这套流程背后,AI 助手通过 SigNoz MCP Server 调用了以下工具:

步骤 MCP 工具 用途
1 signoz_search_traces 按时长和时间范围筛选慢链路
1 signoz_get_trace_details 返回完整 span 树
2 signoz_aggregate_traces 计算 p50/p99 时序数据
3 signoz_search_traces 找故障前的健康基线链路
4 signoz_get_service_top_operations 获取下游服务的延迟拆分
4 signoz_search_logs 拉取 payment-service 的告警日志
5 signoz_aggregate_traces 统计请求量和错误率

三条排查原则,值得记住

原则一:多分位数一起看,不要只盯 p99

场景 p50 p99 含义
尾部延迟 正常 异常 少数请求慢,可能是特殊数据或特定用户
系统性故障 异常 异常 几乎所有请求都慢,优先级更高

原则二:顺着依赖链走,不要停在第一层

瓶颈 span 是下游调用,就去看那个下游服务的延迟和日志。横向追踪,不要只纵向挖。

原则三:先量化影响,再决定动作

影响 1% 的请求和影响 94% 的请求,处置方式完全不同。在唤人、回滚、扩容之前,先拿到数字。


怎么接入?

使用 SigNoz AI 助手进行延迟排查,需要:

  1. 有 SigNoz 实例(Cloud 或 Self-Hosted)
  2. 服务已完成分布式追踪埋点(OpenTelemetry)
  3. 连接 AI 助手到 SigNoz MCP Server

写在最后

这次排查的核心突破点,是 01:47:12 那条配置变更日志——比第一条延迟告警早了两秒钟,藏在大量正常日志中间,用肉眼翻很容易错过。

AI 助手的价值不只是"帮你查",更是帮你把下一个问题问对。当它告诉你 ChargeCard 占了 95% 耗时,你的下一问自然就变成"为什么 ChargeCard 这么慢"——排查思路被自然地牵引着向前走,而不是你对着屏幕发呆想从哪开始。

延迟排查本质上是一个"缩小怀疑范围"的过程。工具越顺手,这个过程越快。


参考资料

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐