通过本教程,您将学习如何将ACK集群下的Golang应用接入ARMS应用监控,体验应用性能分析和调用链分析等功能,并配置告警。
如需将其他环境下的Java应用或Golang应用接入应用监控,请参见应用接入。
使用流程
-
为应用安装探针。
-
安装ack-onepilot组件:ack-onepilot是阿里云容器服务Kubernetes提供的系统组件,可以让部署在容器服务Kubernetes中的Java或Golang应用接入ARMS。
-
编译Golang应用:编译Golang二进制文件,构建镜像并发布。
-
更新YAML:通过在应用的YAML中添加
labels,开启监控并配置应用在ARMS中的展示名称。
-
-
查看监控数据。
-
为监控数据配置告警。
准备环境和资源
-
ACK:
-
创建Kubernetes集群。具体操作,请参见创建ACK托管集群。
-
创建Golang应用。Golang版本要求,请参见ARMS应用监控支持的Go组件和框架。
如果您没有可以使用的Golang应用,可以参考以下示例YAML创建。具体操作,请参见创建无状态工作负载Deployment。
说明示例YAML创建了以下资源:
-
空间名称:default。以下所有资源均创建在default命名空间下。
-
无状态应用:otel-go-client和otel-go-server。
-
服务:otel-server。
-
-
-
ARMS:
已开通应用监控计费版本。
应用监控每月提供50 GB的免费额度,当月未使用完的试用额度不会结转至次月,当月超出免费额度的部分,按照写入的数据量进行收费。收费详情,请参见计费说明。
为应用安装探针
1. 安装ack-onepilot组件
登录容器服务管理控制台,在集群列表页面单击目标集群名称。
在左侧导航栏单击组件管理,然后通过关键字搜索ack-onepilot。
-
在ack-onepilot卡片上单击安装,然后在弹出的对话框单击确定。
说明确保ack-onepilot版本在3.2.0及以上。
2. 编译Golang应用
示例YAML中提供的Go应用镜像已完成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作为前缀添加到您原有的编译命令前并执行编译。
使用上一步编译的二进制文件构建镜像。
3. 更新YAML
-
在页面选择应用所在的命名空间,然后在目标应用右侧选择。
-
在编辑 YAML中将以下
labels添加到spec.template.metadata层级下,然后单击更新。labels: aliyun.com/app-language: golang # Go应用必填,标明此应用是Go应用。 armsPilotAutoEnable: 'on' armsPilotCreateAppName: "<your-deployment-name>" #应用在ARMS中的展示名称。例如,在otel-go-client和otel-go-server应用的YAML中添加配置,开启监控并配置在ARMS中的展示名称分别为otel-go-client和otel-go-server。
otel-go-client应用
在 Deployment YAML 的
template.metadata.labels中添加aliyun.com/app-language: golang、armsPilotAutoEnable: 'on'和armsPilotCreateAppName: otel-go-client三个标签,以启用 ARMS 自动接入 Go 应用。spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: otel-go-client strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: app: otel-go-client aliyun.com/app-language: golang armsPilotAutoEnable: 'on' armsPilotCreateAppName: 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-logotel-go-server应用
在 otel-go-server 应用的 Deployment YAML 中,需要在
template.metadata.labels下添加aliyun.com/app-language: golang、armsPilotAutoEnable: 'on'和armsPilotCreateAppName: otel-go-server三个标签以启用 ARMS 自动接入。完整 spec 部分示例: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 -
待容器完成自动重新部署后,等待1~2分钟,在ARMS控制台的页面单击应用名称,查看应用的监控指标。更多信息,请参见查看监控详情(新版)。
在应用列表页面中,otel-go-server 和 otel-go-client 两个 Go 应用已出现在列表中。otel-go-server 显示每秒请求数约 0.98、错误率 0.00%、平均响应时间约 1s 等监控数据,表明应用已成功接入 ARMS。
查看监控详情
调用链分析
调用链分析功能可以通过自由组合筛选条件与聚合维度进行实时分析,并支持通过错/慢Trace分析功能,定位系统或应用产生错、慢调用的原因。
在调用链分析页面,搜索栏中输入 serviceName:"otel-go-server" 进行查询。页面上方展示调用次数、HTTP错误数和平均耗时三个图表,左侧提供状态、耗时、接口名称和主机地址等快捷筛选条件。下方Trace列表展示42条调用记录,均耗时1s、状态正常。右侧慢Trace分析浮层提示当前所有Trace耗时≥500.0ms,属于慢调用。
调用链详情:
调用链详情页面展示 TraceID 为 1ee21dce0166d6f1099b6d41a577ab2d 的链路,总耗时 3s。Span 瀑布图中根 Span 为 Client/User defined span(otel-go-client, INTERNAL, 3.04s),下方展开三组串行 HTTP 调用链路,每组包含 /http-service1 的 CLIENT 端 Span(otel-go-client, GET)和 SERVER 端 Span(otel-go-server, GET)以及 Server/User defined span(otel-go-server, INTERNAL),每个子 Span 约 1s。选中 Span 的详情面板显示应用名 otel-go-server,接口名 Server/User defined span,IP 172.30.208.52,Attributes 中包含自定义属性 slow=1 和 user.defined=true。
监控指标
-
应用概览

-
应用拓扑
拓扑图显示两个客户端节点 otel-go-client 和 otel-client 通过虚线调用服务端节点 otel-go-server。服务端统计信息:错误数 0、请求数 222、响应时间 1.0s。
配置告警
通过配置告警,您可以制定针对特定应用的告警规则。当告警规则被触发时,系统会以您指定的通知方式向告警联系人或钉群发送告警信息,以提醒您采取必要的解决措施。具体操作,请参见应用监控告警规则。
例如,为应用 [cn-shanghai]otel-go-server 配置告警规则:在告警对象区域选择目标应用,指标类型选择应用提供服务统计,筛选条件中接口名称和接口调用类型均设为通配;在告警规则区域将告警触发模式设为单条件,告警条件设为慢调用次数的平均值大于等于对应等级阈值(P1:critical、P2:error、P3:warning、P4:page),系统会根据最近24小时的慢调用趋势数据推荐 P4 建议阈值。
释放资源
完成教程后:
-
如果仍需要继续监控当前应用,请确保账户不要欠费。
-
如果无需继续监控当前应用,请卸载探针。具体操作,请参见卸载Golang探针。
相关文档
-
ARMS应用监控支持在应用的业务日志中关联调用链的TraceId信息,从而在应用出现问题时,能够通过调用链的TraceId快速关联到业务日志,及时定位、分析并解决问题。更多信息,请参见Java应用业务日志关联调用链TraceId。
-
当您的线上应用出现CPU、内存资源使用率高或大量慢调用问题时,可以通过ARMS持续剖析功能生成的火焰图对其进行根因定位。更多信息,请参见Java应用持续剖析。
-
阿里云可观测监控 Prometheus 版默认集成了ARMS应用监控数据源,您可以直接在可观测监控 Prometheus 版下获取应用监控相关数据、查看应用监控预置大盘,并根据需求进行二次开发。更多信息,请参见通过Prometheus监控获取ARMS应用监控数据。
> YAML 编辑