Metrics 与 Trace 关联
指标(Metrics)和链路追踪(Trace)是最常被一起提及的可观测性数据源。指标告诉你「系统正在变慢」或「错误率正在上升」,链路追踪告诉你「哪一步变慢了」或「哪个错误在哪发生的」。两者的结合,让故障排查从「大海捞针」变成「按图索骥」。
关联的核心思路是:指标异常时,自动关联到触发这次异常的 Trace 样本。例如,当某服务的 P99 延迟突然上升时,不仅要触发告警,还应该展示这次延迟尖峰对应的 Trace 样本,让值班人员可以直接查看「这次变慢的请求长什么样」。
Exemplars:指标与 Trace 的桥梁
Prometheus 从 2.25 版本开始支持 Exemplars,这是将 Metrics 与 Trace 关联的标准机制。Exemplars 允许在指标数据点中嵌入一个可选的 TraceID,当这个指标被绘制在 Grafana 图表上时,Hover 可以直接展示关联的 Trace 链接。
使用 Exemplars 的典型场景是 Histogram 类型的指标。每个 Histogram bucket 可以附加一个 Exemplar,记录「这个 bucket 中的某个请求」的 TraceID。当你在图表上发现 P99 延迟异常时,点击对应的时间点,可以直接跳转到那次请求的 Trace 详情。
关联查询的实践
在 Grafana 中,可以通过 Explore 页面的混合数据源查询实现 Metrics 与 Trace 的关联。首先查询指标数据,定位异常时间点;然后基于该时间点的标签(如 endpoint、status_code)过滤 Trace 数据。这种查询模式让你在同一个界面中完成「发现异常 → 追溯链路」的全流程。
进阶实践是将 Trace 数据导出为 Metrics。通过分析 Trace 数据,计算每个服务的调用次数、错误率、延迟分布,然后导入到 Prometheus 中。这种「Trace 转 Metrics」的方式让你可以用 PromQL 对历史 Trace 数据进行灵活分析,但代价是 Trace 原始数据的丢失。