低至 1% 性能损耗:阿里云 ARMS 配置模板如何实现精准可控的 JMX 数据采集

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: APM 一定要全量采集吗?ARMS 推出配置模板,支持按场景分级监控:核心应用上 Trace,非核心只采 JVM,成本直降 90%+ !

作者:陈承


传统 Application Performance Monitoring(APM)体系通过框架级插桩(Instrumentation)与后台服务,实现对应用 Trace、Metric、Log 及 Profiling 数据的全量采集。此类方案基于专家经验设计,以高密度数据覆盖确保故障现场信息的完整性,为根因定位提供多维度数据支撑。然而在成本敏感、资源受限、性能及稳定性要求极高等场景中,用户有不同的 APM 诉求:


  • 基础监控诉求:对于测试、预发、非核心应用、成本敏感等场景,基础 JVM 监控指标(如堆内存、GC 行为)结合轻量化诊断能力(内存 Dump、持续性能剖析、Arthas 实时诊断)即可满足多数线上问题排查诉求。
  • 自定义监控诉求:对于一些成熟的应用,用户有一套自己运维方法论,强烈依赖自身在应用内部定义的一些监控数据,包括日志、指标和 span 等数据。


总结下来,用户监控需求呈现明显的场景分级特征,大体可分为三级:

1762330910806_0A19B7A9-87B8-486e-B0DC-B09608C897FA.png

不同的需求层级本质上是对定制化监控方案的诉求。阿里云应用实时监控服务 ARMS 在默认提供 L3 级别的应用可观测能力外,也提供了基于配置模板的解决方案也支持通过简易配置即可灵活控制采集策略,为用户提供 L1~L3 全层级的应用可观测方案。一个配置模板代表一种监控场景。围绕配置模板,ARMS 提供了下述能力:


  • 不同语言提供常用的系统内置模板,涵盖最基础和最完备的监控配置,比如针对 Java 语言,提供下述两种配置模板:
  • JVM JMX 监控模板:仅采集 20+ 关键 JMX 指标(堆内存、线程、类加载等)。性能开销极低(1% 以下),数据上报量低(单节点单天上报数据量约等于 1GB)
  • 完整 APM 监控模板:涵盖 Trace 追踪、异常堆栈、RED 指标、JVM 指标、 Profiling 等监控数据的采集,能覆盖错、慢、异常等大多数问题的定位。性能开销低(大多数场景下小于 10%),数据上报量相对较多(大多数情况下单节点单天上报数据量约等于 15GB)
  • 支持配置模板自定义。基于系统内置模板,通过对部分应用监控配置的调整,完成适合用户监控场景的自定义配置模板创建。
  • 应用创建时支持指定生效的配置模板。


下文将系统地介绍 ARMS 配置模板的功能,并以 JVM JMX 监控模板为例演示端到端配置流程。


ARMS 配置模板功能介绍


配置模板管理页面介绍

打开阿里云云监控 2.0 控制台[1],选择任意一个工作空间后进入应用监控卡片。

1762330949640_5A6EC091-A213-40fb-96ED-85E92E67C123.png

在该页面,通过列表的形式展示了用户在当前 workspace 的所有配置模板。

  • 名称:当前模板的名称。
  • 描述:当前模板的描述。
  • 类型:目前有两种,系统内置和自定义。初始情况下只有系统内置模板,用户可根据自身诉求将当前一些应用的配置保存为自定义模板。
  • 来源:系统内置模板都是系统管理员,自定义模板则展示该模板的来源应用,自定义模板一般通过在应用配置页面点击另存为配置模板的方式创建,如下图所示:
    1762330967413_65165980-64A9-4651-8C42-6D0B650B5EA8.png
  • 语言:目前有 Java、Go、Python 三种,分别代表该模板作用的应用语言类型。
  • 全局配置模板:一个语言在一个 workspace 可以选择一个模板作为全局配置模板。此后该 workspace 下新创建的应用会以该模板为内容创建一份应用配置。
  • 操作:可以将一个模板配置为全局配置模板或者取消配置为全局配置模板,也可以查看该模板的内容以及删除一些用户自定义模板。


配置模板使用方式介绍

步骤 1:创建需要的配置模板【可选】

选择任意应用,将该应用的应用配置调整为预期的配置,点击保存后,再点击保存为自定义配置模板。

步骤 2:新接入应用指定生效的配置模板

ack-onepilot 方式接入的应用,详见接入文档[2]

方式 1:在配置管理页面将步骤 1 得到的模板设置为全局模板。之后所有 ack-onepilot 方式接入的新应用均会用该模板的内容创建应用自定义配置。


方式 2:修改应用的 yaml 时,新增加一个名为 apsara.apm/armsConfigTemplate 的 label,该 label 对应的 value 为预期生效的模板名称(注意,方式 2 优先级高于方式 1),以 jvm_jmx_default 这个模板为例,应用的 yaml 需要修改为下述形式。

1762331009665_27DD17CD-D029-4d23-A048-FBC185F80FE4.png

手动挂载探针方式接入的应用,详见接入文档[3]

对于手动挂载探针的应用,需要用户在应用实际挂载探针前,通过 OpenAPI 预先创建好应用。


应用引入下述依赖:


<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>cms20240330</artifactId>
    <version>3.1.0</version>
</dependency>


按照下述方式提前创建应用,并在创建应用的时候指定配置模板即可。


    /**
     *
     * 创建应用接口
     *
     * @param workspace 云监控2.0的workspace
     * @param appName 应用名称
     * @param configTemplateName 配置模板名称
     * @param regionId 当前workspace 对应的regionId
     * @return 创建应用的返回值
     */
    public static CreateServiceResponse createApp(String workspace, String appName, String configTemplateName, String regionId) {
        try {
            Config config = new Config();
            config.setAccessKeyId("your ak");
            config.setAccessKeySecret("your sk");
            config.setEndpoint(String.format("cms.%s.aliyuncs.com", regionId));
            Client client = new Client(config);
            CreateServiceRequest request = new CreateServiceRequest();
            request.setServiceName(appName);
            request.setServiceType("TRACE");
            request.setAttributes(String.format("{\"armsConfigTemplate\":\"%s\", \"language\":\"JAVA\"}", configTemplateName));
            return client.createService("default-cms-1672753017899339-cn-hangzhou", request);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }


基础:基于配置模板实现 JVM 的 JMX 指标采集和监控


前面提到对于一个 Java 应用,目前 ARMS 提供了两种系统内置模板,它们的名字分别是:


  • apm_java_default:这个模板提供标准 APM 数据采集服务,是当前 Java 应用接入 ARMS 默认的配置。
  • jvm_jmx_default:这个模板仅提供 JVM 部分重要 JMX bean 数据的采集服务,包括 GC、内存、线程耗时等指标。相关指标名称完全对齐在 Grafana 社区中广受欢迎的开源 JVM 监控大盘[4]指标规范。


通过上一章节的介绍,新应用接入可以使用 jvm_jmx_default 这个模板,这样这些新应用默认只会采集一些重要的 JMX bean 的指标。完成应用接入后,在该应用的场景化分析页面即可看到相关 JMX 指标的大盘。

1762331074362_26B7757A-1C8F-4d5c-8171-696CE7DF7BC4.png


进阶:通过配置模板实现个性化监控方案定制


当 Java 应用通过 jvm_jmx_default 模板完成基础 JVM 监控接入后,随着业务监控需求的演进,可通过以下三级扩展机制实现监控能力升级:


1. 框架级深度观测能力扩展

场景需求:需监控 Web 服务(Tomcat/Spring MVC)、RPC 框架(Dubbo/gRPC)或数据库(MySQL/Redis)的调用链与性能指标。


实施方式:

1. 在应用配置界面启用对应插件模块

2. 触发应用实例重启以激活采集器更新


完整支持列表与版本兼容性详见探针插件开关配置指南[5]


2. 性能瓶颈诊断能力增强

场景需求:定位 CPU 开销高、gc 频繁等高阶性能问题。

实施方式:

  • 启用 Continuous Profiling 功能
  • 通过火焰图可视化分析热点方法调用树

技术优势:

  • 低开销采样(<5% CPU 利用率)保障生产环境可用性
  • 支持同步展示 CPU、Memory 多维度剖析数据

操作细则详见持续剖析性能诊断实践[6]


3. 业务级可观测性定制

场景需求:定义业务黄金指标(如订单处理速率)、自定义 SLO/SLI 度量。

实施方式:

  • 基于 OpenTelemetry SDK 实现指标埋点(Counter/Gauge/Histogram)
  • 在监控配置中心注册自定义指标采集规则

典型应用:

  • 交易成功率 = (成功订单数)/(总订单数) × 100%
  • API P99 时延的 SLO 达标率统计

开发规范详见 OT-SDK 自定义指标接入手册[7]


4. 可持续监控治理机制

当通过长期实践验证某配置方案在功能性(覆盖度)、性能(资源损耗比)、经济性(存储成本)三个维度达到最优平衡时:


1. 进入应用的配置页面将当前应用的配置保存为自定义配置模板。

2. 【可选】在配置模板管理页面将该模板设置为全局配置模板。

3. 新接入应用根据需求选择是否应用步骤 1 得到的配置模板。


该机制可确保监控策略的版本化管理和企业级最佳实践复用。


总结


一个成熟的监控方案是功能、性能、成本三者的平衡,是在对 ARMS 产品以及自身业务深入了解背景下长期实践下来的结晶。通过配置模板完成这些监控方案的统一管理和复用,一定能助力企业在数字基础设置稳定性建设方面更上一层楼。


相关链接:

[1] 云监控 2.0 控制台

https://cmsnext.console.aliyun.com/next/home

[2] 接入文档

https://help.aliyun.com/zh/arms/application-monitoring/user-guide/install-arms-agent-for-java-applications-deployed-in-ack-and-acs

[3] 接入文档

https://help.aliyun.com/zh/arms/application-monitoring/user-guide/manually-install-arms-agent-for-java-applications

[4] JVM 监控大盘

https://grafana.com/grafana/dashboards/4701-jvm-micrometer/

[5] 探针插件开关配置指南

https://help.aliyun.com/zh/arms/application-monitoring/user-guide/custom-configuration?spm=a2c4g.11186623.help-menu-search-34364.d_1#f6cd23c7035fd

[6] 持续剖析性能诊断实践

https://help.aliyun.com/zh/arms/application-monitoring/user-guide/how-to-locate-performance-bottlenecks-via-flame-chart

[7] OT-SDK 自定义指标接入手册

https://help.aliyun.com/zh/arms/application-monitoring/use-cases/customize-metrics-by-using-the-opentelemetry-java-sdk

相关实践学习
通过轻量消息队列(原MNS)主题HTTP订阅+ARMS实现自定义数据多渠道告警
本场景将自定义告警信息同时分发至多个通知渠道的需求,例如短信、电子邮件及钉钉群组等。通过采用轻量消息队列(原 MNS)的主题模型的HTTP订阅方式,并结合应用实时监控服务提供的自定义集成能力,使得您能够以简便的配置方式实现上述多渠道同步通知的功能。
相关文章
|
19天前
|
SQL 数据采集 人工智能
评估工程正成为下一轮 Agent 演进的重点
面向 RL 和在数据层(SQL 或 SPL 环境)中直接调用大模型的自动化评估实践。
840 212
|
1月前
|
数据采集 监控 API
告别手动埋点!Android 无侵入式数据采集方案深度解析
传统的Android应用监控方案需要开发者在代码中手动添加埋点,不仅侵入性强、工作量大,还难以维护。本文深入探讨了基于字节码插桩技术的无侵入式数据采集方案,通过Gradle插件 + AGP API + ASM的技术组合,实现对应用性能、用户行为、网络请求等全方位监控,真正做到零侵入、易集成、高稳定。
439 31
|
8天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
552 206
|
29天前
|
人工智能 开发框架 安全
浅谈 Agent 开发工具链演进历程
模型带来了意识和自主性,但在输出结果的确定性和一致性上降低了。无论是基础大模型厂商,还是提供开发工具链和运行保障的厂家,本质都是希望提升输出的可靠性,只是不同的团队基因和行业判断,提供了不同的实现路径。本文按四个阶段,通过串联一些知名的开发工具,来回顾 Agent 开发工具链的演进历程。
353 42
|
28天前
|
人工智能 运维 Cloud Native
直播|均降 40% 的 GPU 成本,大规模 Agent 部署和运维的捷径是什么?
10月28日19:30,阿里云云原生AgentRun与你《极客有约》。
185 28
|
19天前
|
人工智能 并行计算 算法
为什么 OpenSearch 向量检索能提速 13 倍?
本文介绍在最新的 OpenSearch 实践中,引入 GPU 并行计算能力 与 NN-Descent 索引构建算法,成功将亿级数据规模下的向量索引构建速度提升至原来的 13 倍。
541 24
为什么 OpenSearch 向量检索能提速 13 倍?
|
1月前
|
人工智能 运维 Kubernetes
Serverless 应用引擎 SAE:为传统应用托底,为 AI 创新加速
在容器技术持续演进与 AI 全面爆发的当下,企业既要稳健托管传统业务,又要高效落地 AI 创新,如何在复杂的基础设施与频繁的版本变化中保持敏捷、稳定与低成本,成了所有技术团队的共同挑战。阿里云 Serverless 应用引擎(SAE)正是为应对这一时代挑战而生的破局者,SAE 以“免运维、强稳定、极致降本”为核心,通过一站式的应用级托管能力,同时支撑传统应用与 AI 应用,让企业把更多精力投入到业务创新。
396 29
|
22天前
|
存储 算法 Java
深入理解JVM:内存管理与垃圾回收机制探索
JVM是Java程序的运行核心,实现跨平台、自动内存管理与高效执行。其架构包括类加载、运行时数据区、执行引擎等模块。内存模型历经演变,JDK 8起以元空间替代永久代,优化GC性能。JVM通过分代回收机制,结合标记清除、复制、整理等算法,管理对象生命周期,提升系统稳定性与性能。
|
1月前
|
监控 JavaScript 编译器
从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南
本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。
378 37
下一篇
oss云网关配置