对于部署在容器服务Kubernetes版中的Java应用,您可以使用应用实时监控服务ARMS对其进行监控,实现自动发现应用拓扑、自动生成3D拓扑、自动发现并监控接口、捕获异常事务和慢事务,大幅提升线上问题诊断的效率。
背景信息
应用实时监控服务ARMS(Application Real-Time Monitoring Service)是一款阿里云应用性能管理(APM)类监控产品。只要为部署在容器服务Kubernetes版中的Java应用安装ARMS应用监控组件,您无需修改任何代码,就能借助ARMS对Java应用进行全方位监控,以便您更快速地定位出错接口和慢接口、重现调用参数、检测内存泄漏、发现系统瓶颈,从而大幅提升线上问题诊断的效率。ARMS应用监控的详细信息请参见什么是应用监控。
步骤一:安装ARMS应用监控组件
重要 ACK旧版应用监控组件arms-pilot已不再维护,您可以安装升级后的ack-onepilot组件用于监控您的应用,ack-onepilot完全兼容arms-pilot,您无需修改应用配置即可无缝接入ack-onepilot。更多信息,请参见
如何安装ack-onepilot和卸载arms-pilot。
- 登录容器服务管理控制台。
- 在左侧导航栏单击集群,然后在集群列表页面单击目标集群名称。
- 在左侧导航栏选择,然后在右上角通过关键字搜索ack-onepilot。
- 在ack-onepilot卡片上单击安装。
- 在弹出的页面中可以配置相关的参数,建议使用默认值,单击确定。
说明 安装完成后,您可以在组件管理页面升级、配置或卸载ack-onepilot组件。
参数 | 说明 |
image | ack-onepilot组件镜像地址。 如果您是通过公网注册的外部集群,需要删除镜像参数中的VPC。例如,镜像参数为registry-vpc.cn-beijing.aliyuncs.com/ack-onepilot/ack-onepilot ,删除VPC后的镜像参数为registry.cn-beijing.aliyuncs.com/ack-onepilot/ack-onepilot 。 |
AccessKey | 您的阿里云AccessKeyId。AccessKey需要包含MSE访问权限。具体操作,请参见为集群授予MSE治理中心的访问权限。 |
AccessKeySecret | 您的阿里云AccessKeySecret。 |
安装ack-onepilot组件大约需要2分钟,请耐心等待。
创建成功后,会自动跳转到目标集群的Helm页面,检查安装结果。若所有资源创建成功,则说明组件安装成功。
步骤二:授予ARMS资源的访问权限
- 如果需监控ASK(容器服务Serverless版)或对接了ECI的集群应用,请在云资源访问授权页面完成授权,然后重启ack-onepilot组件下的所有Pod。
- 如果需监控ACK集群应用,但ACK集群中不存在ARMS Addon Token,请执行以下操作手动为集群授予ARMS资源的访问权限。
说明 集群存在ARMS Addon Token时,ARMS会进行免密授权。Kubernetes托管版集群默认存在ARMS Addon Token,但对于部分早期创建的Kubernetes托管版集群,可能会存在没有ARMS Addon Token的情况,因此,对于Kubernetes托管版集群,建议首先检查ARMS Addon Token是否存在。若不存在,需进行手动授权。
- 登录容器服务管理控制台。
- 在左侧导航栏选择集群,然后单击目标集群名称。
- 在目标集群的集群信息页面上单击集群资源页签,然后单击Worker RAM角色右侧的链接。
- 在角色页面单击权限管理页签上的权限策略名称。
- 在策略内容页签单击修改策略内容。
- 在脚本编辑页签中添加以下内容,然后单击继续编辑基本信息。
{
"Action": "arms:*",
"Resource": "*",
"Effect": "Allow"
}

- 确认策略内容无误后,单击确定。
步骤三:为Java应用开启ARMS应用监控
如需在创建新应用的同时开启ARMS应用监控,请完成以下操作。
在容器服务Kubernetes版控制台左侧导航栏单击集群,在集群列表页面上的目标集群右侧操作列单击应用管理。
在无状态页面右上角单击使用YAML创建资源。
选择示例模板,并在模板(YAML格式)中将以下labels
添加到spec.template.metadata层级下。
labels:
armsPilotAutoEnable: "on"
armsPilotCreateAppName: "<your-deployment-name>" #请将<your-deployment-name>替换为您的应用名称。
armsSecAutoEnable: "on" #如果需要接入应用安全,则需要配置此参数。

创建一个无状态(Deployment)应用并开启ARMS应用监控的完整YAML示例模板如下:
展开查看完整实示例YAML文件
apiVersion: v1
kind: Namespace
metadata:
name: arms-demo
---
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
name: arms-springboot-demo
namespace: arms-demo
labels:
app: arms-springboot-demo
spec:
replicas: 2
selector:
matchLabels:
app: arms-springboot-demo
template:
metadata:
labels:
app: arms-springboot-demo
armsPilotAutoEnable: "on"
armsPilotCreateAppName: "arms-k8s-demo"
one-agent.jdk.version: "OpenJDK11"
spec:
containers:
- resources:
limits:
cpu: 0.5
image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
imagePullPolicy: Always
name: arms-springboot-demo
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"
---
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
name: arms-springboot-demo-subcomponent
namespace: arms-demo
labels:
app: arms-springboot-demo-subcomponent
spec:
replicas: 2
selector:
matchLabels:
app: arms-springboot-demo-subcomponent
template:
metadata:
labels:
app: arms-springboot-demo-subcomponent
armsPilotAutoEnable: "on"
armsPilotCreateAppName: "arms-k8s-demo-subcomponent"
one-agent.jdk.version: "OpenJDK11"
spec:
containers:
- resources:
limits:
cpu: 0.5
image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-springboot-demo:v0.1
imagePullPolicy: Always
name: arms-springboot-demo-subcomponent
env:
- name: SELF_INVOKE_SWITCH
value: "false"
- name: MYSQL_SERVICE_HOST
value: "arms-demo-mysql"
- name: MYSQL_SERVICE_PORT
value: "3306"
---
apiVersion: v1
kind: Service
metadata:
labels:
name: arms-demo-component
name: arms-demo-component
namespace: arms-demo
spec:
ports:
# the port that this service should serve on
- name: arms-demo-component-svc
port: 6666
targetPort: 8888
# label keys and values that must match in order to receive traffic for this service
selector:
app: arms-springboot-demo-subcomponent
---
apiVersion: apps/v1 # for versions before 1.8.0 use apps/v1beta1
kind: Deployment
metadata:
name: arms-demo-mysql
namespace: arms-demo
labels:
app: mysql
spec:
replicas: 1
selector:
matchLabels:
app: mysql
template:
metadata:
labels:
app: mysql
spec:
containers:
- resources:
limits:
cpu: 0.5
image: registry.cn-hangzhou.aliyuncs.com/arms-docker-repo/arms-demo-mysql:v0.1
name: mysql
ports:
- containerPort: 3306
name: mysql
---
apiVersion: v1
kind: Service
metadata:
labels:
name: mysql
name: arms-demo-mysql
namespace: arms-demo
spec:
ports:
# the port that this service should serve on
- name: arms-mysql-svc
port: 3306
targetPort: 3306
# label keys and values that must match in order to receive traffic for this service
selector:
app: mysql
---
执行结果
在无状态页面上,目标应用的操作列将出现ARMS控制台按钮。

卸载探针
为集群下所有应用卸载探针
- 登录容器服务管理控制台。
- 在左侧导航栏单击集群,然后在集群列表页面单击目标集群名称。
- 在左侧导航栏选择,然后在右上角通过关键字搜索ack-onepilot。
- 在ack-onepilot卡片上单击卸载。
- 在弹出的对话框中单击确定。
- 重启您的业务Pod。
为集群下指定应用卸载探针
- 在容器服务管理控制台左侧导航栏单击集群,在集群列表页面上的目标集群右侧操作列单击应用管理。
- 在无状态页面目标应用右侧选择。
- 在编辑YAML对话框中删除上文安装探针步骤三中添加的
labels
,然后单击更新。 - 重启Pod。
后续步骤
完成上述步骤后,您就为部署在容器服务Kubernetes版中的应用开启了ARMS应用监控。在目标应用的操作列中单击ARMS控制台,将进入ARMS控制台的应用监控页面。更多信息,请参见应用总览。