このエントリは2026/06/24現在の情報に基づいています。将来の機能追加や変更に伴い、記載事項からの乖離が発生する可能性があります。
問い合わせ
お初の主から、以下のような問い合わせが届いた。
GitHub Copilot CLIでGitHubが提供しているモデルを利用している場合、プロンプトやレスポンスのログを取得するにはどうすればいいか?
Azure API Management (APIM) の背後にAzure OpenAI ServiceやFoundryモデルを配置すれば、APIMでプロンプトログやレスポンスを取得できるのは理解している主なので、同じようなことができないか?という素朴な疑問。
GitHubでの取得状況
GitHub Copilot CLI、GitHub Copilotは基本的にサーバー側(つまりGitHub側)でプロンプトログを取得していないので、もしプロンプトログを取得したい場合には、次のような手段が必要。
GitHub Copilotの場合
Agent hooks in Visual Studio Code (Preview)
https://code.visualstudio.com/docs/agent-customization/hooks
Monitor agent usage with OpenTelemetry
https://code.visualstudio.com/docs/agents/guides/monitoring-agents
GitHub Copilot CLIの場合
OpenTelemetry Monitoring
https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-command-reference#opentelemetry-monitoring
Policy hooks
https://docs.github.com/en/copilot/reference/hooks-reference#policy-hooks
設定
今回は、GitHub Copilot CLIからのテレメトリ情報を、先日のエントリで作成したOTelエンドポイント(APIM経由でApplication Insights)に流し込むことにした。詳細はOTelエンドポイントのエントリに記載している。
クライアントでの設定
環境変数として以下の設定が必要。なお、COPILOT_OTEL_ENABLEDは、OTEL_EXPORTER_OTLP_ENDPOINTを設定すると自動的にtrueになるので、意識する必要はない。
GitHub Copilot CLIはgRPCでのテレメトリ情報送出をサポートしていないので注意が必要。そのため、OTEL_EXPORTER_OTLP_PROTOCOLにgrpcを設定できない(http/json もしくは http/protobuf だけをサポート)。今回、APIMの背後にいるApplication Insightsの都合で、http/protobuf を設定した。
| 環境変数 | 意味 | 値 |
|---|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT | 文字通りOTLPエンドポイント。1. で作成したエンドポイントを指定 | https://<APIM>/<API_URL_SUFFIX> |
OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT | Prompt/Responseを取得するかどうか | true |
OTEL_EXPORTER_OTLP_PROTOCOL | OTLP HTTP wire protocol | http/protobuf |
OTEL_EXPORTER_OTLP_HEADERS | バックエンドへ送出する際に必要な認証ヘッダー | "Authorization=Bearer YOUR_TOKEN"や "api-key=xxxxxxx" |
これでおしまい。
PromptとResponseはどこに入るか?
確かにOTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENTでメッセージを捕捉するように構成したが、果たしてどこに収集されるのか?これはドキュメントにも記載の通り、本文キャプチャ時の属性として gen_ai.input.messages と gen_ai.output.messages に格納されている。つまり、invoke_agent や chat span の属性として prompt/response が JSON で入るため、管理ツール側では主に traces/span attributes として閲覧・検索する必要がある。ふつうだとLogに書き込まれると考えそうだが、そうではない点に注意が必要。
Content capture (GitHub Copilot CLI command reference > OpenTelemetry monitoring)
https://docs.github.com/en/copilot/reference/copilot-cli-reference/cli-command-reference#content-capture
試してみる
ふつうにGitHub Copilot CLIで、何か問い合わせてみる。 /research なんてやると大変なので、とあるプロジェクトの説明をしてもらった結果がこちら。

これを、Application Insightsから見たものが以下のスクリーンショット。赤で囲んだ箇所がプロンプトとレスポンス。

赤で囲んだ箇所のGenerated Outputは以下のような内容で、実行結果と同じ(当たり前である)。
task_complete({“summary”:“概要: このプロジェクトは、Micronaut 5 ベースの小さな Java Web API です。GET /caller にアクセスすると、外部 API https://api.my-ip.io/v2/ip.json を呼び出し、呼び出し元のグローバル IP と関連情報を JSON として返します。\n\n構成: エントリポイントは Application.java、HTTP エンドポイントは GeoIPController.java、外部 API クライアントは GeoIPClient.java です。Maven プロジェクトで、Java 25 / Netty / Jackson を使います。application.yml ではアプリ名 envchecker と OpenTelemetry の logging exporter が設定されています。\n\nデプロイ: 通常の JVM コンテナ用 Dockerfile と GraalVM ネイティブイメージ用 Dockerfile.native があり、GitHub Actions で Docker Hub へ envchecker:${JDK_VERSION} と envchecker:${JDK_VERSION}-native をビルド・push する構成です。現状、src/test 配下のテストコードはありません。”})
続いて、「テストがない」と言ってきているので、テストを作成してもらい、コミット、プッシュの上、プルリクエスト発行まで実施してもらった結果がこちら。

Application Insightsから、invoke_agentを選択してtraceを見ると、以下の通り。

Simple viewで確認することもできて、1箇所選択してみると、CLIの出力「● 外部APIに依存しないよう、 GeoIPClient をテスト用Beanで差し替えるコントローラーテストを追加します。」が確認できる。

Application InsightsのOTel metrics (preview) では、Metricsを確認できる。以下は指定した時間でのToken Usageを取得した例。

他のサービスでは
GitHub Copilot CLIからOTelをサポートする他のサービスにもテレメトリ情報を送信できるが、それぞれ構成上の注意点がある。下表は直接の送信での状況を記載したもの。
| バックエンド | Copilot CLI から直接 OTLP/HTTP | メモ |
|---|---|---|
| Grafana Cloud / Tempo | 可能 | Grafana Cloud: OTLP/HTTP endpoint と headers を案内している。 production: Alloy/Collector 経由を推奨。 Send data to the Grafana Cloud OTLP endpoint https://grafana.com/docs/grafana-cloud/send-data/otlp/send-data-otlp/ |
| Jaeger 2.x | 可能 | JaegerはOTLPを受け付けるが、保存対象は tracesのみ。 OpenTelemetry Protocol https://www.jaegertracing.io/docs/2.6/architecture/apis/ |
| Honeycomb | 可能 | OTLP over gRPC、HTTP/protobuf、HTTP/JSON をサポート。x-honeycomb-team header でAPI Keyを渡す。Send Data with the OpenTelemetry Collector https://docs.honeycomb.io/send-data/opentelemetry/collector |
| New Relic | 可能 | OTLP/HTTP binary protobuf の利用を推奨。api-key headerでAPI Keyを渡す。New Relic OTLP endpoint https://docs.newrelic.com/docs/opentelemetry/best-practices/opentelemetry-otlp/ |
| Datadog | 標準構成では Agent/Collector 経由 | Datadog Agent は OTLP traces/metrics を gRPC または HTTP で受付。 OTLP Ingestion by the Datadog Agent https://docs.datadoghq.com/opentelemetry/setup/otlp_ingest_in_the_agent/ |