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
命令下载编译工具,请根据编译环境和编译机器所在地域,选择对应的下载地址。说明各地域下载的编译工具是相同的,如果您的公网环境可以访问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 应用(推荐)
自 1.3.0 版本开始,instgo 提供了前缀模式用于编译您的 Golang 应用,您只需要在您的编译命令前添加 instgo 前缀即可。例如:
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
使用 build
命令编译 Golang 应用
build
命令自 1.3.0 版本起已经停止维护,但不会影响您正常使用。建议您将编译命令替换为前缀编译模式。
您可以将您的编译命令中的 go build
替换为 ./instgo build
,并将原有的编译参数添加到 --
符号后,例如:
Golang 应用原本的编译命令:
go build -ldflags "-X main.Env=prod -X main.Version=1.0.0" -o app main.go
使用 instgo build
命令的编译命令:
instgo build -- -ldflags "-X main.Env=prod -X main.Version=1.0.0" -o app main.go
如果您的 instgo 没有保存在 PATH 中,需要把前缀替换为 instgo 所在的相对路径/绝对路径:
/path/to/instgo build -- -ldflags "-X main.Env=prod -X main.Version=1.0.0" -o app main.go
为 instgo 配置编译参数
编译参数仅对前缀模式和自动更新命令生效,build
命令方式编译需要在每次编译时通过 flag key 指定编译参数。
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 探针。 |
通过 set
命令指定编译参数
您可以使用 set
命令修改编译参数,该命令会将设置后的编译参数保存到$HOME/.instgo.yaml
文件中,后续的编译命令会自动读取该文件中的预设值。
例如,指定编译参数为生产模式,并指定 LicenseKey 和 RegionId:
instgo set --licenseKey=${YourLicenseKey} --regionId=${YourRegionId} --dev=false
后续执行的编译过程,默认会采用上述预设好的编译参数。
instgo go build -a
重置编译参数
使用 set
命令修改编译参数后,您可以通过 reset
命令将所有的编译参数重设回默认值。
instgo reset
通过环境变量指定编译参数
如果您的单次编译需要添加额外的编译参数,而又不希望将该编译参数保存使其影响到其他编译命令,可以在编译前使用环境变量来指定编译参数,环境变量只会作用于当前命令行,不影响其他命令行执行的编译命令。
例如,指定编译参数为生产模式,并指定 licenseKey 和 regionId:
Linux/Darwin
export INSTGO_LICENSE_KEY=${YourLicenseKey}
export INSTGO_REGION_ID=${YourRegionId}
export INSTGO_DEV="false"
Windows
$env:INSTGO_LICENSE_KEY=${YourLicenseKey}
$env:INSTGO_REGION_ID=${YourRegionId}
$env:INSTGO_DEV="false"
当前命令行执行的编译过程,默认会先查询是否设置了对应的环境变量,若未设置,则采用 set
命令预设的编译参数镜像编译。
instgo go build -a
您也可以将编译环境变量配置和编译命令写在同一行中:
Linux/Darwin
INSTGO_LICENSE_KEY=${YourLicenseKey} INSTGO_REGION_ID=${YourRegionId} INSTGO_DEV="false" instgo go build -a
Windows
$env:INSTGO_LICENSE_KEY=${YourLicenseKey}; $env:INSTGO_REGION_ID=${YourRegionId}; $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.0 | 2024年12月05日 |
|