ARMS 链路追踪实践:千里达票务系统接口慢调用的定位过程
接入 SLS 之后,我们能知道"哪个接口报错多",但不知道"慢在哪一跳"。一次国庆当天,用户反馈"点下单转圈 5 秒",日志里下单接口本身没报错,还是慢。接入阿里云 ARMS 应用实时监控后,一条 TraceId 串起网关、订单服务、RDS、Redis、下游短信,一眼看出是支付回调里同步调了外部风控接口,超时没设。
一、要解决的问题
- 单接口 P99 抖动,但日志里看不到瓶颈;
- 微服务化后一次请求跨 4-5 个服务,人肉排不过来;
- 需要看 SQL 级、方法级耗时。
二、接入方式
ARMS Agent 以 -javaagent 方式挂到 JVM,零代码侵入
→ 自动埋点 HTTP/RPC/SQL/Redis
→ 控制台查看调用拓扑与 Trace
三、关键能力
3.1 调用拓扑
ARMS 自动画出服务依赖:小程序 → SLB → API 网关 → 订单服务 → RDS/Redis/支付。每个节点标红显示超时率。
3.2 一条 Trace 看清耗时
TraceId: abc123
├─ GET /api/order/create 5200ms
│ ├─ SQL: insert into t_order 30ms
│ ├─ Redis: decr stock 5ms
│ └─ HTTP: risk.check 5100ms ← 瓶颈在这
直接定位:外部风控接口没设超时,默认 5 秒,节假日对方抖动时我们跟着慢。
3.3 前端监控
ARMS 前端监控 SDK 注入小程序/H5,能看到真实用户的白屏、API 错误、慢页面。
四、踩坑复盘
- Agent 启动慢:ARMS Agent 初始化占 3-5 秒,容器冷启动变慢。解决:调整挂载时机,JIT 后再初始化;
- 采样率太高成本高:默认全采样,一个月账单翻倍。解决:错误全采,正常请求按 10% 采样;
- 业务标签没打:只看到接口路径,不知道是哪个景区。解决:在代码里
Tracer.putTag("sceneId", sceneId); - 告警规则没配:只看仪表盘不报警,问题还靠用户反馈。解决:P99 超阈值接云监控告警。
五、效果与总结
ARMS 上线后,慢接口定位从"翻日志猜"变成"点 Trace 看火焰图",平均排查时间从 1 小时缩到 5 分钟。对千里达票务系统这种微服务架构,日志解决"是什么",ARMS 解决"卡在哪一跳",两者缺一不可。