Java應(yīng)用監(jiān)控
對于部署在ACK集群中的Java應(yīng)用,您只需安裝ARMS應(yīng)用監(jiān)控組件ack-onepilot,即可實現(xiàn)自動發(fā)現(xiàn)應(yīng)用拓?fù)洹⒆詣由?D拓?fù)洹⒆詣影l(fā)現(xiàn)并監(jiān)控接口、捕獲異常事務(wù)和慢事務(wù)等監(jiān)控功能,大幅提升線上問題診斷的效率。
背景信息
應(yīng)用實時監(jiān)控服務(wù)ARMS(Application Real-Time Monitoring Service)是一款阿里云應(yīng)用性能管理(APM)類監(jiān)控產(chǎn)品。對于部署在容器服務(wù) Kubernetes 版 ACK(Container Service for Kubernetes)中的Java應(yīng)用,只需安裝并授權(quán)ARMS應(yīng)用監(jiān)控組件ack-onepilot,無需修改任何代碼,即可實現(xiàn)對Java應(yīng)用的全方位監(jiān)控。這使得您可以快速定位出錯接口和慢接口、重現(xiàn)調(diào)用參數(shù)、檢測內(nèi)存泄漏、發(fā)現(xiàn)系統(tǒng)瓶頸,從而大幅提升線上問題診斷的效率。ARMS應(yīng)用監(jiān)控的詳細(xì)信息請參見什么是應(yīng)用監(jiān)控。
前提條件
已創(chuàng)建命名空間。具體操作,請參見管理命名空間與配額。本文示例中的命名空間為
arms-demo
。檢查您的JDK版本。ARMS應(yīng)用監(jiān)控支持的JDK版本如下:
JDK 1.7.0+
重要ARMS應(yīng)用監(jiān)控將于3.0.X探針版本終止支持Java 7,如果您還在使用Java 7,請盡快升級Java版本。更多信息,請參見【產(chǎn)品變更】ARMS應(yīng)用監(jiān)控終止對Java 7的支持。
JDK 1.8.0_25+
說明Kubernetes集群應(yīng)用部署建議:JDK 1.8.0_191+。
如果JDK版本為1.8.0_25或者1.8.0_31,可能會出現(xiàn)無法安裝探針的情況,請升級至1.8.X最新版本。
JDK 11.0.8+
JDK 17
已開通ARMS。
步驟一:安裝ARMS應(yīng)用監(jiān)控組件
ACK舊版應(yīng)用監(jiān)控組件arms-pilot已不再維護(hù),您可以安裝升級后的ack-onepilot組件用于監(jiān)控您的應(yīng)用,ack-onepilot完全兼容arms-pilot,您無需修改應(yīng)用配置即可無縫接入ack-onepilot。更多信息,請參見如何安裝ack-onepilot和卸載arms-pilot。
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在組件管理頁面,搜索關(guān)鍵字ack-onepilot。
在ack-onepilot卡片上單擊安裝,并在彈出的頁面中可以配置相關(guān)的參數(shù),建議使用默認(rèn)值,然后單擊確定。
說明ack-onepilot組件默認(rèn)支持1000個Pod規(guī)模,集群Pod每超過1000個,ack-onepilot資源對應(yīng)的CPU請增加0.5核、內(nèi)存請增加512MB。
安裝完成后,您可以在組件管理頁面升級、配置或卸載ack-onepilot組件。
步驟二:授予ARMS資源的訪問權(quán)限
如需監(jiān)控ACK集群應(yīng)用,但ACK集群中不存在
addon.arms.token
,請執(zhí)行以下操作手動為集群授予ARMS資源的訪問權(quán)限。如果已經(jīng)存在addon.arms.token
,則無需執(zhí)行授權(quán)操作。說明當(dāng)ACK集群中存在
addon.arms.token
時,ARMS能夠自動完成免密授權(quán)過程。通常情況下,ACK托管集群默認(rèn)配備了addon.arms.token
。然而,對于一些較早創(chuàng)建的ACK托管集群來說,可能存在缺少addon.arms.token
的情形。檢查
addon.arms.token
是否存在。登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在保密字典頁面,選擇命名空間為kube-system,查看
addon.arms.token
是否存在。
如果
addon.arms.token
存在,無需執(zhí)行后續(xù)授權(quán)操作。否則,請執(zhí)行以下操作手動為集群授予ARMS資源的訪問權(quán)限。登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇集群信息。
在基本信息頁簽下,單擊集群資源區(qū)域內(nèi)的Worker RAM角色右側(cè)的鏈接。
在角色頁面的權(quán)限管理頁簽上,單擊新增授權(quán)。
選擇權(quán)限為AliyunARMSFullAccess,然后單擊確定。
如需監(jiān)控對接了ECI的ACK托管集群應(yīng)用,請在云資源訪問授權(quán)頁面完成授權(quán),然后重啟ack-onepilot組件下的所有Pod。
步驟三:為Java應(yīng)用開啟ARMS應(yīng)用監(jiān)控
如需在創(chuàng)建新應(yīng)用的同時開啟ARMS應(yīng)用監(jiān)控,請完成以下操作。
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在無狀態(tài)頁面右上角單擊使用YAML創(chuàng)建資源。
選擇示例模板,并在模板(YAML格式)中將以下
labels
添加到spec.template.metadata層級下。labels: armsPilotAutoEnable: "on" armsPilotCreateAppName: "<your-deployment-name>" #請將<your-deployment-name>替換為您的應(yīng)用名稱。 armsSecAutoEnable: "on" #如果需要接入應(yīng)用安全,則需要配置此參數(shù)。
說明應(yīng)用安全詳情,請參見什么是應(yīng)用安全。
應(yīng)用安全計費信息,請參見計費說明。
創(chuàng)建一個無狀態(tài)(Deployment)應(yīng)用并開啟ARMS應(yīng)用監(jiān)控的完整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 ---
執(zhí)行結(jié)果
在無狀態(tài)頁面上,目標(biāo)應(yīng)用的操作列將出現(xiàn)ARMS控制臺按鈕。
后續(xù)步驟
完成上述步驟后,您就為部署在容器服務(wù)Kubernetes版中的應(yīng)用開啟了ARMS應(yīng)用監(jiān)控。在目標(biāo)應(yīng)用的操作列中單擊ARMS控制臺,將進(jìn)入ARMS控制臺的應(yīng)用監(jiān)控頁面。更多信息,請參見應(yīng)用總覽。