Instgo 是 ARMS 提供的 Golang 应用编译工具,使用 instgo 编译您的 Golang 项目后,ARMS 即可开始监控您的 Golang 应用,您可以查看应用拓扑、调用链路、SQL分析等一系列监控数据。
本文仅对版本大于等于 1.3.0 的 instgo 工具有效,您可以通过instgo version
来查看您的 instgo 工具版本,如果您的 instgo 工具低于 1.3.0 版本,请参考开始监控 Golang 应用一节将您的 instgo 升级到 1.3.0 版本。
前提条件
确保您的编译环境和公网或阿里云内网连通,且编译环境所在安全组已开放 80 的 TCP 出方向权限。
如果您需要在生产环境部署编译制品,请额外配置编译参数 LicenseKey、RegionId,详情请参见下文开始监控 Golang 应用。
下载 instgo
使用
wget
命令下载编译工具,请根据编译环境和编译机器所在地域,选择对应的下载地址。需要注意,instgo 在编译时会触发自动更新,请将 instgo 保存在编译用户具有修改权限的目录下。
说明各地域下载的编译工具是相同的,如果您的公网环境可以访问OSS地址,可以直接使用对应操作系统和架构的杭州公网地址获取编译工具。
为编译工具赋予可执行权限。
Linux/Darwin
# 赋予可执行权限 chmod +x instgo
Windows
Windows中无需赋予可执行权限。
检查 instgo 是否可用。
执行 version 命令查看 instgo 版本,如果看到
Instgo version 1.3.0_dea8285
的字样则说明下载成功。Linux/Darwin
./instgo version
Windows
.\instgo.exe version
(可选)将 instgo 工具添加到您编译环境的 PATH 中。
使用 instgo 编译 Golang 应用
编译 Golang 应用时,需要保证您编译环境的 PATH 中包含 go 命令,您可以在编译环境中执行go version
来验证 go 命令是否在 PATH 中。
Golang 应用原本的编译命令:
go build -ldflags "-X main.Env=prod -X main.Version=1.0.0" -o app main.go
使用 instgo 前缀模式的编译命令:
instgo go build -ldflags "-X main.Env=prod -X main.Version=1.0.0" -o app main.go
如果您的 instgo 没有保存在 PATH 中,需要把前缀替换为 instgo 所在的相对路径/绝对路径:
/path/to/instgo go build -ldflags "-X main.Env=prod -X main.Version=1.0.0" -o app main.go
为 instgo 配置编译参数
instgo 为您的编译提供了一系列的编译参数,允许您控制 instgo 的编译行为。您可以通过instgo list
命令查看所有编译参数以及当前的预设值。
您可以使用默认的参数完成 Golang 应用的编译和部署,但如果您希望将制品部署到生产环境,建议指定 LicenseKey 和 RegionId 后再进行编译。
Flag Key | Env Key | 参数类型 | 默认值 | 描述 |
--agentVersion | INSTGO_AGENT_VERSION | String | 无 | 指定 Golang 探针版本。 |
--agentPath | INSTGO_AGENT_PATH | String | 无 | 指定 Golang 探针为本地的特定地址。 |
--cacheDir | INSTGO_CACHE_DIR | String | 无 | 指定保存 Golang 探针的缓存目录。 |
--dev | INSTGO_DEV | Bool | true | 指定编译模式为开发模式,该模式用于测试基本功能可用性,部分功能会有降级,线上使用请指定 LicenseKey。 |
--disableDefaultRule | INSTGO_DISABLE_DEFAULT_RULE | Bool | false | 是否关闭 ARMS 提供的代码增强,如果开启,则会屏蔽所有 ARMS 提供的自动代码增强,请谨慎使用! |
--licenseKey | INSTGO_LICENSE_KEY | String | 无 | 指定 ARMS 的 LicenseKey,该参数指定后会默认关闭 dev 模式。您可以通过 OpenAPI 获取 LicenseKey,具体操作请参见DescribeTraceLicenseKey - 列出LicenseKey。 |
--mse | INSTGO_MSE | Bool | false | 是否启用 MSE 微服务治理功能,详情请参见ACK微服务应用接入MSE治理中心(Golang版)。 |
--regionId | INSTGO_REGION_ID | String | cn-hangzhou | 指定拉取探针包/上报编译日志所在的地域,如果编译环境为 VPC 环境,请将该地域修改为您编译环境所在的地域。 |
--rule | INSTGO_RULE | String | 无 | 添加 Golang 探针代码增强模板,详细使用方式请参见使用Golang探针的自定义扩展能力。 |
--timeout | INSTGO_TIMEOUT | Int | 180 | 指定拉取 Golang 探针超时时间,单位为秒。 |
--verbose | INSTGO_VERBOSE | Bool | false | 是否打印详细的编译日志。 |
--vpc | INSTGO_VPC | Bool | false | 是否默认走内网拉取 Golang 探针。 |
--vendored | INSTGO_VENDORED | Bool | false | 使用vendor模式编译。 |
通过 set
命令指定编译参数
您可以使用 set
命令修改编译参数,该命令会将设置后的编译参数保存到$HOME/.instgo.yaml
文件中,后续的编译命令会自动读取该文件中的预设值。
例如,指定编译参数为生产模式,并指定 LicenseKey 和 RegionId:
instgo set --licenseKey=${ARMS_LICENSEKEY} --regionId=${ARMS_REGIONID} --dev=false
后续执行的编译过程,默认会采用上述预设好的编译参数。
instgo go build -a
重置编译参数
使用 set
命令修改编译参数后,您可以通过 reset
命令将所有的编译参数重设回默认值。
instgo reset
通过环境变量指定编译参数
如果您的单次编译需要添加额外的编译参数,而又不希望将该编译参数保存使其影响到其他编译命令,可以在编译前使用环境变量来指定编译参数,环境变量只会作用于当前命令行,不影响其他命令行执行的编译命令。
例如,指定编译参数为生产模式,并指定 licenseKey 和 regionId:
您可以通过DescribeTraceLicenseKeyOpenAPI获取LicenseKey。
Linux/Darwin
export INSTGO_LICENSE_KEY=${ARMS_LICENSEKEY}
export INSTGO_REGION_ID=${ARMS_REGIONID}
export INSTGO_DEV="false"
Windows
$env:INSTGO_LICENSE_KEY=${ARMS_LICENSEKEY}
$env:INSTGO_REGION_ID=${ARMS_REGIONID}
$env:INSTGO_DEV="false"
当前命令行执行的编译过程,默认会先查询是否设置了对应的环境变量,若未设置,则采用 set
命令预设的编译参数镜像编译。
instgo go build -a
您也可以将编译环境变量配置和编译命令写在同一行中:
Linux/Darwin
INSTGO_LICENSE_KEY=${ARMS_LICENSEKEY} INSTGO_REGION_ID=${ARMS_REGIONID} INSTGO_DEV="false" instgo go build -a
Windows
$env:INSTGO_LICENSE_KEY=${ARMS_LICENSEKEY}; $env:INSTGO_REGION_ID=${ARMS_REGIONID}; $env:INSTGO_DEV="false"; instgo.exe go build -a
清理 Golang 可观测临时文件
您可以执行 clean
命令来清理当前目录下的编译和运行残留,例如:
instgo clean
如果您需要删除本地缓存的 Golang 探针,可以添加--localAgents
flag :
instgo clean --localAgents
手动升级 instgo 工具
如果您的 instgo 版本较低,您可以通过指定 update
命令来更新您的 instgo 和 Golang 探针,该命令会将您的 instgo 和 Golang 探针更新为当前线上可用的最新版本。例如:
instgo update
默认情况下,instgo 会在编译时先按照 ARMS 的发布进度自动更新。在某些边界情况下可能会偶发编译失败的问题,重试一次即可解决该问题。
如果您的 instgo 版本低于 1.3.0,
update
命令可能不可用,请直接删除该 instgo,重新下载最新版本的 instgo。
Instgo 发布记录
版本 | 发布时间 | 发布说明 |
1.3.8 | 2025年05月29日 |
|
1.3.7 | 2025年05月19日 |
|
1.3.6 | 2025年04月28日 |
|
1.3.5 | 2025年04月17日 | instgo 支持vendor方式项目编译。 |
1.3.4 | 2025年03月31日 | instgo 支持代理原生go命令。 |
1.3.3 | 2025年02月28日 | 更新默认 Agent 版本到1.6.0。 |
1.3.2 | 2025年01月17日 | 修复无 instgo 修改权限用户执行编译时,由于自动更新失败导致的反复更新问题。 说明 如果您的 instgo 具有该问题,请删除 instgo 并重新下载。 |
1.3.1 | 2025年01月10日 | Linux/Darwin操作系统下,探针缓存默认调整到 |
1.3.0 | 2024年12月05日 |
|