設定ガイド
whatap-go-instの設定ファイルと環境変数を使用して計測動作を制御する方法を案内します。Presetで簡単に設定したり、個別パッケージを選択して細かく制御できます。
基本的な使用方法は基本使用法を先に参照してください。
設定ファイル
ファイル位置
設定ファイルは次の順序で検索されます。
| 優先順位 | 位置 | 説明 |
|---|---|---|
| 1 | --configフラグ | whatap-go-inst --config=/path/to/config.yaml |
| 2 | WHATAP_INST_CONFIG環境変数 | WHATAP_INST_CONFIG=/path/to/config.yaml |
| 3 | .whatap/config.yaml | プロジェクトルートの.whatapディレクトリ (推奨) |
| 4 | .whatap/whatap.yaml | 代替ファイル名 |
プロジェクトルートに.whatap/config.yamlファイルを作成して使用することを推奨します。
基本構造
# .whatap/config.yaml
instrumentation:
preset: "full" # Preset選択 (full/minimal/web/database/external/log/custom)
error_tracking: false # エラー追跡有効化の有無
enabled_packages: [] # 追加で有効化するパッケージ
disabled_packages: [] # 無効化するパッケージ
exclude: # 計測除外パターン (オプション)
- "**/*_test.go"
設定項目
Presetオプション
Presetを使用して計測するパッケージグループを簡単に選択できます。
| Preset | 含まれる項目 | 説明 |
|---|---|---|
full (デフォルト) | Web + データベース + 外部サービス + ログ | すべてのパッケージを有効化 |
minimal | trace.Init/Shutdown | 最小設定 (フレームワークミドルウェアを除く) |
web | Gin, Echo, Fiber, Chi, Gorilla Mux, net/http, FastHTTP | Webフレームワークのみ |
database | database/sql, sqlx, GORM v1/v2 | データベースのみ |
external | Redis, MongoDB, Kafka, gRPC, Kubernetes | 外部サービスのみ |
log | log, logrus, zap | ログライブラリのみ |
custom | enabled_packagesで直接指定 | ユーザー定義 |
Preset組み合わせ
Presetとパッケージオプションを組み合わせると、より細かく制御できます。
最終有効化パッケージ = Presetパッケージ + enabled_packages - disabled_packages
組み合わせ例:
preset: full+disabled_packages: ["grpc"]→ gRPCを除く全体preset: web+enabled_packages: ["sql"]→ Webフレームワーク + SQLpreset: custom+enabled_packages: ["gin", "sql"]→ GinとSQLのみ
環境変数
設定ファイルの代わりに環境変数でも設定できます。
| 環境変数 | 説明 | 値 | デフォルト |
|---|---|---|---|
GO_API_AST_DEBUG | デバッグ出力を有効化 | 1 (有効化), 0 (無効化) | 0 |
GO_API_AST_OUTPUT_DIR | 計測されたソース出力ディレクトリ | ディレクトリパス | - |
WHATAP_INST_CONFIG | 設定ファイルパス | ファイルパス | .whatap/config.yaml |
設定優先順位
設定値は次の順序で適用されます。
CLIオプション > 環境変数 > 設定ファイル > 既定値
| ソース | 例 | 優先順位 |
|---|---|---|
| CLIオプション | --error-tracking | 1 (最高) |
| 環境変数 | GO_API_AST_DEBUG=1 | 2 |
| 設定ファイル | error_tracking: true | 3 |
| 既定値 | false | 4 (最低) |
ファイル除外パターン
計測から除外するファイルパターンを指定します。
デフォルト除外パターン
設定ファイルにexcludeパターンを指定しない場合、次のパターンが自動的に適用されます:
| パターン | 説明 |
|---|---|
**/*.pb.go | protobuf生成ファイル |
**/*.pb.gw.go | grpc-gateway生成ファイル |
**/*_grpc.pb.go | grpc生成ファイル |
**/*.connect.go | connect-go生成ファイル |
**/*_generated.go | 自動生成ファイル |
**/*_gen.go | コード生成器出力 |
**/*_test.go | テストファイル |
vendor/** | vendorディレクトリ |
.git/** | gitディレクトリ |
node_modules/** | node_modulesディレクトリ |
whatap-instrumented/** | 計測された出力ディレクトリ |
除外理由
- 生成されたコード (protobuf、grpcなど): コンパイルエラーが発生する可能性
- テストファイル: プロダクションモニタリングに不要
- 依存関係ディレクトリ: サードパーティコード
ユーザー定義除外パターン
excludeパターンを指定すると、既定値を置き換えます。
# .whatap/config.yaml
exclude:
- "**/*_test.go"
- "vendor/**"
- "internal/legacy/**" # レガシーコードを除外
- "migrations/**" # マイグレーションファイルを除外
Globパターン構文
| パターン | 説明 | マッチ例 |
|---|---|---|
* | ファイル名のすべての文字 | *.go → main.go |
** | 再帰的にすべてのディレクトリ | **/test/** → a/b/test/c/d.go |
? | 単一文字 | test?.go → test1.go |
[abc] | 文字クラス | test[12].go → test1.go |
コピー除外ディレクトリ (copy_exclude)
wrapモード (whatap-go-inst go build) で一時ディレクトリにソースファイルをコピーする際に除外するディレクトリを指定します。
デフォルト除外ディレクトリ
次のディレクトリは自動的に除外されます:
| ディレクトリ | 説明 |
|---|---|
.git | Gitリポジトリ |
.svn | SVNリポジトリ |
.hg | Mercurialリポジトリ |
node_modules | Node.js依存関係 |
vendor | Go vendorディレクトリ |
.idea | JetBrains IDE設定 |
.vscode | VS Code設定 |
whatap-instrumented | 計測されたソース出力 |
build、distディレクトリはGoプロジェクトでgo:embedの対象として頻繁に使用されるため、デフォルトで除外されません。
ユーザー定義除外ディレクトリ
# .whatap/config.yaml
copy_exclude:
- "tmp" # 一時ディレクトリ
- "cache" # キャッシュディレクトリ
- "data" # 大容量データディレクトリ
- "testdata" # テストデータ
ユーザー定義copy_exclude項目はデフォルトリストに追加されます(置き換えではありません)。
exclude vs copy_exclude の違い
| オプション | 用途 | 適用時点 |
|---|---|---|
exclude | 計測から除外するファイルパターン | AST分析時 |
copy_exclude | コピーから除外するディレクトリ | wrapモードファイルコピー時 |
exclude:_test.go、**/*.pb.goなどのglobパターンで特定ファイルを除外copy_exclude:tmp、cacheなどのディレクトリ名でディレクトリ全体を除外
ログ収集
ログ収集を有効化するには、次のように設定します。
# .whatap/config.yaml
instrumentation:
preset: "full" # ログパッケージを含む
# whatap.conf
logsink_enabled=true
- whatap-go-instで計測すると、自動的にTraceLogWriterが挿入されます
- ログにトランザクションID(@txid)、マルチトランザクションID(@mtid)などが自動的に含まれます
- TraceLogWriter方式を推奨します(トランザクション連携可能)
設定例
全体有効化
# .whatap/config.yaml
instrumentation:
preset: "full"
すべてのサポートパッケージが有効化されます。
Webとデータベースのみ
# .whatap/config.yaml
instrumentation:
preset: "custom"
enabled_packages:
- "gin"
- "echo"
- "sql"
- "gorm"
Gin、Echo、database/sql、GORMのみが計測されます。
特定パッケージを除外
# .whatap/config.yaml
instrumentation:
preset: "full"
disabled_packages:
- "k8s"
- "grpc"
KubernetesとgRPCを除くすべてのパッケージが計測されます。
エラー追跡を有効化
# .whatap/config.yaml
instrumentation:
preset: "full"
error_tracking: true
if err != nilパターンにtrace.Error(ctx, err)コードが自動的に挿入されます。
// 変更前
if err != nil {
return err
}
// 変更後
if err != nil {
trace.Error(ctx, err) // 自動追加
return err
}
環境別設定ファイル
# 開発環境
WHATAP_INST_CONFIG=.whatap/dev-config.yaml whatap-go-inst go build ./...
# プロダクション環境
WHATAP_INST_CONFIG=.whatap/prod-config.yaml whatap-go-inst go build ./...
# .whatap/dev-config.yaml
instrumentation:
preset: "full"
debug: true
error_tracking: true
# .whatap/prod-config.yaml
instrumentation:
preset: "full"
error_tracking: true
debug: false
デバッグモード
# .whatap/config.yaml
instrumentation:
debug: true
preset: "full"
ビルド時に詳細なデバッグ情報が出力されます。
[whatap-go-inst] Config file: .whatap/config.yaml
[whatap-go-inst] Preset: full
[whatap-go-inst] Processing: main.go
[whatap-go-inst] Added: trace.Init
...
計測コード出力
# .whatap/config.yaml
instrumentation:
output_dir: "./instrumented"
preset: "full"
計測されたソースコードが./instrumentedディレクトリに保存されます。
使用事例:
- 計測結果のレビュー
- CI/CDでの計測コード分析
トラブルシューティング
計測が適用されない場合
次を確認してください:
# ビルドキャッシュ削除後、再ビルド
go clean -cache
whatap-go-inst go build ./...
# デバッグモードで詳細ログ確認
GO_API_AST_DEBUG=1 whatap-go-inst go build ./...