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

作者:陈承

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

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

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

不同的需求层级本质上是对定制化监控方案的诉求。阿里云应用实时监控服务 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] ,选择任意一个工作空间后进入应用监控卡片。

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

  • 名称:当前模板的名称。

  • 描述:当前模板的描述。

  • 类型:目前有两种,系统内置和自定义。初始情况下只有系统内置模板,用户可根据自身诉求将当前一些应用的配置保存为自定义模板。

  • 来源:系统内置模板都是系统管理员,自定义模板则展示该模板的来源应用,自定义模板一般通过在应用配置页面点击另存为配置模板的方式创建,如下图所示:

  • 语言:目前有 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 需要修改为下述形式。

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

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

应用引入下述依赖:

xml 复制代码
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>cms20240330</artifactId>
    <version>3.1.0</version>
</dependency>

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

typescript 复制代码
    /**
     *
     * 创建应用接口
     *
     * @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 指标的大盘。

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

当 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 控制台 [cmsnext.console.aliyun.com/next/home](https://link.juejin.cn?target=https%3A%2F%2Fcmsnext.console.aliyun.com%2Fnext%2Fhome "https://cmsnext.console.aliyun.com/next/home") \[2\] 接入文档 [help.aliyun.com/zh/arms/app...](https://link.juejin.cn?target=https%3A%2F%2Fhelp.aliyun.com%2Fzh%2Farms%2Fapplication-monitoring%2Fuser-guide%2Finstall-arms-agent-for-java-applications-deployed-in-ack-and-acs "https://help.aliyun.com/zh/arms/application-monitoring/user-guide/install-arms-agent-for-java-applications-deployed-in-ack-and-acs") \[3\] 接入文档 [help.aliyun.com/zh/arms/app...](https://link.juejin.cn?target=https%3A%2F%2Fhelp.aliyun.com%2Fzh%2Farms%2Fapplication-monitoring%2Fuser-guide%2Fmanually-install-arms-agent-for-java-applications "https://help.aliyun.com/zh/arms/application-monitoring/user-guide/manually-install-arms-agent-for-java-applications") \[4\] JVM 监控大盘 [grafana.com/grafana/das...](https://link.juejin.cn?target=https%3A%2F%2Fgrafana.com%2Fgrafana%2Fdashboards%2F4701-jvm-micrometer%2F "https://grafana.com/grafana/dashboards/4701-jvm-micrometer/") \[5\] 探针插件开关配置指南 [help.aliyun.com/zh/arms/app...](https://link.juejin.cn?target=https%3A%2F%2Fhelp.aliyun.com%2Fzh%2Farms%2Fapplication-monitoring%2Fuser-guide%2Fcustom-configuration%3Fspm%3Da2c4g.11186623.help-menu-search-34364.d_1%255B%23f6cd23c7035fd%255D "https://help.aliyun.com/zh/arms/application-monitoring/user-guide/custom-configuration?spm=a2c4g.11186623.help-menu-search-34364.d_1%5B#f6cd23c7035fd%5D") \[6\] 持续剖析性能诊断实践 [help.aliyun.com/zh/arms/app...](https://link.juejin.cn?target=https%3A%2F%2Fhelp.aliyun.com%2Fzh%2Farms%2Fapplication-monitoring%2Fuser-guide%2Fhow-to-locate-performance-bottlenecks-via-flame-chart "https://help.aliyun.com/zh/arms/application-monitoring/user-guide/how-to-locate-performance-bottlenecks-via-flame-chart") \[7\] OT-SDK 自定义指标接入手册 [help.aliyun.com/zh/arms/app...](https://link.juejin.cn?target=https%3A%2F%2Fhelp.aliyun.com%2Fzh%2Farms%2Fapplication-monitoring%2Fuse-cases%2Fcustomize-metrics-by-using-the-opentelemetry-java-sdk "https://help.aliyun.com/zh/arms/application-monitoring/use-cases/customize-metrics-by-using-the-opentelemetry-java-sdk")

相关推荐
马达加斯加D4 小时前
k8s --- resource 资源
云原生·容器·kubernetes
阿里云云原生5 小时前
火热报名中!2025 龙蜥操作系统大会亮点速递
云原生
Dobby_0510 小时前
【Docker】容器网络探索(二):实战理解 host 网络
网络·docker·云原生
橙色云-智橙协同研发14 小时前
从 CAD 图纸到 Excel 数据:橙色云智橙 PLM 打造制造企业数字化协同新模式
大数据·功能测试·云原生·cad·plm·云plm·bom提取
Wang's Blog18 小时前
Nestjs框架: 微服务事件驱动通信与超时处理机制优化基于Event-Based 通信及异常捕获实践
微服务·云原生·架构·nestjs
YXWik618 小时前
新版若依微服务增强swagger增强集成knife4j
微服务·云原生·架构
马达加斯加D19 小时前
k8s --- Intro
云原生·容器·kubernetes
!chen1 天前
k8s-应用部署和组件及常用命令
云原生·容器·kubernetes
Solar20251 天前
微服务调用超时:从问题分析到全链路优化实践
微服务·云原生·架构