记录一次指标异常排查
文章目录
偏离的数据
某个部署在圣保罗🇧🇷
的地域的服务 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