APM 工具怎么选:链路、留存与排障成本一起看

从插桩与上下文传播、头尾采样、Span 留存和日志/RUM 关联,比较托管 APM、自托管与云服务的真实工作和计费边界。

行业洞见 最佳实践
应用请求通过采集与采样连接链路、日志和用户体验的技术示意

一条请求变慢,服务拓扑通常能指出它经过了哪里,却未必能解释时间花在了哪里。代码执行、下游等待和主机资源争用可能出现在同一条链路中。排障人员还要找到对应日志、容器指标或用户会话;这些数据如果分散在不同系统,时间范围和请求标识就得逐一对齐。

我会沿着这条调查路径选 APM 工具:应用能留下什么记录,哪些会被采样掉,保留多久,值班人员能继续查到哪里。已有 SkyWalking、Jaeger 或云厂商服务能够回答的问题,无须为了统一品牌再搬一次。真正值得付费替换的,是反复缺失的上下文,以及团队不愿继续承担的后端工作。

观测云编辑部 · 2026 年 10 月 28 日。本文根据官方文档比较技术机制与运营责任,观测云也是候选方案;未执行同负载压测或客户成本测试。

先弄清楚缺失的 Span 发生在哪里

分布式追踪用 Span 记录已插桩的操作,再通过上下文传播连接请求。APM 在这些记录及其他遥测之上提供请求量、错误、延迟和依赖分析。拓扑图上有一个服务,不代表每次调用都留下了可供回查的完整 Trace。概念的展开可以参阅 APM 是什么,这里关心调查实际需要哪些记录。

同步 HTTP 调用只是其中一条路径。调用方要注入上下文,网关要保留传播头,下游要提取它;异步队列和线程切换也需要适用的插桩或显式传递。W3C Trace Context 的 traceparent 带有 trace ID 与父 Span 等信息。仅把两边的 service.name 设置成相同值,不能代替这条因果关系。OpenTelemetry 上下文传播

自动插桩覆盖的框架、库和运行时,可以少写很多采集代码。自定义业务步骤仍可能需要补 Span 或属性;eBPF 也要对应具体内核、协议和实现判断覆盖范围。一次支付为什么重试三次,不能仅凭观察到网络连接就解释清楚。代码级剖析又是另一种记录,能补充执行热点,要单独核对语言支持、采集方式和相关产品。

先修传播或采集问题,再判断是否换后端。把同一批不完整数据送进另一个平台,调查路径不会因此自动接续。

采样决定留下什么,也决定成本从哪里开始减少

头部采样在请求较早阶段做决定,成本较低,却无法预知请求后面会不会出错。尾部采样可以依据已收到的 Span 判断错误、耗时或属性,但需要承接数据、等待决策,并为状态与迟到 Span 留出资源。OpenTelemetry Collector 的 tail sampling processor 要求同一 Trace 的 Span 到达同一采样实例;随意分散到多个副本,会影响决定的依据。采样机制 · Collector 尾部采样

延伸阅读什么是 APM?从链路追踪到应用性能管理

假设请求稳定为每秒 100 次,每次恰好生成 20 个 Span,整条链路按一致的 10% 概率保留,暂不考虑重试、丢失和迟到:

采样前:100 × 20 × 86,400 = 172,800,000 Span / 天
采样后期望值:172,800,000 × 10% = 17,280,000 Span / 天

这是便于复算的稳态算例,不是生产流量或计费测试。Span 大小还取决于属性和事件,不能直接换算成 GB;容量也要另看峰值。若应用端先丢弃 90%,尾部采样器只能对收到的剩余部分做选择,无法保证保住所有失败请求。若全部先送到远端再筛,前面的发送与接收成本已经发生。

服务错误率的口径也要一起保留。由 SDK 或 Agent 在采样之前形成的请求指标,与从已采样 Span 生成的指标,可能覆盖不同总体。迁移后看到更少错误,先检查分母和采样位置。Datadog 的 OTel 兼容文档按接入路径说明 Trace Metrics 的来源,某种 Agent 路径下的完整流量保证不能套给所有 OTLP 接入。Datadog OTel 兼容范围

可以保留探针,调查功能仍要跟着接入路径看

OpenTelemetry 让应用与传输层更容易更换目的端,没有把各家后端的聚合、剖析、服务发现和权限模型变成同一种产品。选择时,先把需要接手的工作分清:

路线 可以沿用的基础 仍需安排的工作
商业托管 APM 受支持的 OTel 或厂商采集路径 功能档位、属性映射、留存与关联信号
观测云 SaaS DataKit 支持的 OTel、DDTrace、SkyWalking、Jaeger、Zipkin 路径 对应协议版本、采样、查询和业务关联配置
自托管 Jaeger、Tempo、SkyWalking 对应产品的采集、查询与分析能力 生产存储、容量、升级、恢复和持续值班
云厂商服务 既有资源身份及受支持的应用采集 外部依赖的传播、权限、网络和关联范围

观测云 DataKit 的 OTel 接入文档把差别落在具体端点上:gRPC 默认监听 127.0.0.1:4317,HTTP/Protobuf 链路路径默认是 :9529/otel/v1/traces。应用使用的协议、地址与 DataKit 实际监听配置要一致。Java Agent 2.x 默认使用 HTTP/Protobuf,不能照搬一个只配置 gRPC 的地址。已有 SkyWalking、Jaeger 或 Zipkin 采集,也应按对应协议与版本继续接入,而后迁移查询、告警和采样策略。

商业产品同样要按路径比较。Datadog 列出厂商 SDK、OTel SDK、Collector 和直接 OTLP 接入的功能差异;New Relic 提供原生 OTLP 接收端点;Dynatrace 的 Full-Stack 与独立遥测接入有不同范围和计量。不能把商业 APM 归为只能处理自家探针数据,也不能从接收成功推出全部深度功能相同。

自托管产品也不是同一套组件的换名。SkyWalking本身包含多种观测与分析能力;Jaeger 和 Tempo 的链路后端要使用各自支持的存储,并连接所需的其他信号。Thanos、Cortex 属于指标体系,不能作为通用 Trace 存储替代。软件已有的功能无需重新开发,生产部署和恢复责任则确实需要有人接手。

云厂商服务可以保留。阿里云 ARMS、AWS 与 Azure 要分别核对支持的运行时和产品范围。Azure Application Insights 有受支持的 OTel 接入,跨云链路是否接得上要看传播与采集。AWS 也建议将 X-Ray SDK 与 daemon 的插桩迁到 OpenTelemetry;这是采集组件的维护变化,不能误读成 X-Ray 服务整体停止。AWS 支持时间线

从 Trace 到日志和用户请求,要保留同一次操作

从慢请求跳到日志,比重新输入服务名方便得多。观测云链路详情按 trace_id 关联日志,并结合 service、env、version 等字段匹配日志索引;主机、容器和 Pod 视图还依赖相应资源标识与已采集数据。业务配置安排好以后,托管平台可以接手查询与相关视图,团队不用先交付另一套关联后端。链路详情与关联分析

延伸阅读日志、指标与链路如何组成统一可观测体系

假设日志保留 30 天而 Trace 只保留 7 天,第八天仍能在日志里读到 trace ID,但那段 Trace 可能已经不存在。这两个期限只是例子;实际配置要让经常一起调查的信号覆盖所需窗口。权限和索引选择不同,也会让一个有效链接落到空结果。

浏览器端还多一层传播。观测云 Web SDK 用 allowedTracingUrls 选择注入 Trace Header 的请求,用 traceType 选择传播格式;后端要继续该上下文,跨域 API 要允许相应请求头。RUM 会话采样与后端 Trace 采样分别影响记录是否存在。开启 allowTraceHeaderWithoutSession 可以在未采到常规会话时继续传头,却不会补出那次会话的 RUM 记录。Web SDK 链路配置

应用团队继续维护服务命名、传播和业务字段,平台方承接后端运行与已有分析功能。AI 可以协助阅读已有证据,缺失或过期的 Span 仍然缺失;建议是否成立,要能回到对应记录解释。

费用要按实际留下的数据与运行责任算

不同 APM 工具的计量单位,会把同一个应用拆成不同账单。Datadog 的主机型 APM 方案之外,还区分摄入 GB 与索引 Span、相关功能和超额;Dynatrace Full-Stack 当前公开单位是内存 GiB-hour,日志、RUM 与额外遥测等仍按相应能力核算。New Relic 有数据加用户方案,也有符合条件的 Full Consumption 选择,额外计算功能会影响费用。Datadog 价格 · Dynatrace 价格 · New Relic 价格

Grafana Cloud 的原始 Trace 服务与 Application Observability 也要分开:后者还有 host-hours 计量与相应数据条件,不能仅按 Tempo 数据量估价。Elastic 要先区分 Serverless、Hosted 与自托管;接收端和后台处理路径也会影响应用视图是否完整。Grafana 应用观测计费 · Elastic OTel 架构

观测云企业版写入流量按压缩后字节统计,数据处理按涉及的原始流量统计,还要加上实际存储、任务和选用算力。Span 数可以帮助理解采集规模,不能直接当作整张账单的唯一单位。商业版、企业版和私有化也应分别报价。企业版计费

把请求量、Span 分布、采样位置、保留期与所需日志/RUM 放进同一个范围,再分别计算服务费、客户侧采集资源与持续维护投入。一次性迁移和并行运行另列,已经发生的旧建设投入不应再当成未来支出。只改一个 exporter 目标通常是切换;需要同时送两端,就要采用采集链路实际支持的复制方式,处理额外负载与重复计费。

数据位置应按实际部署讨论。SaaS 站点、私有部署、远程访问与外发处理形成不同数据流;厂商来自哪个国家,不能替代对这些配置和合同的判断。

如果现有链路已经能支撑日常调查,先保留它,补齐传播与关联的缺口。 需要减少跨信号排障和后端维护工作的团队,再比较观测云等托管平台能接手哪些实际工作;已有成熟平台团队、需要控制底层资源,则可继续发展自托管。决定采购范围的,应是留下来的调查能力、能够停掉的旧组件和持续运行费用。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台