您只需安装ARMS应用监控组件(探针)ack-onepilot,即可监控部署在容器服务Kubernetes版中的Java应用,并查看应用拓扑、接口调用、异常事务和慢事务等相关监控数据。本文介绍如何为容器服务Kubernetes版Java应用安装探针。
前提条件
- 创建Kubernetes集群。您可按需选择创建Kubernetes专有版集群、创建Kubernetes托管版集群或创建ASK集群。
- 如果需监控ACK集群应用,请将Helm升级至v3版本。具体操作,请参见【组件升级】Helm V2 Tiller升级公告。
- 创建命名空间,具体操作,请参见管理命名空间与配额。本文示例中的命名空间名称为arms-demo。
- 检查您的JDK版本。ARMS应用监控支持的JDK版本如下:
- JDK 1.7.0+
- JDK 1.8.0_25+说明
- Kubernetes集群应用部署建议:JDK 1.8.0_191+。
- 如果JDK版本为1.8.0_25或者1.8.0_31,可能会出现无法安装探针的情况,请升级至1.8.X最新版本。
- JDK 11.0.8+
- JDK 17
说明 JDK 1.8及以下版本、JDK 11和JDK 17版本对应的探针安装包不同,请根据不同的JDK版本下载对应的探针安装包或调整应用监控组件ack-onepilot的配置。
步骤一:安装ARMS应用监控组件
- 登录容器服务管理控制台。
- 在左侧导航栏选择应用目录页签通过关键字搜索ack-onepilot,然后单击目标卡片。 ,在右侧
- 在ack-onepilot页面上,单击右上角的一键部署。
- 在创建面板中选择安装组件的集群、命名空间,并输入组件发布名称,然后单击下一步。
- 单击确定。
步骤二:授予ARMS资源的访问权限
- 如果需监控ASK(容器服务Serverless版)或对接了ECI的集群应用,请在云资源访问授权页面完成授权,然后重启ack-onepilot组件下的所有Pod。
- 如果需监控ACK集群应用,但ACK集群中不存在ARMS Addon Token,请执行以下操作手动为集群授予ARMS资源的访问权限。说明
查看是否存在ARMS Addon Token的操作,请参见查看集群是否存在ARMS Addon Token。
集群存在ARMS Addon Token时,ARMS会进行免密授权。Kubernetes托管版集群默认存在ARMS Addon Token,但对于部分早期创建的Kubernetes托管版集群,可能会存在没有ARMS Addon Token的情况,因此,对于Kubernetes托管版集群,建议首先检查ARMS Addon Token是否存在。若不存在,需进行手动授权。
- 登录容器服务管理控制台。
- 在左侧导航栏选择集群,在集群列表页面,单击目标集群名称或其右侧操作列的详情。
- 在目标集群的集群信息页面上单击集群资源页签,然后单击Worker RAM角色右侧的链接。
- 在访问控制RAM控制台的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>替换为您的应用名称。 one-agent.jdk.version: "OpenJDK11" #如果应用的JDK版本是JDK 11,则需要配置此参数。 one-agent.jdk.version: "OpenJDK17" #如果应用的JDK版本是JDK 17,则需要配置此参数。 armsSecAutoEnable: "on" #如果需要接入应用安全,则需要配置此参数。
创建一个无状态(Deployment)应用并开启ARMS应用监控的完整YAML示例模板如下:
展开查看完整示例YAML文件(Java)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 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控制台按钮。

卸载探针
为集群下所有应用卸载探针
- 登录容器服务管理控制台。
- 在左侧导航栏单击集群,在集群列表页面上的目标集群右侧操作列单击应用管理。
- 在左侧导航栏选择 。
- 在Helm页面,ARMS Agent对应的发布名称ack-onepilot右侧操作列,单击删除。
- 在删除应用对话框单击确定。
- 重启您的业务Pod。
为集群下指定应用卸载探针
- 在容器服务Kubernetes版控制台左侧导航栏单击集群,在集群列表页面上的目标集群右侧操作列单击应用管理。
- 在无状态页面目标应用右侧选择 。
- 在编辑YAML对话框中删除上文安装探针步骤三中添加的labels,然后单击更新。
labels: armsPilotAutoEnable: "on" armsPilotCreateAppName: "<your-deployment-name>" #请将<your-deployment-name>替换为您的应用名称。 one-agent.jdk.version: "OpenJDK11" #如果应用的JDK版本是JDK 11,则需要配置此参数。 one-agent.jdk.version: "OpenJDK17" #如果应用的JDK版本是JDK 17,则需要配置此参数。 armsSecAutoEnable: "on" #如果需要接入应用安全,则需要配置此参数。
- 重启Pod。
常见问题
如何更改应用名称
如需更改应用名称,您需要修改Deployment内的armsPilotCreateAppName参数。具体操作,请参见部署在容器服务K8s集群中的Java应用如何更改应用名称。
为什么Agent安装失败?
可能原因:目标集群中不存在ARMS Addon Token。
解决方案:查看集群是否存在ARMS Addon Token并为集群授予ARMS资源的访问权限。具体操作,请参见容器服务K8s集群中的应用安装Agent失败怎么处理?。
如何跨区域上报数据?
在容器集群arms-pilot Namespace下的Deployment中添加ARMS_REPORT_REGION环境变量,值为ARMS所支持的RegionId(例如cn-hangzhou、cn-beijing),然后重启现有应用。更多信息,请参见ACK集群如何跨区域上报数据?。