服务地图与 APM 使用相同的 trace 输入,但属于不同投影。服务地图通过跨服务
父子 span 配对构建拓扑;APM 构建有界的服务、事务、依赖、错误与版本聚合。
服务地图如何构建
trace span 到达时,MoleSignal 会把每个 span 与对应父 span 配对。当两个 span 属于不同 服务时,这就是一条调用边——父服务 → 子服务——边的时延与错误状态取自子(被调)span。同一服务内部 的父子 span 属内部调用,不画成边。 边会按服务对累计进一分钟的桶,并在后台周期落库,因此地图大约在半分钟内即反映最近的流量。内存模式 vs 存储模式
默认(intake 模式)配对在接入 span 的节点上以内存态完成——延迟低。多节点部署下,同一次调用的
父子 span 若落到不同节点则无法在内存配对,地图可能少算这些边(但绝不会凭空造边)。
要在跨节点下得到完整地图,把 设置 → 通用 → 服务图数据来源 切到 storage(存储重算) 模式:
由单个节点周期性从存储里的 trace 重建服务图——无论哪个节点接入都能看到全部 span——代价是约
1–2 分钟延迟。该设置存于数据库、运行时即时生效,无需重启。
需要发送什么
地图需要这样的 trace:- 每个 span 带
service.name资源属性(OTLP exporter 会自动设置),并且 - 存在跨服务边界的父子 span 关系——即一个服务里的 client span 对应另一个服务里的子 server span。
拓扑
拓扑端点把一个时间窗聚合成节点(服务)与边(调用):原始服务图
若想要底层逐分钟的边快照——便于把某条依赖随时间画成图——可直接查询服务图:from 与 to 为 Unix 纪元以来的微秒。可选的 service 过滤会返回指定服务作为调用任一端出现的边。每行携带
一个服务对在一分钟内的 request_count、error_count 以及 p50_us / p95_us / p99_us。
在界面里
- Services 页按流量排序,列出每个服务的速率、错误率和 p95。
- 打开某个服务可看到上游调用方与下游依赖。
- 拓扑视图绘制实时图——边的粗细随流量,颜色随错误率。
拓扑与服务图 API
通过 HTTP 查询拓扑与原始服务图端点。
应用性能监控
分析服务 RED 指标、事务、依赖、错误与部署。