什么是应用性能监控 (APM)?

应用性能监控的全息图示:度量指标、追踪和日志从被监控的应用程序流入统一的APM仪表板,背景为深海军蓝色。

应用性能监控(APM)是一种收集、关联和分析运行中软件的遥测数据(度量指标、追踪、日志和事件)以检测性能退化、定位根本原因和验证服务级目标的实践。 一个 APM 工具 通过语言特定代理、SDK或开放标准如OpenTelemetry对应用程序进行检测,然后将数据发送到后台,通过仪表板、警报和追踪级诊断呈现数据。

APM、应用性能管理与应用组合管理不是同一回事

三个不同领域共用APM缩写。提前区分可以避免在阅读供应商文档时产生混淆。

应用性能监控是度量层:从运行中的应用程序收集遥测数据,并将其呈现为度量指标、追踪和日志。它回答此应用当前是否健康,如果不健康,问题出在哪里?

应用性能管理是更广泛的领域:定义SLO,制定性能预算,进行负载测试,代码检测,监控系统运维,以及基于数据信息进行操作。监控是管理的一个组成部分。

应用组合管理位于业务架构层面。它追踪组织运行的全部应用库存,并决定投资、现代化、合并或退役哪些应用。它使用监控数据作为输入,但本质上不是性能领域。

本文中未特别说明的“APM”一律指应用性能监控。

应用性能监控与可观测性

APM是可观测性的一个子集。APM关注应用层性能:响应时间、吞吐量、错误率、事务流程。可观测性是能够基于系统发出的遥测数据(包括基础设施、网络和业务事件数据)提出任意问题的更广泛实践。

实用层面:

  • APM工具告诉你/checkout端点的p95延迟在14:02部署后从180毫秒上升至1.4秒。
  • 可观测性堆栈让你将此与Kubernetes节点内存压力事件、Postgres锁等待峰值及同一时间窗口内的功能标志推送相关联。

现代APM平台(Datadog APM、New Relic、Dynatrace、Elastic Observability、Grafana Cloud、Splunk Observability Cloud)已经吸收了足够多可观测性的功能,界限变得模糊。最清晰的心智模型是:可观测性是目标,APM是为达成目标所需数据中专注于应用的部分。

应用性能监控的工作原理

APM分四个阶段运作:检测、收集、传输和关联。

1. 检测

检测在应用代码中添加度量点,使其能发出遥测数据。常见三种方法:

  • 自动检测代理。语言特定的运行时代理(Java字节码检测、.NET分析器、Python或Node.js的OpenTelemetry自动检测库)挂钩框架入口点(HTTP处理程序、数据库驱动、消息队列客户端)无需改变代码。
  • 通过SDK手动检测。开发者直接调用APM或OpenTelemetry SDK来启动和停止跨度,附加属性,发出自定义度量。需用于代理无法识别的业务特定事务。
  • eBPF和无代理采集。内核级探针捕获系统调用、网络和进程数据,无需修改应用。适合代理安装受限环境(合规负载、第三方服务)。

OpenTelemetry(OTel)是三种方法中的事实开放标准。它定义了线协议(OTLP)、跨度和度量命名的语义规范,以及Java、Go、Python、Node.js、.NET、Ruby、PHP等语言的SDK。Erlang和Elixir由官方opentelemetry-erlang库支持。Rust的追踪稳定;日志和度量正在进展。Swift有社区维护的SDK。

2. 收集

被检测应用发出三大信号类型:

  • 度量指标:某一时间点的数值测量(请求计数、延迟直方图、CPU使用率)。
  • 追踪:一组有序的跨度,表示单个请求跨服务的路径。
  • 日志:带时间戳的文本记录,理想为JSON结构,附带追踪和跨度ID以实现关联。

更新信号类型包括连续性能分析(生产环境中采样的CPU、内存和锁分析)和由用户浏览器或设备中JavaScript或移动SDK发出的真实用户监控(RUM)事件。OpenTelemetry Profiles信号于2024年被接受为OTEP,目前仍在成熟中;截至2025–2026年,后端支持为部分支持。

3. 传输

遥测通过两条路径从应用到后台:

  • 直接导出:从代理或SDK通过OTLP、HTTP或专有协议直接发送到APM供应商的摄取端点。
  • 通过采集器(OpenTelemetry采集器,或供应商定制版本如Datadog代理或Splunk分发的OT采集器)批量、过滤、采样和路由数据。面向日志的转发器如Fluent Bit和Vector可处理日志和度量,与处理追踪数据的OT采集器共同工作。采集器解耦检测和后台,使得无需重新检测代码即可切换供应商。

4. 关联

后台基于标识符(追踪ID、跨度ID、服务名、主机、容器ID、用户ID)关联信号,使得从任何信号开始的调查都可以转向其他信号。典型工作流:警报触发错误率上升→点击进入受影响服务的追踪→深入典型失败追踪→从慢跨度跳转到其日志→确认问题数据库查询→查看数据库主机度量。这条转接路径正是APM平台区别于单一工具集合的关键所在。

APM栈的核心组件

完整的APM部署包括:

组件 目的
代理 / SDK / OTel库 检测应用程序并发出遥测数据
采集器 批量、过滤、采样和路由遥测数据
度量后端 时间序列存储、告警、仪表板
追踪后端 跨度存储、依赖映射、延迟分析
日志后端 索引日志存储并关联追踪
RUM和合成监控 从用户视角测量性能
告警和事件响应集成 将信号路由至值班人员(PagerDuty、Opsgenie、Slack)
性能分析器 生产环境中的持续CPU和内存分析

如何用Dotcom-Monitor覆盖合成监控。Dotcom-Monitor有4个合成监控产品共享一套警报和报告流程。使用 BrowserView 进行单页加载时间测试,支持40+浏览器和设备组合。使用 UserView 测试多步骤事务流程(登录、搜索、结账)。使用 WebView 监控REST、SOAP和GraphQL API。使用 ServerView 监测TCP、DNS、SMTP、FTP、ICMP及其他网络协议。对于防火墙后的内网应用,在网络内服务器上安装Private Agent。它是单一二进制程序,发起出站连接到平台,无需配置入站防火墙规则,保持内部端点私密。

关键APM度量指标

这是大多数团队检测和告警的度量指标。定义在适用情况下对齐了OpenTelemetry语义规范。

度量指标 定义
响应时间 / 延迟 从请求收到到响应发送的壁钟时间。分别跟踪p50、p95、p99和p99.9,均值会掩盖尾部延迟。
吞吐量 单位时间处理的请求数,通常是每秒请求数(RPS)或每分钟请求数(RPM)。
错误率 返回5xx、抛异常或违反业务约定请求的比例。以百分比表示。
Apdex分数 基于可配置延迟阈值T,介于0到1之间的用户满意度指数。Apdex=(满意+容忍/2)/总数。目前大多数SRE团队认为其为遗留指标,更倾向于明确的SLI/SLO延迟目标(例如28天窗口内p99<500毫秒);AppDynamics、New Relic等仍提供此指标。
饱和度 资源利用率(CPU、内存、连接池、队列深度)。Google的四大黄金信号之一。
CPU与内存利用率 单个进程与容器资源消耗。
垃圾回收度量 JVM、.NET、Go、Node.js工作负载的GC暂停时长、频率和堆大小。
数据库查询度量 查询延迟、检查的行数、锁等待时间、慢查询计数。
队列深度与消费者滞后 Kafka、RabbitMQ、SQS等系统。滞后是级联性能下降的先行指标。
冷启动时长 特指无服务器架构(AWS Lambda、Azure Functions、Google Cloud Run)。
MTTD、MTTR、MTBF 平均检测时间、平均恢复时间、平均故障间隔。与应用度量共同跟踪的运维健康指标。
SLI / SLO / 错误预算 服务级指标、设置的目标及错误预算消耗情况。

如何无需代码检测即可捕获这些度量。上述多项指标可通过应用外部检测,无需代理或SDK。Dotcom-Monitor的合成检测返回响应时间的p50、p95、p99分布,按HTTP状态码的错误率,首次字节时间(TTFB),DNS解析时间,TLS握手时长,以及完整的请求瀑布流时序。企业计划的数据显示可保留长达三年,足以计算年度SLI基线,无需导出至单独的时间序列数据库。

谷歌SRE书中定义四大黄金信号为延迟、流量、错误和饱和度。RED方法(速率、错误、持续时间)和USE方法(利用率、饱和度、错误)是广泛采用的框架,将这些信号归为易于管理的仪表板。

APM的优势

技术优势(工程)

  • 更快的根因分析。分布式追踪通过暴露确切的高延迟或错误跨度,将多服务调查从数小时缩短至几分钟。
  • 生产安全调试。持续性能分析器和结构化日志使得无需附加调试器即可诊断生产问题成为可能。
  • 回归检测。基于每次部署的基线标记性能回退,防止问题传播。
  • 容量输入。饱和度和吞吐量指标驱动自动扩缩容阈值和合适资源配置决策。

运维优势(DevOps、SRE、NOC)

  • SLO执行。APM数据支撑误差预算计算和控制风险部署。
  • 减少警报疲劳。基于症状的黄金信号告警取代单主机阈值告警的噪声。
  • 跨团队共用参考。共享追踪视图结束“是网络还是应用?”的循环讨论。
  • 事件时间线记录。追踪与日志保留提供事件复盘证据,无需重新执行事件。

业务优势

  • 减少停机和延迟带来的收入损失。转化率、购物车完成率和会话时长受p95延迟影响。
  • 降低云成本。合理资源配置和识别低效查询减少浪费。
  • 审计和合规证据。SLA报告和事件时间线支持合同及监管需求。

谁使用APM及他们关注什么

角色 APM主要用途
DevOps工程师 验证部署,监控CI/CD流水线发布,根据性能标准控制推广。
站点可靠性工程师(SRE) 定义与执行SLO,管理错误预算,处理事件响应,基于追踪模式建立运行手册。
软件开发者 调试服务延迟和错误,分析关键代码路径,验证测试和生产环境修复情况。
QA工程师 比较发布候选版本的性能基线,借由APM数据驱动负载和合成测试,发布前捕获性能回退。
网络管理员 区分网络层与应用层问题,监控服务间流量,验证防火墙和负载均衡行为。
安全工程师 检测可能的滥用异常(凭证填充流量、认证端点异常错误模式)。
工程领导与产品 跟踪可靠性KPI、面向客户的延迟及性能改善对业务指标的影响。

APM与安全:检测而非防护

APM不是安全工具,但其遥测数据是有价值的安全信号。APM可揭露的模式:

  • 特定端点流量骤增(凭证填充、爬虫)。
  • 认证或支付端点的异常错误模式。
  • 被攻破服务向异常目标的外呼请求。
  • 部署后追踪数据中新出现的依赖。

现代APM通过转发带注释的日志和追踪,集成于SIEM和SOAR平台(Splunk Enterprise Security、Microsoft Sentinel、Elastic Security、Datadog Cloud SIEM)。部分平台已包含基于APM代理的交互式应用安全测试(IAST)和运行时应用自我保护(RASP)插件(Contrast Security、Datadog应用及API保护——前身为Datadog ASM,以及New Relic在漏洞管理中的IAST功能)。

APM是检测层。它补充但不替代WAF、漏洞扫描器或EDR。

云原生与微服务工作负载的APM

云原生架构令APM的四个方面发生变化:

数据量。单体应用发出一组度量;五十个微服务发布发出五十组,再乘以副本数及每个请求中每个跨度。适应性采样(基于头部、尾部或概率)不可或缺。OpenTelemetry采集器的尾采样处理器是标准方案。

短暂性。容器和无服务器函数生命周期仅秒至分钟。传统基于主机的监控一旦Pod重启即丢失上下文。服务级标识(服务名、命名空间、部署)取代主机身份,成为主要聚合键。

服务间复杂性。确定延迟飙升的根因需遍历人脑难以记忆的依赖图。来自追踪数据的服务地图(Jaeger的依赖视图、Grafana Tempo服务图、Datadog的服务地图)是实际解决方案。

异构运行时。单个请求可跨越Node.js BFF、Go服务、Java遗留后端及无服务器函数。OpenTelemetry跨语言追踪上下文传播(W3C追踪上下文头)使得该路径上的单一追踪成为可能。

如何从数据中心外验证各区域。分布式系统常逐区域失败。CDN节点误路由、DNS传播延迟或区域证书续期失败可能导致数据中心内部应用健康,但外部地区(如圣保罗或新加坡)无法访问。为检测此类问题,可在关注的每个区域针对不同目标列表运行相同合成检测。在Dotcom-Monitor中,监控位置可在监控配置中按目标列表分配,仪表板自动隔离区域延迟和可用性差异。该配置能提前发现AWS区域性故障、Cloudflare事故和BGP路由波动。

Kubernetes特定关注点应另行探讨:Pod重启次数作为前兆指标,集群级信号的kube-state-metrics,水平Pod自动扩缩的响应性,节点级压力量度均应纳入云原生APM仪表板。

AI与大型语言模型(LLM)工作负载的APM

基于LLM的功能存在经典APM度量无法覆盖的新失败模式:

  • 首次生成Token时间(TTFT)Token间延迟对流式响应比总请求时长更重要。
  • 每请求Token成本既是业务指标又是容量指标。
  • 提示词与完成内容(采样、脱敏)是诊断幻觉、提示注入攻击和输出质量下降的关键。
  • 模型漂移(输出分布随时间的可测变化)需要结合延迟进行输出评估。
  • 工具调用和检索追踪:智能工作流中向量存储查询、函数调用和下游API请求的跨度。

OpenTelemetry在2024年引入的GenAI语义规范(截至2026年仍处于开发状态)定义了LLM调用的标准跨度属性(gen_ai.provider.name、gen_ai.request.model、gen_ai.usage.input_tokens、gen_ai.usage.output_tokens)。LLM专用可观测性工具(Langfuse、Arize Phoenix、Helicone、LangSmith)与已添加GenAI支持的通用APM(Datadog LLM Observability、New Relic AI Monitoring、Dynatrace AI Observability)共存。

如何用Dotcom-Monitor监控LLM端点。创建指向LLM端点的WebView监控,例如POST /v1/chat/completions。在请求体中放入固定测试提示,头部设定API密钥或Bearer令牌。设置三个JSONPath断言:choices[0].message.content非空,usage.total_tokens在合理范围内(捕捉无限制Token漏洞),响应时间低于TTFT预算。配置可捕获配额用尽、模型弃用响应如“模型未找到”、供应商侧故障与区域限流。内部LLM可观测性工具如Langfuse、Helicone和LangSmith仅观察应用层输入,无法发现这些失败。

应用性能监控最佳实践

  • 默认使用OpenTelemetry检测。避免锁定。如果供应商特定代理有OTel没有的功能,应在OTel基础上叠加,而非替换。
  • 仪表板前先定义SLO。以用户可见形式决定“健康”含义,再构建对应仪表板和告警。
  • 基于症状告警,基于SLO燃烧触发呼叫。主机阈值告警产生噪声。SLO错误预算不合理燃烧时的告警尊重值班人员理智。
  • 合成监控与真实用户监控结合使用。合成检测从受控位置定期捕获宕机;RUM测量真正用户体验,包括最后一公里网络及设备差异。两者互补,不可替代。
  • 标准化跨度和度量命名。采用OpenTelemetry语义规范,避免团队各自为政。
  • 端到端关联追踪ID。在日志、队列消息和数据库查询(如通过sqlcommenter的SQL注释)注入追踪上下文。日志中包含追踪ID是最高杠杆的可观测性投资。
  • 智能采样。针对高流量服务采用1–10%的头采样;尾采样保存错误和慢追踪。100%保留错误追踪。
  • 将采集器视为生产基础设施。以冗余、监控和容量余量运行OpenTelemetry采集器。
  • 季度评审和调优。度量基数、日志量和追踪保留不断增加,不主动修剪会浪费资源。安排时间清理不再值得存储的数据。
  • 进行故障演练。定期注入故障(Chaos Mesh、Gremlin、AWS故障注入服务),验证APM栈是否捕获故障。未经测试的可观测性不可验证。

APM词汇表

代理。与应用程序同时安装的软件,自动检测运行时调用并发送遥测。

Apdex。应用性能指数。基于延迟阈值得出的0到1之间满意度分数。

基数。度量唯一标签或属性组合的数量。高基数存储和查询成本较高。

分布式追踪。通过传播追踪ID,跟踪单个请求跨多个服务的路径。

错误预算。SLO允许的不可用时间窗口。故障事件消耗预算。

示例。附加到度量数据点的特定追踪ID,用于从度量异常跳转到代表性追踪。

黄金信号。延迟、流量、错误、饱和度。每个服务都应监控的四大指标。

检测。产生运行中应用遥测的数据代码或配置。

OpenTelemetry(OTel)。CNCF的可观测性框架。定义API、SDK、OTLP协议和语义规范。

OTLP。OpenTelemetry协议。传输追踪、度量和日志的线格式。

RED方法。速率、错误、持续时间。服务级度量框架。

真实用户监控(RUM)。从用户浏览器或设备捕获的性能数据。

SLI / SLO / SLA。服务级指标(测量)、服务级目标(内部目标)、服务级协议(合同承诺)。

跨度。追踪中的单个操作,带开始时间、持续时间和属性。

合成监控。脚本化、周期性检查,模拟受控位置的用户行为。

尾采样。根据错误状态或持续时间等属性,在追踪完成后采样。

遥测。系统自发的数据。在APM中指度量、追踪、日志、性能分析和事件。

追踪上下文。跨服务边界传播的元数据,将跨度串联为单一追踪。标准为W3C追踪上下文。

USE方法。利用率、饱和度、错误。资源级度量框架。

下一步方向

要从外部视角监控面向用户的性能和正常运行时间,可从多个地理位置对生产端点运行合成和真实浏览器检测。Dotcom-Monitor提供这一层面:脚本浏览器事务、API监控 和全球监控网络的SLA报告,设计用以补充内网APM栈,而非替代。对于内部APM,从一个关键服务应用OpenTelemetry检测,向后台(Jaeger、Tempo或商业平台)发送追踪,定义单一SLO,逐步扩展。

Frequently Asked Questions

APM 与基础设施监控有何不同?
基础设施监控衡量主机、容器和网络设备(CPU、内存、磁盘、丢包率)。APM 衡量运行在该基础设施上的应用程序(请求延迟、错误率、追踪)。现代平台结合了两者,但它们回答的问题不同。基础设施监控问的是“主机是否健康?” APM 问的是“从用户的角度看应用程序是否健康?”
APM是否适用于无服务器函数?
是的,但有一些限制。AWS Lambda、Azure Functions 和 Google Cloud Run 都支持 APM 代理和 OpenTelemetry 仪表。限制因素包括代理带来的冷启动开销(通过 Lambda 扩展或作为 Layer 的函数仪表减轻)以及短暂的执行窗口,这使得批量导出作用较小。请寻找明确支持无服务器的工具(Datadog 无服务器监控、New Relic AWS Lambda 集成、OpenTelemetry Lambda Layer)。
APM 设置需要多长时间?
单个服务自动检测:不到一小时即可生成首个跟踪。具有SLO、仪表盘和警报的多服务生产部署:对于一个小团队,通常需要两到六周。大部分时间不是技术性检测,而是达成SLO共识并调整警报以确保其有效。
APM 多少钱?
定价模型各不相同。像Datadog这样的按主机计费平台,基础设施和APM分别定价,大约每主机每月15至40美元的列表价。像New Relic这样的基于使用量的平台,根据摄取的数据量(每GB)和用户席位收费。按摄取GB数计费的日志服务(Datadog Logs、Elastic、Splunk)根据数据量规模增长。OpenTelemetry加上自托管堆栈(Prometheus、Tempo、Loki、Grafana)没有许可费用,但有实际的运营成本。对于中型Kubernetes部署,商业平台的费用预计每月从几百美元到低五位数不等,具体取决于数据量和保留时间。
APM 能替代日志记录吗?
日志仍然是处理高基数、低频率上下文(特定用户的会话、特定业务事件)的正确工具。APM 跟踪和指标则是处理高频率、低基数性能数据的正确工具。二者相辅相成,现代平台将它们统一在单一查询层之下。
APM 支持移动应用程序吗?
是的。移动RUM SDK(Firebase性能监控、Datadog移动RUM、New Relic移动、Embrace、Sentry性能)收集应用启动时间、屏幕切换、崩溃、网络请求以及ANR(Android)或卡顿(iOS)。它们与后端服务共享跟踪上下文,因此可以追踪到导致屏幕变慢的后端调用。
APM 支持哪些语言?
主要的商业平台涵盖 Java、.NET、Python、Node.js、Go、Ruby 和 PHP。OpenTelemetry 的语言覆盖最广,Rust 跟踪稳定,Swift 可用作社区 SDK。Erlang 和 Elixir 由官方的 opentelemetry-erlang 库支持,包括对 Phoenix、Ecto 和 Cowboy 的自动检测。较不成熟的目标(Crystal、Zig、嵌入式运行时)通常需要手动 OTel SDK 仪表化。
Matthew Schmitz
About the Author
Matthew Schmitz
Dotcom-Monitor 负载与性能测试总监

作为 Dotcom-Monitor 的负载与性能测试总监,Matt 目前领导着一支由优秀工程师和开发人员组成的团队,共同为最严苛的企业需求打造先进的负载与性能测试解决方案。

Latest Web Performance Articles​

什么是应用性能监控 (APM)?

什么是应用性能监控(APM),以及仪器化、收集和关联如何工作,哪些指标重要,以及使APM在生产中有用的最佳实践

立即免费启动Dotcom-Monitor

无需信用卡