藉助ARMS應用監控,您可以對通用Kubernetes環境的Golang應用進行應用拓撲、介面調用、異常事務和慢事務監控、SQL分析等監控。本文協助您將通用Kubernetes環境中的應用接入ARMS應用監控。
如果您使用的Kubernetes叢集由Container ServiceACK提供,本文不適用,ACK叢集接入ARMS的操作請參見Container Service ACK 和容器計算服務 ACS 通過 ack-onepilot 組件安裝 Go 探針。
前提條件
-
請確保您的Kubernetes叢集的kube-apiserver組件介面版本在1.10及以上。
-
如果您的Kubernetes叢集沒有部署在阿里雲,請確保叢集連通公網,或者通過雲企業網等方式打通阿里雲VPC和叢集之間的串連。
-
確保您的Go應用版本在1.18及以上。
步驟一:編譯Golang應用鏡像
(可選)若專案在編譯時間包含vendor目錄,請在
go build後添加-mod=vendor。使用
wget命令下載編譯工具instgo,請根據編譯環境和編譯機器所在地區,選擇對應的下載地址。需要注意,instgo 在編譯時間會觸發自動更新,請將 instgo 儲存在編譯使用者具有修改許可權的目錄下。
說明Instgo 是 ARMS 提供的 Golang 應用編譯工具,使用 instgo 編譯您的 Golang 專案後,ARMS 即可開始監控您的 Golang 應用。
各地區下載的編譯工具是相同的,如果您的公網環境可以訪問OSS地址,可以直接使用對應作業系統和架構的杭州公網地址擷取編譯工具。
為編譯工具賦予可執行許可權。
Linux/Mac
# 賦予可執行許可權 chmod +x instgoWindows
Windows中無需賦予可執行許可權。
(可選)配置LicenseKey或Uid作為編譯參數。
重要如果您跳過該步,instgo會預設為您安裝最新版本的ARMS探針。
您可以通過DescribeTraceLicenseKey OpenAPI擷取LicenseKey。
在DescribeTraceLicenseKey文檔頁面單擊調試,選擇地區後單擊發起調用即可擷取LicenseKey。

使用set命令配置uid或者licensekey作為編譯參數。
instgo set --uid={YourAliyunUid} //需要使用instgo 1.4.5及以上版本,uid為阿里雲主帳號uid instgo set --licenseKey=${YourLicenseKey} // uid和licensekey只需要配置一個
將instgo作為首碼添加到您原有的編譯命令前並執行編譯。
instgo go build {arg1} {arg2} {arg3}如果您使用go install編譯專案,也可以直接將instgo作為首碼添加到您原有的編譯命令前並執行編譯。
使用上一步編譯的二進位檔案構建鏡像。
步驟二:安裝Helm3
步驟三:安裝探針
ARMS應用監控目前僅支援無狀態(Deployment)和有狀態(StatefulSet)兩種類型的應用接入,兩種類型的應用接入方法相同。此處以將Kubernetes環境中的無狀態(Deployment)類型的應用接入ARMS應用監控為例。
-
執行以下
wget命令下載ack-onepilot安裝包。wget 'https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/ack-onepilot-5.1.1.tgz' -
執行以下命令解壓ack-onepilot安裝包。
tar xvf ack-onepilot-5.1.1.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許可權。
-
uid:阿里雲帳號(主帳號)ID。將滑鼠懸浮於阿里雲控制台右上方的頭像上可以擷取。 -
region_id:阿里雲地區ID,應用監控支援的地區,請參見開服地區。
-
-
執行以下命令安裝ack-onepilot。
請在ack-onepilot安裝包外執行此命令。
helm3 upgrade --install ack-onepilot ack-onepilot --namespace ack-onepilot --create-namespace
步驟四:修改應用的YAML檔案
-
執行以下命令查看目標無狀態(Deployment)應用的YAML檔案。
kubectl get deployment {deployment名稱} -o yaml說明若您不清楚
{deployment名稱},請先執行以下命令查看所有無狀態(Deployment)應用,在執行結果中找到目標無狀態(Deployment)應用,再查看目標無狀態(Deployment)應用的YAML檔案。kubectl get deployments --all-namespaces -
編輯目標無狀態(Deployment)應用的YAML檔案。
kubectl edit deployment {Deployment名稱} -o yaml -
在YAML檔案中的
spec.template.metadata層級下添加以下內容。labels: aliyun.com/app-language: "golang" # Go應用必填,標明此應用是Go應用。 armsPilotAutoEnable: "on" armsPilotCreateAppName: "<your-deployment-name>" #請將<your-deployment-name>替換為您的應用程式名稱。如果您需要在K8s環境中建立一個新的無狀態(Deployment)應用並接入ARMS,則應用的完整YAML檔案如下:
執行結果
約一分鐘後,若Golang應用出現在ARMS控制台的頁面中且有資料上報,則說明接入成功。
