阿里云应用实时监控服务ARMS完全接入指南:从探针部署到全链路可观测
1. ARMS产品概述与核心能力
应用实时监控服务ARMS是阿里云推出的一站式全栈可观测平台,覆盖浏览器、小程序、APP、分布式应用、容器等不同可观测环境与场景。ARMS包含用户体验监控、应用监控、可观测链路OpenTelemetry版等模块,满足不同语言、架构、部署环境的应用性能观测需求。其核心价值在于通过模块化、即插即用的设计,帮助企业快速构建全栈可观测平台。
ARMS的产品矩阵主要包括以下四个核心模块:应用监控面向服务端应用,支持Java、Go、Python等主流语言,通过探针无侵入方式采集接口调用、JVM性能、数据库访问等数据;前端监控聚焦Web、H5、小程序等终端,监控页面加载速度、JS错误、API成功率等用户体验指标;可观测链路OpenTelemetry版提供分布式链路追踪能力,兼容OpenTelemetry、SkyWalking、Zipkin等主流链路框架;Prometheus监控则面向基础设施与云原生场景,提供容器、主机、中间件等监控能力。
需要先登录阿里云控制台,点击:阿里云控制台
2. 开通ARMS服务与接入中心概述
使用ARMS前需要先开通服务。新版计费模式下,计费项分为按写入的可观测数据量收费和按可观测功能收费两种模式。ARMS管理计费周期为1天,次日00:00开始计算前一天的资源消耗量,账单一般在扣费当天08:00前出账。新版计费取消了新账号的15天免费试用,但每月提供一定的免费额度。
ARMS支持通过接入中心和各子产品实例列表页面接入应用或组件。接入中心作为统一入口,目前已提供100+组件的接入能力,涵盖Java应用监控、链路追踪、前端监控、容器监控、MySQL、Kafka、阿里云服务监控等。接入中心的每一个选项即一个组件,每个组件负责以特定方式监控一类基础设施或服务,实现指标采集、数据可视化和告警规则等监控功能。在实际接入时,可以任意选择其中一种方式进行接入。
3. 应用监控接入实战
3.1 Java应用探针接入
对于Java应用,ARMS推荐使用自研探针接入,以获得更多功能支持和更好的探针稳定性保障。ARMS 2024年发布的JavaAgent 4.0全面拥抱OpenTelemetry生态,探针底座基于OpenTelemetry框架进行了全新升级,并额外提供多种资源监控、性能诊断、应用安全等数据。探针支持更加灵活的调用链采样策略、白屏化探针管理、全方位自监控、动态功能降级等高阶特性。
Java应用接入的基本流程如下:首先在ARMS控制台的应用列表页面点击添加应用,选择Java语言,系统会生成对应的接入配置信息。然后根据应用部署方式选择对应的接入方案:对于ECS部署的应用,下载ARMS探针包并在Java启动命令中添加-javaagent参数;对于容器环境,在Dockerfile中集成探针或通过ACK的组件管理一键安装。
以下是一个典型的Spring Boot应用通过-javaagent方式接入的启动命令示例:
java -javaagent:/path/to/arms-agent/arms-bootstrap-1.0.0-SNAPSHOT.jar -Darms.licenseKey=your_license_key -Darms.appName=your-app-name -jar your-app.jar其中arms.licenseKey是ARMS控制台生成的应用标识,arms.appName是自定义的应用名称。探针启动后会自动采集HTTP接口调用、Dubbo调用、数据库访问、JVM内存与GC等数据。接入成功后,可以在ARMS控制台的應用概覽页面查看应
用的请求数、错误数、耗时、实例数等信息。应用概览页面会根据应用接入的信息自动适配展示大盘,并针对ECS环境和容器环境对CPU信息做区别展示。
3.2 Go与Python应用接入
除了Java,ARMS应用监控也支持Go和Python语言的自动埋点接入。Go应用通过引入ARMS Go探针包,在main函数前添加探针初始化代码即可完成接入。Python应用通过安装ARMS Python探针包,在应用入口处添加探针配置即可。对于Node.js、.NET、PHP等其他语言,可以通过可观测链路OpenTelemetry版使用开源客户端进行接入。
4. 前端监控接入实战
4.1 Web与H5应用接入
ARMS前端监控专注于Web端体验数据监控,从页面打开速度(测速)、页面稳定性(JS Error)和外部服务调用成功率(API)三个方面监测Web页面的健康度。接入流程轻便灵活,通过在前端应用项目中引入依赖包并简单配置初始化代码,无需额外埋点动作即可采集端侧应用性能数据。
ARMS前端监控支持三种接入方式:CDN异步加载、CDN同步加载和npm包方式。异步加载对页面性能影响最小,但无法捕捉到监控SDK加载初始化完成之前的JS错误和资源加载错误。同步加载可以捕捉从页面打开到关闭的整个过程中的JS错误和资源加载错误。npm包方式可以减少页面中Script的加载个数,并可以自行控制页面Script的CDN业务方向。
以下是通过CDN异步加载方式接入前端监控的HTML代码示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>ARMS前端监控示例</title>
</head>
<body>
<script>
!(function(c,b,d,a){
c[a]||(c[a]={});
c[a].config={
pid:'your_pid_here',
appType:'web',
imgUrl:'https://arms-retcode.aliyuncs.com/r.png?',
sendResource:true,
enableLinkTrace:true,
behavior:true,
useFmp:true,
enableSPA:true
};
with(b)with(body)with(insertBefore(createElement('script'),firstChild))
setAttribute('crossorigin','',(src=d));
})(window,document,'https://sdk.rum.aliyuncs.com/v1/bl.js','__bl');
</script>
<div id="app"></div>
</body>
</html>其中pid是在ARMS控制台创建应用后生成的应用标识。配置参数中sendResource表示上报页面加载的静态资源,enableLinkTrace表示API请求与后端应用监控进行端到端关联,behavior表示开启用户行为回溯,useFmp表示采集首屏FMP数据,enableSPA表示开启SPA单页面应用支持。
通过npm包方式接入的代码示例:
npm install alife-logger --save
const BrowserLogger = require('alife-logger');
const __bl = BrowserLogger.singleton({
pid: "your_pid_here",
appType: "web",
imgUrl: "https://arms-retcode.aliyuncs.com/r.png?",
sendResource: true,
behavior: true,
enableLinkTrace: true,
enableConsole: true
});4.2 小程序与移动端监控
ARMS用户体验监控同样支持小程序和移动端应用。小程序端通过引入对应的SDK,在应用启动时完成初始化,即可采集小程序页面的性能数据和用户行为数据。移动端应用(iOS/Android)则通过集成ARMS移动端SDK,实现崩溃分析、性能监控和用户行为追踪。
5. 链路追踪接入实战
链路追踪的核心价值在于连接,用户终端、网关、后端应用、依赖组件等共同构成了链路追踪的轨迹拓扑大图。ARMS(含可观测链路OpenTelemetry版)目前已经支持用户终端到云网关到后端应用到云组件的端到端全链路打通。
对于Java/Go/Python等主流语言,推荐接入ARMS自研探针,自研探针与可观测链路OpenTelemetry版数据完全互通。对于其他语言,可观测链路OpenTelemetry版全面兼容OpenTelemetry、SkyWalking、Zipkin和Jaeger四种主流链路框架。
在云产品链路接入方面,可观测链路OpenTelemetry版与阿里云近10款云产品深度合作,用户只需在相应的云产品控制台一键启用链路追踪开关即可。具体操作位置包括:在ALB监听详情页的链路追踪区域开启开关,在MSE创建实例页面的链路追踪选项中选择使用可观测链路OpenTelemetry版,在用户体验监控创建应用的参数配置中勾选链路追踪配置。
以下是通过OpenTelemetry Java SDK手动接入链路追踪的代码示例:
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-api</artifactId>
<version>1.31.0</version>
</dependency>
<dependency>
<groupId>io.opentelemetry</groupId>
<artifactId>opentelemetry-exporter-otlp</artifactId>
<version>1.31.0</version>
</dependency>
// 初始化OpenTelemetry并配置OTLP导出器
OpenTelemetry openTelemetry = OpenTelemetrySdk.builder()
.setTracerProvider(
SdkTracerProvider.builder()
.addSpanProcessor(
BatchSpanProcessor.builder(
OtlpGrpcSpanExporter.builder()
.setEndpoint("https://arms-apm.aliyuncs.com/otlp/v1/traces")
.addHeader("Authentication", "your_license_key")
.build()
).build()
)
.build()
)
.buildAndRegisterGlobal();6. Prometheus监控接入实战
6.1 ACK集群Prometheus监控
在开通ARMS之后,可以在ARMS中为ACK集群一键安装Prometheus监控插件,此后即可通过ARMS预定义的仪表板监控Kubernetes集群的众多性能指标。接入流程为:在ARMS控制台的接入中心选择容器服务环境,选择目标ACK集群,点击确定即可完成接入。
6.2 ECS主机监控
使用Prometheus监控ECS主机,接入后会自动安装Node-exporter和Process-exporter,托管Prometheus Agent自动采集数据,单次采集指标量约为1000条/台。接入步骤为:在ARMS控制台的接入中心>基础设施页面,单击主机监控,选择目标ECS所属的VPC,配置相关信息后点击确定,等待1-2分钟即可完成接入。
ECS接入主机监控后,如果监控大盘没有数据,需要检查安全组配置是否正确。接入后还可以根据需求配置主机监控组件参数、废弃不需要采集的指标以节省费用、配置告警规则等。
6.3 数据库与中间件监控
ARMS接入中心支持MySQL、Redis、Kafka等多种数据库和中间件的监控接入。以MySQL为例,接入时需要配置MySQL服务地址、服务端口、MySQL账号和密码。需要注意的是,不建议使用管理员账号,应创建一个供mysqld_exporter使用的专用账号并最小化授权。
7. 告警规则配置与管理
7.1 告警规则创建
ARMS应用监控告警支持对采集到的各种应用指标配置告警规则,用户可以根据需求和业务场景配置合理的告警规则,在应用不符合预期时及时收到通知。ARMS支持四种告警级别,从低到高为P4、P3、P2、P1。
创建告警规则的典型场景:以核心业务接口的响应时间和成功率为例,可以配置当最近3分钟平均响应时间大于等于500ms时触发告警,或当请求成功率小于等于90%时触发告警。告警规则创建后,系统会以指定的通知方式(短信、邮件、钉钉群等)向告警联系人发送告警信息。
7.2 分层告警策略
有效的告警策略遵循从业务到应用再到基础设施的分层设计。业务层关注核心接口的调用量、错误率和响应时间,用于检测面向用户的影响。应用层关注异常、HTTP 5xx状态码、JVM健康、线程池状态等,用于定位故障组件。基础设施层关注CPU利用率、内存使用率、磁盘利用率,用于揭示应用问题背后的资源约束。
对于核心告警条件,建议为CPU利用率、内存利用率和磁盘利用率分别设置上限阈值。ARMS应用监控提供了预设的告警指标,涵盖业务、应用和基础设施三个层面。由于ARMS应用监控数据默认集成了Prometheus,用户还可以通过PromQL语句编写超越预设的自定义告警规则。
7.3 统一告警管理
ARMS告警管理提供了开箱即用的ITSM系统,支持配置Grafana原生告警规则并将告警事件转发到ARMS。用户可以通过ARMS告警管理统一集成ARMS、云监控、SLS等多个告警源,创建事件处理流实现对告警事件的压缩、降噪、去重等。
8. 可观测大屏自定义
基于ARMS提供的能力,用户可以自定义可观测大盘并配置更加灵活的告警规则。通过ARMS前端监控实时大屏,可以一次性查看被监控应用的所有关键实时监控数据。对于PAI EAS等服务,开启高级监控指标开关后,可以获取包含大模型推理架构指标、GPU算力指标、服务维度统计指标以及自定义指标等在内的全面监控数据。
9. 成本优化与最佳实践
在使用ARMS过程中,合理的成本控制策略同样重要。新版计费模式下,费用主要取决于写入的可观测数据量。以下是一些成本优化建议:通过SDK配置中的采样上报来减小上报量并降低负载;废弃不需要采集的Prometheus指标,使指标数据更清晰的同时节省费用;合理设置告警阈值避免大量误告警产生的通知成本。
在最佳实践方面,ARMS 2024年发布的JavaAgent 4.0建议升级使用,以获得更好的性能和更丰富的功能。对于容器环境,建议接入Managed Service for Prometheus以获得更完善的容器监控数据。前端监控建议开启与应用监控的关联,实现前后端链路追踪的端到端诊断。
10. 常见问题解答
问:ARMS应用监控接入后,如何验证是否接入成功?
答:接入后登录ARMS控制台,在应用列表页面点击目标应用名称,进入应用总览页面。如果页面正常展示总请求量、平均响应时间、错误数等汇总指标,以及应用提供服务和应用依赖服务的请求量与响应时间趋势图,则表示应用已成功接入应用监控。
问:Java应用接入ARMS探针需要重启应用吗?
答:是的,Java应用通过-javaagent方式接入探针需要重启应用。探针在JVM启动时加载,因此必须重启应用才能使探针生效。对于容器环境,可以通过重新部署应用或滚动更新来使探针生效。
问:前端监控的异步加载和同步加载方式有什么区别?
答:异步加载是非阻塞加载,浏览器在下载执行JS后还会继续处理后续页面,对页面性能影响小,但无法捕捉到监控SDK加载初始化完成之前的JS错误和资源加载错误。同步加载是阻塞加载,当前JS加载完毕后才会进行后续处理,可以捕捉从页面打开到关闭的整个过程中的JS错误和资源加载错误。
问:ARMS新版计费和旧版计费的主要区别是什么?
答:新版计费的计费项变更为按写入的可观测数据量计费。ARMS应用监控、可观测链路OpenTelemetry版和Prometheus版的计费项目统一变更为按数据量计费。新版计费取消了新账号的15天免费试用,但每月提供一定的免费额度。ARMS基础版已不支持开通。
问:ARMS支持哪些编程语言的应用监控?
答:ARMS应用监控对Java、Go、Python提供自研探针的自动埋点支持。对于Node.js、.NET、PHP、Erlang、C++等语言,可以通过可观测链路OpenTelemetry版使用开源客户端进行接入。ARMS与可观测链路OpenTelemetry版数据完全互通,在多语言场景建议结合使用。
问:如何在ARMS中配置告警通知?
答:在ARMS控制台的告警管理模块中创建通知策略,配置告警事件的匹配规则和通知方式。支持的通知方式包括短信、邮件、钉钉群等。创建告警规则时选择对应的通知策略即可。告警触发后,系统会按照通知策略配置的方式向通知对象发送告警信息。



