借助ARMS应用监控,您可以对通用Kubernetes环境的Golang应用进行应用拓扑、接口调用、异常事务和慢事务监控、SQL分析等监控。本文帮助您将通用Kubernetes环境中的应用接入ARMS应用监控。
如果您使用的Kubernetes集群由容器服务ACK提供,本文不适用,ACK集群接入ARMS的操作请参见容器服务 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控制台的页面中且有数据上报,则说明接入成功。
