借助ARMS應用監控,您可以對通用Kubernetes環境的應用進行應用拓撲、接口調用、異常事務和慢事務監控、SQL分析等監控。本文將幫助您將通用Kubernetes環境中的Java應用接入ARMS應用監控。
如果您使用的Kubernetes集群由容器服務ACK提供,本文不適用,ACK集群接入ARMS的操作請參見容器服務ACK環境自動安裝探針。
前提條件
請確保您的Kubernetes集群版本為1.18或以上。
如果您的Kubernetes集群沒有部署在阿里云,請確保集群能夠連通公網,或者通過云企業網等方式打通阿里云VPC和集群之間的連接。
檢查您的JDK版本。具體要求,請參見支持的JDK版本。
進程最大堆內存需大于256 MB。
(推薦)方式一:通過ACK注冊集群接入ARMS
使用ACK注冊集群的優勢:
更高效的運維支持。
獲得更多容器服務ACK集群擴展能力,包括:監控、日志、備份恢復、安全、云上彈性資源等。更多信息,請參見注冊集群概述。
將Kubernetes集群接入ACK One。具體操作,請參見創建注冊集群。
為注冊集群安裝ack-onepilot組件。具體操作,請參見將應用實時監控服務ARMS接入注冊集群。
方式二:直接接入ARMS
該方式未使用ACK注冊集群,接入后,容器相關的信息(CPU、內存、Disk、網絡)無法關聯展示。即在應用實例頁面僅展示ARMS自采集版的容器環境數據,且后續無法通過接入可觀測監控 Prometheus 版查看Prometheus探針獲取的容器數據,更多信息,請參見Java應用實例監控。
步驟1:安裝Helm3
步驟2:安裝探針
ARMS應用監控目前僅支持無狀態(Deployment)和有狀態(StatefulSet)兩種類型的應用接入,兩種類型的應用接入方法相同。此處以將Kubernetes環境中的無狀態(Deployment)類型的應用接入ARMS應用監控為例。
執行以下
wget
命令下載ack-onepilot安裝包。wget 'https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/ack-onepilot-3.3.3.tgz'
執行以下命令解壓ack-onepilot安裝包。
tar xvf ack-onepilot-3.3.3.tgz
編輯安裝包下的values.yaml文件,根據實際情況修改以下參數,然后保存。
registry: registry-__ACK_REGION_ID__.ack.aliyuncs.com/acs/ cluster_id: __ACK_CLUSTER_ID__ accessKey: __ACCESSKEY__ accessKeySecret: __ACCESSKEY_SECRET__ uid: "__ACK_UID__" region_id: __ACK_REGION_ID__
registry
:ack-onepilot鏡像地址。cluster_id
:自定義Kubernetes集群ID,集群的唯一標識。建議格式為<uid>-<clusterid>
。accessKey
和accessKeySecret
:阿里云賬號的AccessKey ID和AccessKey Secret。獲取方法,請參見創建AccessKey。重要請確認對應的阿里云賬號已包含AliyunARMSFullAccess和AliyunSTSAssumeRoleAccess權限。
如果當前操作的是RAM用戶,請確認RAM用戶也包含AliyunARMSFullAccess和 AliyunSTSAssumeRoleAccess權限,具體操作,請參見為RAM用戶授權。
uid
:阿里云賬號ID。將鼠標懸浮于阿里云控制臺右上角的頭像上可以獲取。region_id
:阿里云地域ID,應用監控支持的地域,請參見開服地域。
說明如果目標集群是邊緣集群,請通過添加nodeSelector注解將ack-onepilot組件調度到云上,以保證ack-onepilot的正常工作。
kind: Deployment apiVersion: apps/v1 metadata: name: xxx namespace: xxx spec: template: spec: nodeSelector: # 可替換成實際的node selector alibabacloud.com/is-edge-worker: "false"
執行以下命令安裝ack-onepilot。
請在ack-onepilot安裝包外執行此命令。
helm3 upgrade --install ack-onepilot ack-onepilot --namespace ack-onepilot --create-namespace
步驟3:修改應用的YAML文件
執行以下命令查看目標無狀態(Deployment)應用的YAML文件。
kubectl get deployment {deployment名稱} -o yaml
說明若您不清楚
{deployment名稱}
,請先執行以下命令查看所有無狀態(Deployment)應用,在執行結果中找到目標無狀態(Deployment)應用,再查看目標無狀態(Deployment)應用的YAML文件。kubectl get deployments --all-namespace
啟動編輯目標無狀態(Deployment)應用的YAML文件。
kubectl edit deployment {Deployment名稱} -o yaml
在YAML文件中的spec.template.metadata層級下添加以下內容。
labels: armsPilotAutoEnable: "on" armsPilotCreateAppName: "<your-deployment-name>" #請將<your-deployment-name>替換為您的應用名稱。 armsSecAutoEnable: "on" #如果需要接入應用安全,則需要配置此參數。
如果您需要在K8s環境中創建一個新的無狀態(Deployment)應用并接入ARMS,則應用的完整YAML文件如下:
apiVersion: apps/v1beta1 # for versions before 1.8.0 use apps/v1beta1 kind: Deployment metadata: name: arms-springboot-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: MYSQL_SERVICE_HOST value: "arms-demo-mysql" - name: MYSQL_SERVICE_PORT value: "3306" --- apiVersion: apps/v1beta1 kind: Deployment metadata: name: arms-demo-mysql 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 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 ---
保存配置后,應用將自動重啟,以上配置生效。
2~5分鐘后,若您的應用出現在ARMS控制臺的 頁面中且有數據上報,則說明接入成功。