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日 |
|