APM 跨应用 Trace 检索
0x01 背景
a. Why
APM Trace 当前按应用维护结果表和日志索引集。用户按 Trace ID 检索前必须先确定应用,无法直接找到同业务内跨应用传播的完整调用链。
BKLog 已支持一个索引集关联多个结果表,并通过 DataLabel 交给 UnifyQuery 查询。APM 可以按 Trace 数据源域维护聚合索引集,复用现有 Trace 数据源。
b. 目标
- 白名单 Trace 数据源域的 Trace Detail 可以按 Trace ID 检索同域全部 APM 应用。
- Trace 数据源域索引集随应用创建、删除自动收敛,并由周期任务修复遗漏。
- 同一索引集支持成员使用不同的
storage_cluster_id。
0x02 实现路线
a. 建议的方案
- 索引集名称由
bk_biz_id唯一确定,负数 ID 规范化为bkapm_cross_trace_space_{abs(bk_biz_id)},BKMonitor 不保存index_set_id映射。 - Celery 同步任务实时读取 APM 应用、Trace 数据源和 ES 存储配置,再查询 BKLog 索引集:未命中时创建,命中且有成员时按 ID 更新,无成员时删除。
- 应用创建完成、删除完成时触发 Trace 数据源域对账;周期任务扫描白名单并复用同一对账入口。
- Trace Detail 后台每次无缓存查询 BKLog 索引集,根据实时
index_set_id构造 DataLabel 并查询 UnifyQuery。
b. 约束
- 能力默认关闭,仅对白名单 Trace 数据源域生效。
- Trace 数据源域索引集与现有应用级索引集并存,不修改应用级索引集生命周期。
- 每个索引成员显式携带自己的
storage_cluster_id,索引集级配置只作兼容兜底。 - 任一成员缺少结果表或存储信息时终止本轮更新,避免写入不完整快照。
- 本期只适配 Trace Detail 后台接口,不修改 APM Web 前端和其他 Trace 查询接口。
- Trace 数据源域退出白名单后立即关闭跨应用查询,遗留的 BKLog 索引集暂不清理。