阿里云应用实时监控服务ARMS完全对接使用指南:从零构建全栈可观测体系

apphuang2026年06月24日 11:27:205

1. ARMS产品概述与核心能力

应用实时监控服务ARMS是阿里云推出的一站式全栈可观测平台,覆盖浏览器、小程序、APP、分布式应用、容器等不同可观测环境与场景。ARMS的产品矩阵主要包括应用监控、前端监控、可观测链路OpenTelemetry版、Prometheus监控四大核心模块。

应用监控面向服务端应用,支持Java、Go、Python等主流语言,通过探针无侵入方式采集接口调用、JVM性能、数据库访问等数据。前端监控聚焦Web、H5、小程序等终端,监控页面加载速度、JS错误、API成功率等用户体验指标。可观测链路OpenTelemetry版提供分布式链路追踪能力,兼容OpenTelemetry、SkyWalking、Zipkin等主流链路框架。Prometheus监控则面向基础设施与云原生场景,提供容器、主机、中间件等监控能力。

需要先登录阿里云控制台,点击:阿里云控制台

2. 开通ARMS服务与接入中心概述

使用ARMS前需要先开通服务。新版计费模式下,计费项分为按写入的可观测数据量收费和按可观测功能收费两种模式。ARMS管理计费周期为1天,次日00:00开始计算前一天的资源消耗量,账单一般在扣费当天08:00前出账。新版计费每月提供一定的免费额度,具体为应用监控指标50GB、链路30天、剖析7天的免费存储权益。

ARMS支持通过接入中心和各子产品实例列表页面接入应用或组件。接入中心作为应用实时监控服务的统一接入入口,目前已提供100+组件的接入能力,涵盖Java应用监控、链路追踪、前端监控、容器监控、MySQL、Kafka、阿里云服务监控等。接入中心页面按基础设施、服务端应用、前端应用、数据库、中间件、人工智能六大类展示可接入的监控服务卡片,页面顶部提供搜索框以快速查找目标服务。

在实际接入时,可以任意选择接入中心或实例列表页面其中一种方式进行接入。接入中心的每一个选项即一个组件,每个组件负责以特定方式监控一类基础设施或服务,实现指标采集、数据可视化和告警规则等监控功能。

3. 应用监控接入实战

3.1 Java应用探针接入

对于Java应用,ARMS推荐使用自研探针接入,以获得更多功能支持和更好的探针稳定性保障。ARMS JavaAgent全面拥抱OpenTelemetry生态,探针底座基于OpenTelemetry框架进行了全新升级,并额外提供多种资源监控、性能诊断、应用安全等数据。探针支持更加灵活的调用链采样策略、白屏化探针管理、全方位自监控、动态功能降级等高阶特性。

Java应用接入的基本流程如下:首先在ARMS控制台的应用列表页面点击添加应用,选择Java语言,系统会生成对应的接入配置信息。然后根据应用部署方式选择对应的接入方案:对于ECS部署的应用,下载ARMS探针包并在Java启动命令中添加-javaagent参数。

以下是一个典型的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 -Daliyun.javaagent.profileId=cn-hangzhou -jar your-app.jar

对于容器环境,需要在Dockerfile中集成探针。ARMS探针运行需要以下三个环境变量:ARMS_APP_NAME(ARMS控制台中显示的应用名称)、ARMS_LICENSE_KEY(应用接入凭证)、ARMS_REGION_ID(可观测数据上报的地域)。

以下是一个完整的多阶段构建Dockerfile示例:

# 多阶段构建Dockerfile
FROM maven:3.9-eclipse-temurin-17 AS builder
WORKDIR /build
COPY pom.xml .
RUN mvn dependency:go-offline -B
COPY src ./src
RUN mvn clean package -DskipTests -B

FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY AliyunJavaAgent.zip /tmp/AliyunJavaAgent.zip
RUN apk add --no-cache unzip && \
    unzip /tmp/AliyunJavaAgent.zip -d /opt/ && \
    rm -f /tmp/AliyunJavaAgent.zip
ENV JAVA_TOOL_OPTIONS=\"-javaagent:/opt/AliyunJavaAgent/aliyun-java-agent.jar\"
ENTRYPOINT [\"sh\", \"-c\", \"java -Darms.licenseKey=${ARMS_LICENSE_KEY} -Darms.appName=${ARMS_APP_NAME} -Daliyun.javaagent.profileId=${ARMS_REGION_ID} -jar app.jar\"]

若ARMS_LICENSE_KEY为空,探针将静默失效,不影响应用正常运行。JVM最大堆内存需大于256MB,JDK版本支持1.8、11、17和21。

对于ACK容器服务环境,可以通过组件管理一键安装ARMS应用监控接入组件ack-onepilot。在ACK集群中,需要检查Pod的YAML配置中是否存在one-pilot-initcontainer这个init容器。同时需要为应用添加必要的标签:

labels:
  armsPilotAutoEnable: \"on\"
  armsPilotCreateAppName: \"your-app-name\"

或者在annotation中配置:

annotations:
  armsPilotAutoEnable: \"on\"
  armsPilotCreateAppName: \"your-app-name\"

3.2 Python应用接入

ARMS支持Python 3.10和Python 3.12自定义运行时环境,已预集成ARMS Python探针能力。只需通过配置环境变量和启动命令即可接入。配置步骤同样需要设置三个环境变量:

ARMS_APP_NAME={您的应用名称}
ARMS_REGION_ID={地域ID,如cn-hangzhou}
ARMS_LICENSE_KEY={从ARMS获取的LicenseKey}

启动命令修改为:

/opt/python/bin/aliyun-instrument python3 main.py

该启动器会在应用初始化前自动加载ARMS探针,实现零代码侵入的自动埋点。对于使用uvicorn的场景,建议改用gunicorn加UvicornWorker:

/opt/python/bin/aliyun-instrument gunicorn -w 4 -k uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 main:app

若代码中包含gevent协程,需额外添加环境变量GEVENT_ENABLE=true。

4. 前端监控接入实战

ARMS前端监控聚焦Web、H5、小程序等终端,监控页面加载速度、JS错误、API成功率等用户体验指标。使用ARMS前端监控来监控Web应用,必须先通过CDN或npm方式安装探针。

4.1 CDN方式接入

在ARMS控制台左侧导航栏选择前端监控,在接入中心面板的前端、移动端和用户端应用区域单击Web & H5。在接入Web & H5面板中输入自定义的应用名称,并选择需要的SDK扩展配置项。

异步加载方式是推荐的接入方式。复制提供的代码并粘贴至页面HTML的body内容的第一行。完整的HTML示例:

<!DOCTYPE html>
<html>
  <head>
    <meta charset=\"utf-8\" />
    <meta http-equiv=\"x-ua-compatible\" content=\"ie=edge,chrome=1\" />
    <meta name=\"viewport\" content=\"width=device-width\" />
    <title>ARMS</title>
  </head>
  <body>
    <script>
      !(function (c, b, d, a) {
        c[a] || (c[a] = {});
        c[a].config = {
          pid: 'xxx',
          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>

异步加载又称为非阻塞加载,表示浏览器在下载执行JS之后还会继续处理后续页面。若对页面性能的要求非常高,建议使用此方式。但由于是异步加载,ARMS无法捕捉到监控SDK加载初始化完成之前的JS错误和资源加载错误。

4.2 npm方式接入

执行以下命令安装npm包:

npm install @arms/js-sdk --save

以BrowserLogger.singleton方式初始化SDK:

const BrowserLogger = require('@arms/js-sdk');
const __bl = BrowserLogger.singleton({
  pid: \"your-project-id\",
  appType: \"web\",
  imgUrl: \"https://arms-retcode.aliyuncs.com/r.png?\"
});

如需自定义用户标识,可在配置中加入uid字段:

const BrowserLogger = require('@arms/js-sdk');
const __bl = BrowserLogger.singleton({
  pid: \"your-project-id\",
  appType: \"web\",
  uid: 'xxx',
  imgUrl: \"https://arms-retcode.aliyuncs.com/r.png?\"
});

ARMS前端监控提供一系列SDK配置项,例如忽略指定URL、API、JS错误的上报、通过过滤URL中的非关键字符使页面聚类、通过随机采样上报来减小上报量并降低负载等。

5. 可观测链路OpenTelemetry版接入

ARMS支持多种方式接入OpenTelemetry Trace数据,可以将OpenTelemetry Trace数据直接上报至ARMS,或通过OpenTelemetry Collector转发。

接入步骤:登录ARMS控制台,在左侧导航栏单击接入中心,在服务端应用区域单击OpenTelemetry卡片。在OpenTelemetry配置面板中选择数据需要上报的地域,配置连接方式和上报方式,然后复制接入点和鉴权Token信息。

接入ARMS应用监控以后,ARMS探针对常见的Java框架进行了自动埋点,不需要修改任何代码就可以实现调用链信息的采集。如果需要在调用链信息中体现业务方法的执行情况,可以引入OpenTelemetry Java SDK,在业务代码中增加自定义埋点。

6. Prometheus监控接入

在开通ARMS之后,可以在ARMS中为ACK集群一键安装Prometheus监控插件,通过ARMS预定义的仪表板监控Kubernetes集群的众多性能指标。

对于ECS主机监控,在ARMS控制台的接入中心基础设施页面,单击主机监控,选择目标ECS所属的VPC,按照需求填写配置信息。可观测监控Prometheus版还提供了Remote Write标准接口,可以通过这个接口远程接入开源Prometheus的监控数据。

7. 告警规则与通知策略配置

告警管理支持将告警通知通过短信、电话、邮件、钉钉等方式发送给通知对象。

7.1 创建通知对象

以创建钉钉群机器人为例:登录ARMS控制台,在左侧导航栏选择告警管理,单击钉钉/飞书/企微页签,然后单击钉钉。在弹出的面板中设置名称、签名密钥(可选)、机器人地址等参数。如果配置了密钥则会通过加签的方式进行钉钉认证;如果没有配置密钥,默认使用关键字白名单的方式进行认证,白名单关键字为告警。

7.2 创建通知策略

通过设置通知策略,可以制定针对告警事件的匹配规则。当匹配规则被触发时,系统会以指定的通知方式向通知对象发送告警信息。在通知策略页面单击新建通知策略。在匹配规则区域设置告警事件的匹配规则。

静默策略优先于通知策略,即已被静默策略匹配到的告警事件将会被静默,无法再进行通知策略的事件匹配。在事件分组区域,可以设置告警事件是否需要分组。不需要分组时所有告警事件会以一条告警信息发送给处理人;设置分组字段时,字段内容相同的告警事件会汇总到同一告警发送通知。

ARMS系统自带的默认标签包括:

  • alertname:告警名称
  • clustername:集群名称
  • severity:告警等级(P1、P2、P3、P4)
  • _aliyun_arms_integration_name:集成名称
  • _aliyun_arms_alert_rule_id:告警规则ID
  • _aliyun_arms_alert_type:告警规则类型(101为Prometheus告警,5为应用监控告警,4为前端监控告警)

8. 自定义可观测大盘

ARMS控制台全面拥抱开源,针对高定制需求场景提供了基于Grafana加Prometheus的解决方案。可以在Grafana中添加应用监控数据源,然后配置自定义大盘。

可观测可视化Grafana版的免费共享版工作区不支持大盘编辑功能,如果要自定义大盘,必须创建付费版本的工作区。Grafana 9.0.x及以上版本支持使用ARMS告警管理。

9. 调用链采样与成本优化

对于绝大多数的分布式系统,不是每一条调用链都值得被可观测平台记录,因为其中包含大量重复的、低关注度的信息。ARMS提供丰富灵活的采样策略,可以围绕不同业务场景配置最合适的调用链采样策略,以达到成本最优、效果最佳的目的。

ARMS使用头部采样来最小化可观测数据的成本,同时保持链路的连贯性。ARMS支持两种头部采样策略:固定速率采样以指定百分比在入口服务处采样链路。ARMS探针默认将链路采集限制为每秒100条,以防止监控在流量高峰时影响应用性能。

可以在ARMS控制台指定应用下的采样设置区域调整固定采样率。在采样率设置字段输入百分比的数字部分即可,例如输入10代表采样10%。

成本优化方面还需要注意:按写入可观测数据量计费时,写入数据后各种数据类型享受不同天数免费存储权益。免费额度是按照阿里云账号级别计算,即该账号下子产品的不同应用或实例共享免费额度。每天每应用每个计费数据类型最小用量为0.1GB。

10. 常见问题排查

在ACK环境下Java应用接入ARMS后无数据时,可以按照以下步骤排查:

基础检查:进入ARMS控制台到应用列表,点击右上角设置到应用启停设置,确认数据采集是否被关闭。确认Agent总开关是否被关闭。如果是试用版,确认试用期是否已到期。

JVM监控数据检查:进入应用详情到JVM监控页面。如果没有JVM监控数据,可能是节点与控制台断连,需要检查网络连通性。如果有JVM监控数据但没有接口监控数据,需要确认当前应用有流量访问,确认应用内使用组件版本在ARMS支持范围内。如果探针版本较老(低于2.7.3.5),建议升级探针版本。

ACK接入相关检查:检查initContainer是否正常注入。检查initContainer日志,确认是否有异常退出。正常情况日志中应该出现以下内容:

[init] ack-onepilot k8s init ended. cost: 12.90225787s, error: <nil>

如果出现Error: container has runAsNonRoot and image will run as root错误,说明Pod配置了非root运行,需要去掉securityContext.runAsNonRoot: true配置。检查应用的重启时间是否在ack-onepilot安装之后。

网络要求方面,构建环境需能访问公网或阿里云内网,并开放TCP出方向端口:80、443、8080、8848、9092、9093、9990。

11. 最佳实践总结

生产环境使用ARMS建议遵循以下最佳实践:首先根据应用规模和数据量合理选择计费模式,小规模场景优先使用按量计费享受免费额度,大规模场景考虑购买资源包。其次合理配置调用链采样策略,对于核心交易链路使用较高采样率甚至全采样,对于非核心链路使用较低采样率以控制成本。第三,告警规则应分层设计,P1级别致命告警应立即通知,P2级别重要告警在工作时间通知,P3和P4级别告警可汇总后批量通知。第四,对于ACK环境优先使用组件管理一键接入。最后定期检查探针版本,及时升级到最新LTS版本以获得更好的性能和更多功能支持。

常见问题问答

问:ARMS支持哪些编程语言的应用监控?
答:ARMS应用监控支持Java、Go、Python等主流语言。Java应用通过探针无侵入方式接入,Python应用通过环境变量和启动命令配置接入,Go应用通过instgo编译工具接入。

问:ARMS前端监控的CDN和npm接入方式有什么区别?
答:CDN方式通过在页面HTML中插入script标签加载探针,支持异步加载和同步加载两种模式,适合传统Web应用。npm方式通过npm包管理器安装探针,以BrowserLogger.singleton方式初始化,适合现代前端工程化项目。

问:ARMS的调用链采样策略有哪些?如何配置?
答:ARMS支持固定速率采样策略,在入口服务处以指定百分比采样链路。可以在ARMS控制台指定应用下的采样设置区域调整固定采样率。ARMS探针默认将链路采集限制为每秒100条。

问:ARMS新版计费模式下有哪些免费额度?
答:应用监控指标每月50GB免费额度,存储90天;链路存储30天;剖析存储7天。可观测监控Prometheus版标准版指标每月50GB免费额度。免费额度按照阿里云账号级别计算。

问:ACK环境下Java应用接入ARMS后没有监控数据,应该从哪里开始排查?
答:首先检查ARMS控制台的数据采集开关是否关闭;然后检查Pod的initContainer是否正常注入;检查应用是否添加了armsPilotAutoEnable: on标签;确认应用重启时间在ack-onepilot安装之后;最后检查网络连通性和探针版本。

问:如何降低ARMS的使用成本?
答:可以通过以下方式降低成本:合理配置调用链采样率,对非核心链路使用较低采样率;购买预付费资源包以享受更低单价;注意免费额度的合理使用;对于容器服务监控,基础指标默认存储7天且免费;避免不必要的数据上报,通过SDK配置过滤无关URL和API上报。

相关文章

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

买阿里云服务器能便宜吗?十年代理揭秘 3 大省钱攻略!

作为深耕阿里云代理领域 10 年的 “老司机”,经常被问到:“买阿里云服务器能便宜吗?有没有优惠价格?” 今天就用实打实的行业经验告诉你:不仅能便宜,选对渠道还能省一大笔! 这篇文章带你解锁阿里云服务…

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

做了 10 年腾讯云代理,我想跟你聊聊返佣那些事儿​

最近总有朋友问我:“腾讯云有返点吗?腾讯云服务器能拿佣金不?返佣比例到底有多少?” 作为一个在腾讯云代理行业摸爬滚打了 10 年的 “老人”,今天就来跟大家好好…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS、对象存…

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

阿里云代理商返佣机制深度解析:头部代理优势与企业合作策略

01一、阿里云代理商的核心价值定位1. 代理商的角色与职责阿里云代理商作为阿里云生态的核心合作伙伴,承担着双重核心职能:• 产品销售:负责推广销售阿里云全系列云产品,包括云服务器ECS、云数据库RDS…

阿里云代理商有哪些?阿里云代理返点是真的么?

阿里云代理商有哪些?阿里云代理返点是真的么?

一,阿里云代理商基本介绍阿里云代理商通俗一点,就是指从事阿里云云服务器,云数据库等阿里云公有云产品销售的代理商,每销售一件阿里云公有云产品出去,阿里云给予该代理商一定比例的提成。在阿里云官方定义中,这…

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

2026阿里云代理商生态全解析:五级代理体系、返佣政策与企业上云指南

一、阿里云五级代理体系:权益阶梯与合作价值1. 五级代理的核心权益差异阿里云构建了多层次的代理生态体系,涵盖全国总代理、区域核心代理、行业ISV(独立软件开发商)、金牌/银牌认证代理及标准代理五大核心…