全部产品
Search
文档中心

应用实时监控服务ARMS:通用Kubernetes环境自动安装Golang探针

更新时间:Oct 09, 2026

借助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应用镜像

使用 ARMS Go 应用监控时,仅需在编译时使用 instgo 工具,在原有的 go build 命令前添加 instgo 前缀即可完成探针注入。业务代码本身无需任何改动,也不需要额外集成 OpenTelemetry SDK。instgo 探针已基于 OpenTelemetry 标准实现自动化埋点,编译时自动在 AST 语法树分析阶段插入监控代码。

  1. (可选)若项目在编译时包含vendor目录,请在go build后添加-mod=vendor。

  2. 使用wget命令下载编译工具instgo,请根据编译环境和编译机器所在地域,选择对应的下载地址。

    需要注意,instgo 在编译时会触发自动更新,请将 instgo 保存在编译用户具有修改权限的目录下。

    说明
    • Instgo 是 ARMS 提供的 Golang 应用编译工具,使用 instgo 编译您的 Golang 项目后,ARMS 即可开始监控您的 Golang 应用。

    • 各地域下载的编译工具是相同的,如果您的公网环境可以访问OSS地址,可以直接使用对应操作系统和架构的杭州公网地址获取编译工具。

    展开查看对应的下载命令

    Linux(AMD64)

    公网地址

    wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-linux-amd64" -O instgo

    Linux(ARM64)

    公网地址

    wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-linux-arm64" -O instgo

    Mac(ARM64)

    公网地址

    wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-darwin-arm64" -O instgo

    Mac(AMD64)

    公网地址

    wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-darwin-amd64" -O instgo

    Windows(AMD64)

    公网地址

    wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-windows-amd64.exe" -O instgo.exe

  3. 为编译工具赋予可执行权限。

    Linux/Mac

    # 赋予可执行权限
    chmod +x instgo

    Windows

    Windows中无需赋予可执行权限。

  4. (可选)配置uid作为编译参数。

    重要

    如果您跳过该步,instgo会默认为您安装最新版本的ARMS探针。

    使用set命令配置uid或者licensekey作为编译参数。

    instgo set --uid={YourAliyunUid} //需要使用instgo 1.4.5及以上版本,uid为阿里云主账号uid
  5. 将instgo作为前缀添加到您原有的编译命令前并执行编译。

    instgo go build {arg1} {arg2} {arg3}

    如果您使用go install编译项目,也可以直接将instgo作为前缀添加到您原有的编译命令前并执行编译。

  6. 使用上一步编译的二进制文件构建镜像。

步骤二:安装Helm3

步骤三:安装探针

ARMS应用监控目前仅支持无状态(Deployment)和有状态(StatefulSet)两种类型的应用接入,两种类型的应用接入方法相同。此处以将Kubernetes环境中的无状态(Deployment)类型的应用接入ARMS应用监控为例。

  1. 执行以下wget命令下载ack-onepilot安装包。

     wget 'https://aliacs-app-catalog.oss-cn-hangzhou.aliyuncs.com/charts-incubator/ack-onepilot-5.1.1.tgz'
  2. 执行以下命令解压ack-onepilot安装包。

    tar xvf ack-onepilot-5.1.1.tgz                 
  3. 编辑安装包下的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,应用监控支持的地域,请参见开服地域。

  4. 执行以下命令安装ack-onepilot。

    请在ack-onepilot安装包外执行此命令。

    helm3 upgrade --install ack-onepilot ack-onepilot --namespace ack-onepilot --create-namespace

步骤四:修改应用的YAML文件

  1. 执行以下命令查看目标无状态(Deployment)应用的YAML文件。

    kubectl get deployment {deployment名称} -o yaml                            
    说明

    若您不清楚{deployment名称},请先执行以下命令查看所有无状态(Deployment)应用,在执行结果中找到目标无状态(Deployment)应用,再查看目标无状态(Deployment)应用的YAML文件。

    kubectl get deployments --all-namespaces                
  2. 编辑目标无状态(Deployment)应用的YAML文件。

    kubectl edit deployment {Deployment名称} -o yaml                        
  3. 在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文件如下:

    展开查看完整示例YAML文件(Golang)

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: otel-go-client
      name: otel-go-client
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: otel-go-client
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            aliyun.com/app-language: golang
            armsPilotAutoEnable: 'on'
            armsPilotCreateAppName: otel-go-client
            app: otel-go-client
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/private-mesh/hellob:otel-client-arms-go-test-0.0.1
              imagePullPolicy: Always
              name: client
              resources:
                requests:
                  cpu: 250m
                  memory: 300Mi
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    
    ---
    
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: otel-go-server
      name: otel-go-server
      namespace: default
    spec:
      progressDeadlineSeconds: 600
      replicas: 1
      revisionHistoryLimit: 10
      selector:
        matchLabels:
          app: otel-go-server
      strategy:
        rollingUpdate:
          maxSurge: 25%
          maxUnavailable: 25%
        type: RollingUpdate
      template:
        metadata:
          labels:
            app: otel-go-server
            aliyun.com/app-language: golang
            armsPilotAutoEnable: 'on'
            armsPilotCreateAppName: otel-go-server
        spec:
          containers:
            - image: registry.cn-hangzhou.aliyuncs.com/private-mesh/hellob:otel-server-arms-go-test-0.0.1
              imagePullPolicy: Always
              name: server
              resources:
                requests:
                  cpu: 250m
                  memory: 300Mi
              terminationMessagePath: /dev/termination-log
              terminationMessagePolicy: File
          dnsPolicy: ClusterFirst
          restartPolicy: Always
          schedulerName: default-scheduler
          securityContext: {}
          terminationGracePeriodSeconds: 30
    
    ---
    
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: otel-go-server
      name: otel-server
      namespace: default
    spec:
      internalTrafficPolicy: Cluster
      ipFamilies:
        - IPv4
      ipFamilyPolicy: SingleStack
      ports:
        - name: http
          port: 9000
          protocol: TCP
          targetPort: 9000
      selector:
        app: otel-go-server
      sessionAffinity: None
      type: ClusterIP

执行结果

约一分钟后,若Golang应用出现在ARMS控制台的应用监控 > 应用列表页面中且有数据上报,则说明接入成功。