通过本教程,您将学习如何将ACK集群下的Java应用接入ARMS应用监控,体验应用性能分析和调用链分析等功能,并配置告警。
如需将其他环境下的Java应用或Golang应用接入应用监控,请参见应用接入。
使用流程
-
为应用安装探针。
-
安装ack-onepilot组件:ack-onepilot是阿里云容器服务Kubernetes提供的系统组件,可以让部署在容器服务Kubernetes中的Java或Golang应用接入ARMS。
-
更新YAML:通过在应用的YAML中添加
labels,开启监控并配置应用在ARMS中的展示名称。
-
-
查看监控数据。
-
为监控数据配置告警。
准备环境和资源
-
ACK:
-
创建Kubernetes集群。具体操作,请参见创建ACK托管集群。
-
创建Java应用:
-
JDK版本要求,请参见ARMS应用监控支持的Java组件和框架。
-
进程最大堆内存需大于256 MB。
如果您没有可以使用的Java应用,可以参考以下示例YAML创建。具体操作,请参见创建无状态工作负载Deployment。
说明示例YAML创建了以下资源:
-
空间名称:arms-demo。以下所有资源均创建在arms-demo命名空间下。
-
无状态应用:arms-springboot-demo和arms-springboot-demo-subcomponent。
-
服务:arms-demo-component。
-
数据库:arms-demo-mysql。
-
-
-
ARMS:
已开通应用监控计费版本。
应用监控每月提供50 GB的免费额度,当月未使用完的试用额度不会结转至次月,当月超出免费额度的部分,按照写入的数据量进行收费。收费详情,请参见计费说明。
为应用安装探针
1. 安装ack-onepilot组件
登录容器服务管理控制台,在集群列表页面单击目标集群名称。
在左侧导航栏单击组件管理,然后通过关键字搜索ack-onepilot。
-
在ack-onepilot卡片上单击安装,然后在弹出的对话框单击确定。
安装完成后,ack-onepilot 组件卡片右上角显示已安装标签,底部显示当前版本号。
2. 更新YAML
-
在页面选择应用所在的命名空间,然后在目标应用右侧选择。
-
在编辑 YAML中将以下
labels添加到spec.template.metadata层级下,然后单击更新。labels: armsPilotAutoEnable: "on" armsPilotCreateAppName: "<your-deployment-name>" #应用在ARMS中的展示名称。例如,在arms-springboot-demo和arms-springboot-demo-subcomponent应用的YAML中添加配置,开启监控并配置在ARMS中的展示名称分别为arms-k8s-demo和arms-k8s-demo-subcomponent。
arms-springboot-demo应用
strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: app: arms-springboot-demo armsPilotAutoEnable: 'on' armsPilotCreateAppName: arms-k8s-demo spec: containers: - env: - name: SELF_INVOKE_SWITCH value: 'true' - name: COMPONENT_HOST value: arms-demo-component - name: COMPONENT_PORT value: '6666' - name: MYSQL_SERVICE_HOST value: arms-demo-mysql - name: MYSQL_SERVICE_PORT value: '3306' image: >- registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1 imagePullPolicy: Always name: arms-springboot-demo resources: limits: cpu: 500marms-springboot-demo-subcomponent应用
在Deployment的YAML中,于
template.metadata.labels下添加armsPilotAutoEnable: 'on'和armsPilotCreateAppName: arms-k8s-demo-subcomponent两个标签以开启ARMS应用监控,完整配置片段如下。strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: app: arms-springboot-demo-subcomponent armsPilotAutoEnable: 'on' armsPilotCreateAppName: arms-k8s-demo-subcomponent spec: containers: - env: - name: SELF_INVOKE_SWITCH value: 'false' - name: MYSQL_SERVICE_HOST value: arms-demo-mysql - name: MYSQL_SERVICE_PORT value: '3306' image: >- registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1 imagePullPolicy: Always name: arms-springboot-demo-subcomponent resources: limits: cpu: 500m terminationMessagePath: /dev/termination-log terminationMessagePolicy: File dnsPolicy: ClusterFirst restartPolicy: Always -
待容器完成自动重新部署后,等待1~2分钟,在ARMS控制台的页面单击应用名称,查看应用的监控指标。更多信息,请参见查看监控详情(新版)。
在应用列表中可以看到 arms-k8s-demo-subcomponent 和 arms-k8s-demo 两个 Java 应用,表格展示了每秒请求数、错误率、平均响应时间、CVE漏洞数、智能洞察等监控指标及其趋势。
查看监控详情
调用链分析
调用链分析功能可以通过自由组合筛选条件与聚合维度进行实时分析,并支持通过错/慢Trace分析功能,定位系统或应用产生错、慢调用的原因。
arms-k8s-demo应用
在 ARMS 控制台的调用链分析页面,选择应用 arms-k8s-demo,可按 serviceName、时间范围、状态(正常/错误)、耗时、接口名称、主机地址等条件筛选调用记录。页面中部展示调用次数柱状图、HTTP 错误数柱状图(含 500 状态码)和耗时百分位折线图(p50/p90/p95/p99/平均耗时)。下方表格展示 Trace 明细,包含 TraceId、接口名称、应用名称、耗时、状态码、开始时间、主机地址等列,支持切换列表、散点图、全链路聚合、全链路拓扑、错/慢 Trace 分析等视图。右侧慢 Trace 分析面板基于耗时最长的 Trace 识别与慢调用最相关的维度属性。
调用链详情:
TraceID为eaac1ed0ba172137124366816284d0001,总耗时69ms。调用链包含两个Span:第一个Span为接口/demo/queryNotExistDB/{id}(来自arms-k8s-demo应用,状态码200,耗时69ms);第二个Span为MySQL查询select * from (来自arms_apm_demo_db,耗时2ms)。右侧Span详情面板显示应用名arms-k8s-demo、接口名MySQL、IP user_notExist where id = 0172.30.208.186,状态正常。下方Attributes中包含db.name: arms_apm_demo_db、db.statement: select * from 、user_notExist where id = 0net.peer.name: arms-demo-mysql:3306等属性。
arms-k8s-demo-subcomponent应用
在arms-k8s-demo-subcomponent应用的调用链分析页面,页面上方展示调用次数、HTTP错误数和耗时百分位(p50/p90/p95/p99)图表,左侧提供状态(正常/错误)、耗时、接口名称、主机地址等快捷筛选条件,下方为Trace列表(包含TraceId、接口名称、应用名称、耗时、状态、开始时间、主机地址等列),右侧面板展示慢Trace分析及Top属性维度。
调用链详情:
Trace详情页展示 TraceID 为 eaac1ed0e01721371214642764Od0001 的调用链,开始时间 2024-07-19 14:40:14,总耗时 99ms。调用链包含 3 个 Span:入口 Span /demo/invokeComponent(arms-k8s-demo,状态码 200,99ms)调用 /demo/queryUser/{id}(arms-k8s-demo-subcomponent,状态码 200,96ms),后者执行 MySQL 查询 select * from 'user' where id = ?(arms_apm_demo_db,1ms)。Span 详情显示应用名 arms-k8s-demo-subcomponent,接口 /demo/queryUser/{id},IP 172.30.208.119,状态正常。Attributes 包括 http.path: /demo/queryUser/10、http.status_code: 200、namespace: arms-demo、clusterName: go-test-1 等属性。
监控指标
-
应用概览
arms-k8s-demo应用

arms-k8s-demo-subcomponent应用

-
应用拓扑
arms-k8s-demo应用
在 ARMS 控制台选择应用 arms-k8s-demo,单击应用拓扑 Tab,可查看应用调用拓扑。拓扑显示 arms-k8s-demo 节点(错误数 16,请求数 259,响应时间 1.2s)及其三个下游依赖:arms-k8s-demo-subapp(错误数 16,请求数 152,响应时间 1.1s)、www.aliyun.com(错误数 0,请求数 75,响应时间 72.85ms)、arms-demo-mysql(错误数 0,请求数 91,响应时间 1.50ms)。
arms-k8s-demo-subcomponent应用
在应用拓扑页签中,展示 arms-k8s-demo-subcomponent 应用的服务调用拓扑。拓扑图包含以下节点及指标:arms-k8s-demo(错误数 16,请求数 259,响应时间 1.2s)、arms-k8s-demo-subcomponent(错误数 64,请求数 732,响应时间 1.2s)、arms-demo-mysql(错误数 0,请求数 227,响应时间 0.59ms)、www.aliyun.com(错误数 0,请求数 195,响应时间 106.21ms)。节点间以连线标识调用关系,arms-k8s-demo 调用 arms-k8s-demo-subcomponent,后者分别调用 arms-demo-mysql 和 www.aliyun.com。
配置告警
通过配置告警,您可以制定针对特定应用的告警规则。当告警规则被触发时,系统会以您指定的通知方式向告警联系人或钉群发送告警信息,以提醒您采取必要的解决措施。具体操作,请参见应用监控告警规则。
示例告警规则配置:告警对象选择arms-k8s-demo和arms-k8s-demo-subcomponent应用,指标类型选择应用提供服务统计,筛选条件中接口名称和接口调用类型均设为遍历,触发模式为单条件,告警条件为最近5分钟调用响应时间平均值大于等于对应阈值,多级阈值设置为P1:critical 6000毫秒、P2:error 4000毫秒、P4:page 2500毫秒。
释放资源
完成教程后:
-
如果仍需要继续监控当前应用,请确保账户不要欠费。
-
如果无需继续监控当前应用,请卸载探针。具体操作,请参见卸载Kubernetes环境中的探针。
相关文档
-
ARMS支持多种调用链采样模式,您可以根据自身场景选择合适的调用链采样模式,从而以较低成本获取想要的调用链数据。更多信息,请参见调用链采样模式选择(3.2.8及以上探针版本)。
-
ARMS应用监控支持在应用的业务日志中关联调用链的TraceId信息,从而在应用出现问题时,能够通过调用链的TraceId快速关联到业务日志,及时定位、分析并解决问题。更多信息,请参见Java应用业务日志关联调用链TraceId。
-
当您的线上应用出现CPU、内存资源使用率高或大量慢调用问题时,可以通过ARMS持续剖析功能生成的火焰图对其进行根因定位。更多信息,请参见Java应用持续剖析。
-
阿里云可观测监控 Prometheus 版默认集成了ARMS应用监控数据源,您可以直接在可观测监控 Prometheus 版下获取应用监控相关数据、查看应用监控预置大盘,并根据需求进行二次开发。更多信息,请参见通过Prometheus监控获取ARMS应用监控数据。
> YAML 编辑