只需安装ARMS应用监控组件(探针),即可监控部署在容器服务Kubernetes版中的Java应用,并查看应用拓扑、接口调用、异常事务和慢事务等相关监控数据。本文介绍如何为容器服务Kubernetes版Java应用安装探针。

前提条件

步骤一:安装ARMS应用监控组件

安装ARMS应用监控组件ack-arms-pilot。

  1. 登录容器服务管理控制台
  2. 在左侧导航栏选择市场 > 应用目录,在右侧页面单击ack-arms-pilot
  3. 应用目录 - ack-arms-pilot页面上,在右侧的创建面板中选择前提条件中创建的集群,并单击创建

步骤二:为Java应用开启ARMS应用监控

如需在创建新应用的同时开启ARMS应用监控,请完成以下操作。
注意

使用ARMS应用监控组件arms-pilot创建ARMS应用时,若arms-pilot的镜像版本在v1.30及以上,并且目标集群存在ARMS Addon Token,ARMS会进行免密授权,否则会出现权限不足的报错。若不满足上述两个条件无法完成免密授权时,则需为容器服务Kubernetes版手动授予ARMS资源的访问权限。具体手动授权操作,请参见容器服务K8s集群中的应用安装Agent失败怎么处理?

目前除Kubernetes托管版集群和Serverless Kubernetes(ASK)集群外,其余集群类型均不支持ARMS Addon Token,需进行手动授权。对于部分Kubernetes托管版集群和Serverless Kubernetes(ASK)集群,可能仍会存在没有ARMS Addon Token的情况,因此,对于Kubernetes托管版集群和Serverless Kubernetes(ASK)集群,建议首先检查ARMS Addon Token是否存在。若不存在,仍需进行手动授权。

查看arms-pilot镜像版本和ARMS Addon Token的具体操作,请参见如何查看arms-pilot镜像版本?如何查看集群是否存在ARMS Addon Token?

  1. 容器服务Kubernetes版控制台左侧导航栏选择集群,在集群列表页面上的目标集群右侧操作列单击应用管理
  2. 无状态页面右上角单击使用YAML创建资源
  3. 使用YAML创建资源页面上选择示例模板,并在模板(YAML格式)中将以下labels添加到spec > template > metadata层级下。
    注意 以下labels内容要求arms-pilot的镜像版本在v1.51.0及以上。查看和升级arms-pilot镜像版本的具体操作,请参见如何查看arms-pilot镜像版本?如何升级arms-pilot镜像版本?
    labels:
      armsPilotAutoEnable: "on"
      armsPilotCreateAppName: "<your-deployment-name>"    //请将<your-deployment-name>替换为您的应用名称。
      one-agent.jdk.version: "OpenJDK11"    //如果应用的JDK版本是JDK11,则需要配置此参数。 
    YAML Example

    创建一个无状态(Deployment)应用并开启ARMS应用监控的完整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控制台按钮。

ARMS Console Button

卸载探针

  1. 登录容器服务管理控制台
  2. 在左侧导航栏单击集群,在集群列表页面上的目标集群右侧操作列单击应用管理
  3. 在左侧导航栏选择应用 > Helm
  4. Helm页面,ARMS Agent对应的发布名称arms-pilot右侧操作列,单击删除
  5. 删除应用对话框单击确定
  6. 重启您的业务Pod。

常见问题

如何更改应用名称?

如需更改应用名称,您需要修改Deployment内的armsPilotCreateAppName参数。具体操作,请参见部署在容器服务K8s集群中的Java应用如何更改应用名称

如何查看arms-pilot镜像版本?

  1. 登录容器服务管理控制台
  2. 集群列表页面,单击目标集群名称进入集群详情页。
  3. 在左侧导航栏选择工作负载 > 无状态
  4. 在顶部选择命名空间arms-pilot,查看arms-pilot-ack-arms-pilot的镜像版本。arms-pilot镜像版本

如何升级arms-pilot镜像版本?

  1. 登录容器服务管理控制台
  2. 集群列表页面,单击目标集群名称进入集群详情页。
  3. 在左侧导航栏选择应用 > Helm
  4. Helm页面单击arms-pilot右侧操作列的更新
  5. 更新发布对话框中选择最新版本的arms-pilot,然后单击更新
    说明 如果是首次升级arms-pilot,还需删除image参数右侧arms-pilot后的所有字段。例如此处需删除:v1.30-9bc40511-amd64
    升级arms-pilot版本

如何查看集群是否存在ARMS Addon Token?

  1. 登录容器服务管理控制台
  2. 集群列表页面,单击目标集群名称进入集群详情页。
  3. 在左侧导航栏选择配置管理 > 保密字典
  4. 在顶部选择命名空间kube-system,查看addon.arms.token是否存在。ARMS Addon Token

为什么Agent安装失败?

可能原因:arms-pilot的镜像版本在v1.30以下或目标集群中不存在ARMS Addon Token。
说明 查看arms-pilot镜像版本和ARMS Addon Token的具体操作,请参见如何查看arms-pilot镜像版本?如何查看集群是否存在ARMS Addon Token?

解决方案:为容器服务Kubernetes版授予ARMS资源的访问权限。具体操作,请参见容器服务K8s集群中的应用安装Agent失败怎么处理?

如何跨区域上报数据?

  1. 在容器集群arms-pilot Namespace下的Deployment中添加ARMS_REPORT_REGION环境变量,值为ARMS所支持的RegionId(例如cn-hangzhou、cn-beijing)。
  2. 重启现有应用或部署一个新的应用,完成跨区域上报。
    说明 当添加环境变量后,该集群下所有应用均会跨区域上报到步骤一中指定的地域。