容器服务 ACK 和容器计算服务 ACS 通过 ack-onepilot 组件安装 Go 探针

更新时间:
复制 MD 格式

当您需要监控部署在容器服务 Kubernetes 版ACK容器计算服务ACS中的Go应用时,通过安装应用监控组件ack-onepilot并编译Go二进制文件,即可在云监控2.0中查看对应应用的应用拓扑、接口调用、数据库分析等相关监控数据。本文将介绍如何为部署在容器服务 Kubernetes 版ACK容器计算服务ACS中的Go应用安装探针。

说明
  • 容器服务 Kubernetes 版ACK容器计算服务ACS安装探针的操作相同,本文以容器服务 Kubernetes 版ACK为例演示安装探针的操作。

  • 如果您在使用Golang探针过程中有任何问题,欢迎通过钉钉答疑群(群号:159215000379)与我们联系。

ack-onepilot组件说明

应用监控探针接入助手(ack-onepilot)是用于接入各语言探针的重要组件,可以帮助用户在容器环境中自动准备好应用监控探针包并构建好探针的上报环境。应用监控探针接入助手(ack-onepilot)的基本原理请参见ack-onepilot组件基本原理说明

探针接入后,为了确保您的使用体验,在新版本探针发布后,当应用重启时,ack-onepilot将会自动将探针升级到最新版本,如果您不需要跟随应用监控探针的版本发布自动更新挂载的探针,可以自主控制探针版本。具体操作,请参见自主控制探针版本

前提条件

步骤一:安装探针接入助手(ack-onepilot)

  1. 登录容器服务管理控制台,在集群列表页面单击目标集群名称。

  2. 在左侧导航栏单击组件管理,然后通过关键字搜索ack-onepilot

    重要

    ack-onepilot版本需在5.1.0或以上,当前版本正在灰度中,如需使用请联系钉钉答疑群(群号:159215000379)协助开通。

  3. ack-onepilot卡片上单击安装

    说明
    • ack-onepilot组件默认支持1000pod规模,集群pod每超过1000个,ack-onepilot资源对应的CPU请增加0.5核、内存请增加512 MB。

    • 如果在ACS集群中安装ack-onepilot,请在安装卡片的最下方配置accessKeyaccessKeySecret,阿里云账号的AccessKey IDAccessKey Secret。获取方法,请参见创建AccessKey。请确认对应的阿里云账号已包含AliyunARMSFullAccessAliyunSTSAssumeRoleAccess权限。

  4. 在弹出的页面中可以配置相关的参数,建议使用默认值,单击确认

    说明

    安装完成后,您可以在组件管理页面升级、配置或卸载ack-onepilot组件。

步骤三:编译 Golang 应用镜像

  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. 使用上一步编译的二进制文件构建镜像。

步骤四:为 Go 应用开启 ARMS 应用监控

创建一个无状态(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
        armsPilotAppWorkspace: "workspace"
        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
        armsPilotAppWorkspace: "workspace"
    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
  1. 登录容器服务管理控制台,在左侧导航栏选择集群列表

  2. 集群列表页面左侧顶部,选择目标集群所在的资源组和地域,单击目标集群名称,然后在左侧导航栏,单击工作负载,然后选择无状态有状态守护进程集

  3. 在目标应用右侧选择image > YAML 编辑

    如需创建一个新应用,单击使用YAML创建资源

  4. YAML文件中将以下labels添加到spec.template.metadata层级下。

    labels:
      aliyun.com/app-language: golang # Go应用必填,标明此应用是Go应用。
      armsPilotAutoEnable: 'on'
      armsPilotCreateAppName: "deployment-name"    #请将deployment-name替换为您的应用名称。
      armsPilotAppWorkspace: "workspace"   # 替换为当前Workspace名称。
    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
            armsPilotAppWorkspace: "workspace"
            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
  5. 单击更新

查看监控详情

  1. 登录云监控2.0控制台,选择目标工作空间,在左侧导航栏选择所有功能 > 应用可观测 > 应用监控

  2. 应用列表页面可以看到已接入的应用,单击应用名称可以查看详细的应用监控数据。