エージェント型開発を探求する -

OpenTelemetry を使用したエージェント使用状況の監視

この記事では、VS Code における Copilot Chat エージェントのやり取りに対して OpenTelemetry 監視を有効化および構成する方法を説明します。

Copilot Chat は OpenTelemetry (OTel) を介してトレース、メトリクス、イベントをエクスポートでき、エージェントのやり取り、LLM 呼び出し、ツール実行、トークン使用量を可視化できます。すべてのシグナル名と属性は OTel GenAI セマンティック規約に従っているため、データは OTel 互換のあらゆるバックエンドで機能します。

収集されるデータ

Copilot Chat は、トレース、メトリクス、イベントという 3 種類の OTel シグナルを出力します。

トレース

エージェントの各やり取りは、完全な実行フローをキャプチャする階層的なスパンツリーを生成します。

invoke_agent copilot                           [~15s]
  ├── chat gpt-4o                              [~3s]  (LLM requests tool calls)
  ├── execute_tool readFile                    [~50ms]
  ├── execute_tool runCommand                  [~2s]
  ├── chat gpt-4o                              [~4s]  (LLM generates final response)
  └── (span ends)

トレースを構成する 3 つのスパンタイプ

スパン 説明 主要な属性
invoke_agent すべての LLM 呼び出しやツール実行を含む、エージェントのオーケストレーション全体をラップします エージェント名、会話 ID、ターン数、合計トークン使用量
chat 単一の LLM API 呼び出し モデル、トークン数、応答時間、終了理由
execute_tool 単一のツール呼び出し ツール名、ツールタイプ、期間、成功ステータス

エージェントがサブエージェントを呼び出す際(例えば runSubagent ツール経由など)、トレースコンテキストは自動的に伝播されます。サブエージェントの invoke_agent スパンは、親エージェントの execute_tool スパンの子として表示され、非同期境界を越えて接続されたトレースツリーを生成します。

メトリクス

メトリクス タイプ 説明
gen_ai.client.operation.duration ヒストグラム LLM API 呼び出し期間(秒)
gen_ai.client.token.usage ヒストグラム トークン数(入力および出力)
copilot_chat.tool.call.count カウンター 名前および成功ごとのツール呼び出し
copilot_chat.tool.call.duration ヒストグラム ツール実行レイテンシ(ミリ秒)
copilot_chat.agent.invocation.duration ヒストグラム エージェントのエンドツーエンド期間(秒)
copilot_chat.agent.turn.count ヒストグラム エージェントの呼び出しあたりの LLM ラウンドトリップ数
copilot_chat.session.count カウンター 開始されたチャットセッション
copilot_chat.time_to_first_token ヒストグラム 最初の SSE トークンまでの時間(秒)

メトリクスには、gen_ai.request.modelgen_ai.provider.namegen_ai.tool.nameerror.type などのフィルタリング用属性が含まれます。

イベント

イベント 説明
gen_ai.client.inference.operation.details モデル、トークン、終了理由を含む完全な LLM 呼び出しメタデータ
copilot_chat.session.start 新しいチャットセッションが開始されたときに発行されます
copilot_chat.tool.call タイミングとエラー詳細を含むツールごとの呼び出し
copilot_chat.agent.turn トークン数を含むターンごとの LLM ラウンドトリップ

リソース属性

すべてのシグナルには以下のリソース属性が含まれます

属性
service.name copilot-chat (OTEL_SERVICE_NAME で構成可能)
service.version 拡張機能のバージョン
session.id VS Code ウィンドウごとに一意

OTEL_RESOURCE_ATTRIBUTES を使用してカスタムリソース属性を追加し、チーム、部門、その他の組織境界でフィルタリングできます

export OTEL_RESOURCE_ATTRIBUTES="team.id=platform,department=engineering"

コンテンツのキャプチャ

デフォルトでは、プロンプトの内容、応答、ツール引数はキャプチャされません。モデル名、トークン数、期間などのメタデータのみが含まれます。

完全なコンテンツをキャプチャするには、 github.copilot.chat.otel.captureContent VS Code で開く VS Code Insiders で開く 設定を有効にするか、COPILOT_OTEL_CAPTURE_CONTENT=true を設定してください。これにより、スパン属性に完全なプロンプトメッセージ、応答メッセージ、システムプロンプト、ツールスキーマ、ツール引数、ツール結果が格納されます。

注意

コンテンツキャプチャには、コード、ファイル内容、ユーザープロンプトなどの機密情報が含まれる可能性があります。信頼できる環境でのみ有効にしてください。

OTel 監視の有効化

以下のいずれかの条件が真の場合、OTel はアクティブになります

  • github.copilot.chat.otel.enabled VS Code で開く VS Code Insiders で開く true である
  • COPILOT_OTEL_ENABLED=true
  • OTEL_EXPORTER_OTLP_ENDPOINT が設定されている

VS Code 設定

設定 (⌘, (Windows, Linux Ctrl+,)) を開き、copilot otel を検索します

設定 タイプ 既定値 説明
github.copilot.chat.otel.enabled Open in VS Code Open in VS Code Insiders boolean false OTel 出力を有効にする
github.copilot.chat.otel.exporterType Open in VS Code Open in VS Code Insiders string "otlp-http" otlp-httpotlp-grpcconsole、または file
github.copilot.chat.otel.otlpEndpoint Open in VS Code Open in VS Code Insiders string "https://:4318" OTLP コレクターのエンドポイント
github.copilot.chat.otel.captureContent Open in VS Code Open in VS Code Insiders boolean false プロンプトと応答の完全な内容をキャプチャする
github.copilot.chat.otel.outfile Open in VS Code Open in VS Code Insiders string "" JSON-lines 出力のファイルパス

環境変数

環境変数は常に VS Code 設定よりも優先されます。

変数 既定値 説明
COPILOT_OTEL_ENABLED false OTel を有効化します。OTEL_EXPORTER_OTLP_ENDPOINT が設定されている場合も有効になります。
COPILOT_OTEL_ENDPOINT OTLP エンドポイント URL (OTEL_EXPORTER_OTLP_ENDPOINT より優先)
OTEL_EXPORTER_OTLP_ENDPOINT 標準 OTel OTLP エンドポイント URL
OTEL_EXPORTER_OTLP_PROTOCOL http/protobuf OTLP プロトコル。grpc のみが動作を変更します。
OTEL_SERVICE_NAME copilot-chat リソース属性内のサービス名
OTEL_RESOURCE_ATTRIBUTES 追加のリソース属性 (key1=val1,key2=val2)
COPILOT_OTEL_CAPTURE_CONTENT false プロンプトと応答の完全な内容をキャプチャする
OTEL_EXPORTER_OTLP_HEADERS 認証ヘッダー (例: Authorization=Bearer token)

オブザーバビリティ・バックエンドでの使用

Copilot Chat の OTel 出力は、OTLP プロトコルをサポートするすべてのバックエンドで動作します。 github.copilot.chat.otel.otlpEndpoint VS Code で開く VS Code Insiders で開く 設定または OTEL_EXPORTER_OTLP_ENDPOINT 環境変数をバックエンドの OTLP 取り込み URL に向け、バックエンドのプロトコル (otlp-http または otlp-grpc) に合わせてエクスポータータイプを構成してください。

Aspire Dashboard

Aspire Dashboard は、ローカル開発において最も簡単なオプションです。これは、組み込みの OTLP エンドポイントとトレースビューアーを備えた単一の Docker コンテナであり、クラウドのアカウントは不要です。

docker run --rm -d \
  -p 18888:18888 \
  -p 4317:18889 \
  --name aspire-dashboard \
  mcr.microsoft.com/dotnet/aspire-dashboard:latest
{
  "github.copilot.chat.otel.enabled": true,
  "github.copilot.chat.otel.exporterType": "otlp-grpc",
  "github.copilot.chat.otel.otlpEndpoint": "https://:4317"
}

https://:18888 を開き、Traces に移動して、エージェントのやり取りのスパンを表示します。

Jaeger

Jaeger は、OTLP を直接受け入れるオープンソースの分散トレースプラットフォームです。

docker run -d --name jaeger -p 16686:16686 -p 4318:4318 jaegertracing/jaeger:latest
{
  "github.copilot.chat.otel.enabled": true,
  "github.copilot.chat.otel.otlpEndpoint": "https://:4318"
}

https://:16686 を開き、サービス copilot-chat を選択し、Find Traces を選択します。

Azure Application Insights

OTel CollectorAzure Monitor エクスポーター を使用して、Copilot Chat のテレメトリを Application Insights に転送します。VS Code の github.copilot.chat.otel.otlpEndpoint VS Code で開く VS Code Insiders で開く 設定をコレクターの OTLP エンドポイントに向け、コレクターが Application Insights の接続文字列にエクスポートするように構成します。

Langfuse

Langfuse は、ネイティブの OTLP 取り込みと OTel GenAI セマンティック規約のサポートを備えたオープンソースの LLM オブザーバビリティ・プラットフォームです。

{
  "github.copilot.chat.otel.enabled": true,
  "github.copilot.chat.otel.otlpEndpoint": "https://:3000/api/public/otel",
  "github.copilot.chat.otel.captureContent": true
}

OTEL_EXPORTER_OTLP_HEADERS 環境変数で認証ヘッダーを設定します。詳細は Langfuse OTel のドキュメントを参照してください。

その他のバックエンド

Grafana TempoHoneycombDatadog など、OTLP 互換のあらゆるバックエンドが機能します。各バックエンドのドキュメントで OTLP 取り込みのセットアップを参照してください。

セキュリティとプライバシー

OTel 監視はデフォルトでオフになっており、明示的に有効にするまでデータは発行されません。何が収集され、どこに送られるかを制御できます。

側面 詳細
デフォルトでオフ 明示的に有効にしない限り、OTel データは発行されません。無効時には OTel SDK が読み込まれないため、実行時のオーバーヘッドはゼロです。
デフォルトでコンテンツなし プロンプト、応答、ツール引数は、captureContent でのオプトインが必要です。
デフォルト属性に個人情報なし セッション ID、モデル名、トークン数は個人を特定できる情報ではありません。
ユーザーが構成したエンドポイント データは指定した先にのみ送信されます。「電話ホーム」のような動作はありません。
© . This site is unofficial and not affiliated with Microsoft.