记录一次指标异常排查
文章目录
偏离的数据
某个部署在圣保罗🇧🇷的地域的服务 svc-a,需要调用部署在 加拿大🇨🇦 的一个子系统 svc-b。按照物理直线距离来说,渥太华和圣保罗之间有 8000 公里,光速跑个来回也得要 53ms。但是,在业务部署上线后,监控面板显示 P99 只有 10ms。

问题排查
这明显是是反直觉了。进入业务部署容器,使用 curl 的 -write-out 参数打印请求详细流水,可以看到如下结果:
| |
curl write out 格式文件 curl.fmt 内容如下:
| |
从请求流水看出,跨洲际的服务调用延迟确实很高,符合认知和物理极限。可以肯定的是指标埋点代码出了问题。
结论
检查对应的代码,发现该指标使用了 prometheus.DefBuckets 作为 prometheus.Histogram 的默认 Buckets 参数,这个参数的取值范围是 []float64{.005, .01, .025, .05, .1, .25, .5, 1, 2.5, 5, 10}。而埋点的代码这是格式化 time.Duration 成了 Milliseconds。
结果,可想而知。P99 能够看到的最大值也就是 10ms 了。最后,通过修改代码发布上线解决。
文章作者 疯魔慕薇
上次更新 2024-04-29