为Golang应用安装探针后,ARMS即可开始监控Golang应用,您可以查看应用拓扑、调用链路、SQL分析等一系列监控数据。本文介绍如何为Go应用手动安装探针。
对于部署在Kubernetes环境的应用,不推荐手动安装探针,建议通过安装组件的方式接入ARMS。具体操作,请参见容器服务 ACK 和容器计算服务 ACS 通过 ack-onepilot 组件安装 Go 探针。
如果您在使用Golang探针过程中有任何问题,欢迎通过钉钉答疑群(群号:159215000379)与我们联系。
前提条件
确保您的编译环境和公网或阿里云内网连通,且编译环境所在安全组已开放8080、9990、80、443的TCP出方向权限。
检查您的网络环境。具体要求,请参见Golang应用监控网络配置。
检查您的编译环境操作系统和架构,以及Go版本和框架版本。具体要求,请参见ARMS应用监控支持的Go组件和框架。
步骤一:编译Golang应用镜像
使用 ARMS Go 应用监控时,仅需在编译时使用 instgo 工具,在原有的 go build 命令前添加 instgo 前缀即可完成探针注入。业务代码本身无需任何改动,也不需要额外集成 OpenTelemetry SDK。instgo 探针已基于 OpenTelemetry 标准实现自动化埋点,编译时自动在 AST 语法树分析阶段插入监控代码。
(可选)若项目在编译时包含vendor目录,请在
go build后添加-mod=vendor。使用
wget命令下载编译工具instgo,请根据编译环境和编译机器所在地域,选择对应的下载地址。需要注意,instgo 在编译时会触发自动更新,请将 instgo 保存在编译用户具有修改权限的目录下。
说明Instgo 是 ARMS 提供的 Golang 应用编译工具,使用 instgo 编译您的 Golang 项目后,ARMS 即可开始监控您的 Golang 应用。
各地域下载的编译工具是相同的,如果您的公网环境可以访问OSS地址,可以直接使用对应操作系统和架构的杭州公网地址获取编译工具。
为编译工具赋予可执行权限。
Linux/Mac
# 赋予可执行权限 chmod +x instgoWindows
Windows中无需赋予可执行权限。
(可选)配置uid作为编译参数。
重要如果您跳过该步,instgo会默认为您安装最新版本的ARMS探针。
使用set命令配置uid或者licensekey作为编译参数。
instgo set --uid={YourAliyunUid} //需要使用instgo 1.4.5及以上版本,uid为阿里云主账号uid将instgo作为前缀添加到您原有的编译命令前并执行编译。
instgo go build {arg1} {arg2} {arg3}如果您使用go install编译项目,也可以直接将instgo作为前缀添加到您原有的编译命令前并执行编译。
使用上一步编译的二进制文件构建镜像。
步骤二:配置环境变量
混合编译后,您需要手动为Go应用添加以下环境变量:
export ARMS_ENABLE=true export ARMS_APP_NAME=xxx # 应用名称。 export ARMS_REGION_ID=xxx # 对应的阿里云账号的RegionID。 export ARMS_LICENSE_KEY=xxx # 步骤一获取到的LicenseKey。说明若希望默认通过公网上报数据,可声明环境变量
ARMS_NETWORK_STRATEGY=public。除了通过export暴露环境变量外,您也可以在编译时通过ldflags指定相关的环境变量。
请将
module替换为go mod中配置的module名称,其他参数参考环境变量。instgo go build -ldflags " -X 'github.com/alibaba/loongsuite-go-agent/pkg/exporters.ArmsApmName=${appName}' -X 'github.com/alibaba/loongsuite-go-agent/pkg/exporters.ArmsEnable=true' -X 'github.com/alibaba/loongsuite-go-agent/pkg/exporters.LicenseKey=${licenseKey}' -X 'github.com/alibaba/loongsuite-go-agent/pkg/exporters.RegionId=${regionId}'"如果你使用systemctl启动程序,可以使用下述方式设置环境变量:
systemctl set-environment ARMS_ENABLE=true systemctl set-environment ARMS_APP_NAME=xxx # 应用名称。 systemctl set-environment ARMS_REGION_ID=xxx # 对应的阿里云账号的RegionID。 systemctl set-environment ARMS_LICENSE_KEY=xxx # 步骤一获取到的LicenseKey。
(可选)Docker环境安装参考
对于Docker环境,可以参考以下Dockerfile示例修改您的Dockerfile文件。
FROM golang:1.21 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN wget "http://arms-apm-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/instgo/instgo-linux-amd64" -O instgo
RUN chmod +x instgo
RUN ./instgo go build -o myapp .
FROM debian:bookworm-slim
WORKDIR /app
COPY --from=builder /app/myapp .
ENV ARMS_ENABLE=true
ENV ARMS_APP_NAME=AppName
ENV ARMS_REGION_ID=regionId
ENV ARMS_LICENSE_KEY=licenseKey
EXPOSE 8080
CMD ["./myapp"]结果验证
约一分钟后,若Golang应用出现在ARMS控制台的页面中且有数据上报,则说明接入成功。