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

前提条件

安装 ARMS 应用监控组件

首先需要安装 ARMS 应用监控组件 ack-arms-pilot。

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

为容器服务 Kubernetes 版授权

接下来要为容器服务 Kubernetes 版授予 ARMS 资源的访问权限。

  1. 使用主账号登录容器服务 Kubernetes 版控制台
  2. 在左侧导航栏选择集群 > 集群,在集群列表页面上的目标集群右侧操作列单击管理

    Manage Cluster
  3. 在目标集群的基本信息页面上,单击集群资源区域的 Worker RAM 角色链接。

    Worker RAM Link
  4. 在 RAM 访问控制控制台的 RAM 角色管理页面上,单击权限管理页签上的目标权限策略名称链接。
  5. 策略内容页签上单击修改策略内容,并在右侧的修改策略内容面板将以下内容添加到策略内容中,最后单击确定
    {
       "Action": "arms:*",
       "Resource": "*",
       "Effect": "Allow"
    }

    Modify RAM Authorization

为 Java 应用开启 ARMS 应用监控

以下步骤分别对应创建新应用和已有应用这两种情况。

如需在创建新应用的同时开启 ARMS 应用监控,请按以下步骤操作:

  1. 容器服务 Kubernetes 版控制台左侧导航栏选择应用 > 无状态
  2. 无状态(Deployment)页面右上角单击使用模板创建
  3. 使用模板创建页面上选择集群命名空间示例模板,并在模板(YAML 格式)中将以下 annotations 添加到 spec > template > metadata 层级下。
    说明 请将 <your-deployment-name> 替换为您的应用名称。
    annotations:
      armsPilotAutoEnable: "on"
      armsPilotCreateAppName: "<your-deployment-name>"                                

    YAML Example

    创建一个无状态(Deployment)应用并开启 ARMS 应用监控的完整 YAML 示例模板如下:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: arms-demo
    ---
    apiVersion: apps/v1beta1 # 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:
          annotations:
            armsPilotAutoEnable: "on"
            armsPilotCreateAppName: "arms-k8s-demo"
          labels:
            app: arms-springboot-demo
        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/v1beta1 # 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:
          annotations:
            armsPilotAutoEnable: "on"
            armsPilotCreateAppName: "arms-k8s-demo-subcomponent"
          labels:
            app: arms-springboot-demo-subcomponent
        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/v1beta1 # 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 应用监控,请按以下步骤操作:

  1. 容器服务 Kubernetes 版控制台左侧导航栏选择应用 > 无状态应用 > 有状态
  2. 无状态(Deployment)有状态(StatefulSet)页面上,选择集群命名空间,并在目标应用右侧操作列中选择更多 > 查看 Yaml
    View YAML
  3. 编辑 YAML 对话框中将以下 annotations 添加到 spec > template > metadata 层级下,并单击更新
    说明 请将 <your-deployment-name> 替换为您的应用名称。
    annotations:
      armsPilotAutoEnable: "on"
      armsPilotCreateAppName: "<your-deployment-name>"                                

执行结果

无状态(Deployment)有状态(StatefulSet)页面上,目标应用的操作列将出现 ARMS 控制台按钮。


ARMS Console Button
说明操作列没有出现 ARMS 控制台按钮,请检查您是否已授权容器服务访问 ARMS 资源。

后续步骤

如果因为某些原因希望更改应用名称,例如忘记将示例应用名称 Java-Demo 修改为自定义名称,您只需修改 Deployment 内的 armsPilotCreateAppName 参数并重启 Pod,即可在不重启应用、不重装探针的情况下更改应用名称,详见部署在容器服务 K8s 集群中的 Java 应用