您只需安裝ARMS應用監控組件ack-onepilot,即可監控部署在容器服務Kubernetes版中的Java應用,并查看應用拓撲、接口調用、異常事務和慢事務等相關監控數據。本文介紹如何為容器服務Kubernetes版Java應用安裝探針。
前提條件
步驟一:安裝ARMS探針接入助手(ack-onepilot)
ARMS探針接入助手(ack-onepilot)是用于接入各語言探針的重要組件,可以幫助ARMS用戶在容器環境中自動準備好ARMS探針包并構建好探針的上報環境。ARMS探針接入助手(ack-onepilot)的基本原理請參見ack-onepilot組件基本原理說明。
ACK舊版應用監控組件arms-pilot已不再維護,您可以安裝升級后的ack-onepilot組件用于監控您的應用,ack-onepilot完全兼容arms-pilot,您無需修改應用配置即可無縫接入ack-onepilot。更多信息,請參見如何安裝ack-onepilot和卸載arms-pilot。
登錄容器服務管理控制臺。
在左側導航欄單擊集群,然后在集群列表頁面單擊目標集群名稱。
在左側導航欄選擇 ,然后在右上角通過關鍵字搜索ack-onepilot。
在ack-onepilot卡片上單擊安裝。
說明ack-onepilot組件默認支持1000個pod規模,集群pod每超過1000個,ack-onepilot資源對應的CPU請增加0.5核、內存請增加512 MB。
在彈出的頁面中可以配置相關的參數,建議使用默認值,單擊確定。
說明安裝完成后,您可以在組件管理頁面升級、配置或卸載ack-onepilot組件。
步驟二:授予ARMS資源的訪問權限
如果需監控ASK(容器服務Serverless版)或對接了ECI的集群應用,請在云資源訪問授權頁面完成授權,然后重啟ack-onepilot組件下的所有Pod。
如果需監控ACK集群應用,但ACK集群中不存在ARMS Addon Token,請執行以下操作手動為集群授予ARMS資源的訪問權限。如果已經存在ARMS Addon Token,請跳轉至步驟三。
登錄容器服務管理控制臺,在集群列表頁面,單擊目標集群名稱進入集群詳情頁。
在左側導航欄選擇addon.arms.token是否存在。
,然后在頂部選擇命名空間為kube-system,查看
說明集群存在ARMS Addon Token時,ARMS會進行免密授權。Kubernetes托管版集群默認存在ARMS Addon Token,但對于部分早期創建的Kubernetes托管版集群,可能會存在沒有ARMS Addon Token的情況,因此,對于Kubernetes托管版集群,建議首先檢查ARMS Addon Token是否存在。若不存在,需進行手動授權。
登錄容器服務管理控制臺,在集群列表頁面單擊目標集群名稱。
在
頁簽的集群資源區域,單擊Worker RAM角色右側的鏈接。在權限管理頁簽單擊新增授權。
在新增授權面板添加以下兩個權限策略,然后單擊確認新增授權。
AliyunTracingAnalysisFullAccess:可觀測鏈路 OpenTelemetry 版的完整權限。
AliyunARMSFullAccess:ARMS的完整權限。
如果需要監控專有版集群和注冊集群應用,請確認對應的阿里云賬號已包含AliyunARMSFullAccess和AliyunSTSAssumeRoleAccess權限。添加權限的操作,請參見為RAM用戶授權。
安裝ack-onepilot組件后,還需要在ack-onepilot中填寫有ARMS權限的阿里云賬號AK/SK。
在左側導航欄選擇
頁面,單擊ack-onepilot組件右側的更新。將
accessKey
和accessKeySecret
替換為當前賬號的AccessKey,然后單擊確定。說明獲取AccessKey的操作,請參見創建AccessKey。
重啟應用Deployment。
步驟三:為Java應用開啟ARMS應用監控
如需在創建新應用的同時開啟ARMS應用監控,請完成以下操作。
在容器服務管理控制臺左側導航欄單擊集群,在集群列表頁面上的目標集群右側操作列單擊應用管理。
在無狀態頁面單擊使用YAML創建資源。
選擇示例模板,并在模板(YAML格式)中將以下
labels
添加到spec.template.metadata層級下。labels: armsPilotAutoEnable: "on" armsPilotCreateAppName: "<your-deployment-name>" #請將<your-deployment-name>替換為您的應用名稱。 armsSecAutoEnable: "on" #如果需要接入應用安全,則需要配置此參數。
創建一個無狀態(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" 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" 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控制臺按鈕。