設定

otelc ツールと、計装されたアプリケーションが生成するテレメトリーを設定します。

設定は2つのポイントで行います。 ビルド時には otelc ツールがアプリケーションをどのように計装するかを制御し、ランタイムには標準の OpenTelemetry 環境変数が計装されたアプリケーションの生成するテレメトリーを制御します。

otelc コマンド

otelc は Go ツールチェーンをラップします。 サブコマンドは以下の通りです。

コマンド目的
otelc go …計装を適用して go コマンド(go build など)を実行する
otelc setup計装用の環境をセットアップする
otelc pin現在のモジュールの計装パッケージをピン留めするために otel.instrumentation.go を生成または更新する
otelc cleanupセットアップおよびビルドフェーズで作成されたすべてのアーティファクトを削除する
otelc versionツールのバージョンを表示する

フラグはサブコマンドの前に指定します。

フラグ環境変数目的
--rules <file>カスタム計装ルールファイルを使用する
--debug, -dOTELC_DEBUG=1ビルドのデバッグログを有効にする
--work-dir, -wOTELC_WORK_DIRビルド中に書き込まれる作業ファイルのディレクトリ

たとえば、カスタムルールファイルとデバッグ出力でビルドするには、以下を実行します。

otelc --rules my-rules.yaml --debug go build -o myapp .

ランタイム環境変数

計装されたアプリケーションは、エクスポーター、リソース、サービス ID 用の標準 OpenTelemetry SDK 環境変数を尊重します。 たとえば、以下のような変数があります。

  • OTEL_SERVICE_NAME: テレメトリーとともに報告されるサービス名
  • OTEL_EXPORTER_OTLP_ENDPOINT: エクスポート先の OTLP エンドポイント
  • OTEL_RESOURCE_ATTRIBUTES: 追加のリソース属性

さらに、以下の変数は注入された計装のうちどれをランタイムで有効にするかを制御します。

変数目的
OTEL_GO_ENABLED_INSTRUMENTATIONS有効にする計装のカンマ区切りリスト(例: nethttp,grpc)。設定すると、リストされた計装のみが有効になります。
OTEL_GO_DISABLED_INSTRUMENTATIONS無効にする計装のカンマ区切りリスト。

カスタム計装ルール

どのコードが計装されるかは、宣言的な YAML ルールによって駆動されます。 各ルールはターゲットパッケージを指定し、オプションでセレクターを使ってマッチを絞り込み、何を注入するかを宣言します。 たとえば、以下のルールは (*sql.DB).Exec の入口と出口でフック関数を呼び出します。

instrument_sql_exec:
  target: database/sql
  where:
    func: Exec
    recv: '*DB'
  do:
    - inject_hooks:
        before: BeforeExec
        after: AfterExec
        path: github.com/example/sqlinstr

カスタムルールファイルは --rules でビルドに渡します。 ルールは Go パッケージ内にも配置できます。 パッケージは otel.instrumentation.go(または otelc.tool.go)ファイルで計装を宣言し、コードの隣にある otelc.yml または *.otelc.yml ファイルでルールを提供します。 ツールがアプリケーションを計装する際にこれらを検出して読み込みます。 ルールは関数フック以外にも、構造体フィールドの注入、呼び出し箇所のラッピング、ファイル追加など複数の注入メカニズムをサポートしています。 完全なスキーマとルールタイプのリファレンスについては、リポジトリの計装ルールドキュメントを参照してください。