全部產品
Search
文件中心

Container Service for Kubernetes:Java應用監控

更新時間:Nov 02, 2024

對於部署在ACK叢集中的Java應用,您只需安裝ARMS應用監控組件ack-onepilot,即可實現自動探索應用拓撲、自動產生3D拓撲、自動探索並監控介面、捕獲異常事務和慢事務等監控功能,大幅提升線上問題診斷的效率。

背景資訊

應用即時監控服務ARMS(Application Real-Time Monitoring Service)是一款阿里雲應用效能管理(APM)類監控產品。對於部署在Container Service for Kubernetes (ACK)中的Java應用,只需安裝並授權ARMS應用監控組件ack-onepilot,無需修改任何代碼,即可實現對Java應用的全方位監控。這使得您可以快速定位出錯介面和慢介面、重現調用參數、檢測記憶體流失、發現系統瓶頸,從而大幅提升線上問題診斷的效率。ARMS應用監控的詳細資料請參見什麼是應用監控

前提條件

  • 已建立命名空間。具體操作,請參見管理命名空間與配額。本文樣本中的命名空間為arms-demo

  • 檢查您的JDK版本。ARMS應用監控支援的JDK版本如下:

    • JDK 1.7.0+

      重要

      ARMS應用監控將於3.0.X探針版本終止支援Java 7,如果您還在使用Java 7,請儘快升級Java版本。更多資訊,請參見【產品變更】ARMS應用監控終止對Java 7的支援

    • 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

  • 開通ARMS

步驟一:安裝ARMS應用監控組件

重要

ACK舊版應用監控組件arms-pilot已不再維護,您可以安裝升級後的ack-onepilot組件用於監控您的應用,ack-onepilot完全相容arms-pilot,您無需修改應用配置即可無縫接入ack-onepilot。更多資訊,請參見如何安裝ack-onepilot和卸載arms-pilot

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理

  3. 組件管理頁面,搜尋索引鍵ack-onepilot

  4. ack-onepilot卡片上單擊安裝,並在彈出的頁面中可以配置相關的參數,建議使用預設值,然後單擊確定

    說明

    ack-onepilot組件預設支援1000個Pod規模,叢集Pod每超過1000個,ack-onepilot資源對應的CPU請增加0.5核、記憶體請增加512MB。

    安裝完成後,您可以在組件管理頁面升級、配置或卸載ack-onepilot組件。

步驟二:授予ARMS資源的存取權限

  • 如需監控ACK叢集應用,但ACK叢集中不存在addon.arms.token,請執行以下操作手動為叢集授予ARMS資源的存取權限。如果已經存在addon.arms.token,則無需執行授權操作。

    說明

    當ACK叢集中存在addon.arms.token時,ARMS能夠自動完成免密授權過程。通常情況下,ACK託管叢集預設配備了addon.arms.token。然而,對於一些較早建立的ACK託管叢集來說,可能存在缺少addon.arms.token的情形。

    1. 檢查addon.arms.token是否存在。

      查看叢集是否存在addon.arms.token

      1. 登入Container Service管理主控台,在左側導覽列選擇叢集

      2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇組態管理 > 保密字典

      3. 保密字典頁面,選擇命名空間kube-system,查看addon.arms.token是否存在。

    2. 如果addon.arms.token存在,無需執行後續授權操作。否則,請執行以下操作手動為叢集授予ARMS資源的存取權限。

      1. 登入Container Service管理主控台,在左側導覽列選擇叢集

      2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇叢集資訊

      3. 基本資料頁簽下,單擊叢集資源地區內的Worker RAM角色右側的連結。

      4. 角色頁面的許可權管理頁簽上,單擊新增授權

      5. 選擇許可權為AliyunARMSFullAccess,然後單擊確定

  • 如需監控對接了ECI的ACK託管叢集應用,請在雲資源訪問授權頁面完成授權,然後重啟ack-onepilot組件下的所有Pod。

步驟三:為Java應用開啟ARMS應用監控

如需在建立新應用的同時開啟ARMS應用監控,請完成以下操作。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇工作負載 > 無狀態

  3. 無狀態頁面右上方單擊使用YAML建立資源

  4. 選擇樣本模板,並在模板(YAML格式)中將以下labels添加到spec.template.metadata層級下。

    labels:
      armsPilotAutoEnable: "on"
      armsPilotCreateAppName: "<your-deployment-name>"    #請將<your-deployment-name>替換為您的應用程式名稱。
      armsSecAutoEnable: "on"    #如果需要接入應用安全,則需要配置此參數。
    說明

    YAML Example

    建立一個無狀態(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控制台按鈕。

ARMS Console Button

後續步驟

完成上述步驟後,您就為部署在Container ServiceKubernetes版中的應用開啟了ARMS應用監控。在目標應用的操作列中單擊ARMS控制台,將進入ARMS控制台的應用監控頁面。更多資訊,請參見應用總覽image.png

常見問題