GitHub Copilotの企業管理OpenTelemetry出力とは?VS Code・CLIの変更点と導入判断

GitHubが公開した「GitHub Copilot adds enterprise-managed OpenTelemetry export for VS Code and CLI」の要点は、GitHub CopilotのOpenTelemetry(OTel)送信先や取得範囲を、開発者ごとの設定ではなく企業ポリシーで統一できるようになったことです。

すでにOTEL_*環境変数やVS Code設定でテレメトリーを収集している場合、収集基盤を全面的に作り直す更新ではありません。ただし、企業の管理値が環境変数やユーザー設定より優先されるため、既存の送信先、プロトコル、コンテンツ取得設定が意図せず上書きされないか確認が必要です。特に、認証ヘッダーがCopilot CLI側に渡らない点と、ターミナルで動くCLIがOTLP/HTTPのみを使用する点は、導入前に必ずテストすべきです。(The GitHub Blog)

2026年7月9日時点で確認できるGitHub公式Changelogの表記は、2026年7月8日付です。また、MDM・ファイルベースの配布機能は一般提供と案内されている一方、GitHub DocsのEnterprise managed settings referenceにはPublic Previewの表記があります。全社展開の前に、小規模なパイロット導入を行うのが安全です。(The GitHub Blog)

目次

まず確認したい結論:対応が必要な環境と不要な環境

今回の変更は、GitHub Copilotの利用者全員が設定を変更しなければならない更新ではありません。対応要否は、現在のOTel利用状況と企業のデータ統制方針で判断できます。

現在の状況対応優先度取るべき対応
開発者ごとにOTEL_*環境変数を設定している高現在の設定を棚卸しし、企業管理設定への移行を検討する
Copilotのトレースを承認済みコレクターへ集約したい高telemetryブロックを使った集中管理を導入する
認証必須のOTLPコレクターを利用している高VS CodeとCopilot CLIを分けて認証テストする
OTLP/gRPC専用のコレクターを利用している高ターミナルCLIのOTLP/HTTP送信を受けられるか確認する
MDM、サーバー管理、ファイル配布を併用している高管理チャネルの優先順位と設定の集約先を見直す
OTelを使っておらず、開発者による任意送信も許容している低直ちに変更する必要はない
OTelを使っていないが、外部送信を禁止したい高telemetry.enabledをfalseで管理し、ユーザーによる有効化を防ぐ

OTel出力は標準では無効です。ただし、管理ポリシーがなければ、開発者はVS Code設定や環境変数で個別に有効化できます。厳格なデータ持ち出し管理が必要な企業では、「使うための設定」だけでなく「使わせないための設定」としても検討する価値があります。(Visual Studio Code)

GitHub CopilotのOpenTelemetry管理で何が変わったのか

最大の変更は、GitHub Copilot Chat拡張機能とCopilot CLIを動かすエージェントホストに対し、共通の企業管理設定を配布できるようになったことです。

項目従来の主な方法今回追加された企業管理
OTelの有効化開発者がVS Code設定や環境変数を変更管理者が有効・無効を指定
送信先端末ごとにOTLPエンドポイントを設定承認済みコレクターへ固定
プロトコル開発者がHTTPまたはgRPCを選択管理者がotlp-httpまたはotlp-grpcを指定
サービス名OTEL_SERVICE_NAMEなどで個別指定企業共通のサービス名を配布
リソース属性チームごとに環境変数で設定部門や環境などの属性を集中管理
コンテンツ取得開発者がオン・オフを変更管理値と変更可否を指定
認証ヘッダー主に環境変数で設定管理設定から安全に配布
優先順位環境変数がユーザー設定より優先管理ポリシーが最優先

公式情報では、新しい独自テレメトリー形式を追加する更新ではなく、既存のOTel出力に企業向けの管理レイヤーを追加するものとして説明されています。そのため、既存のOTLP対応コレクターを利用している企業では、主に設定配布、認証、優先順位を見直すことになります。(The GitHub Blog)

企業が管理できるtelemetry設定

企業管理設定では、managed-settings.jsonのtelemetryブロックを使用します。

管理キー用途初期導入時の考え方
telemetry.enabledOTel出力の有効・無効パイロット対象だけ有効にする
telemetry.endpointOTLPコレクターの送信先検証用と本番用を分ける
telemetry.protocolotlp-httpまたはotlp-grpc最初はCLIとの互換性が高いHTTPを推奨
telemetry.captureContentプロンプト、応答、ツール内容の取得原則としてfalseから始める
telemetry.lockCaptureContentコンテンツ取得設定の変更を禁止captureContent:falseと併用する
telemetry.serviceNameOTelのservice.name集計しやすい固定名称を付ける
telemetry.resourceAttributes部門、環境などの付加属性個人情報や機密情報を入れない
telemetry.headers認証・ルーティング用ヘッダーCLIには届かない点を踏まえて設計する

管理値は、対応するVS Codeポリシーやエージェントホスト設定へ変換されます。コンテンツ取得については、取得値に加えて、開発者が変更できるかどうかも管理できます。(Visual Studio Code)

基本的な設定例は次のとおりです。

{
  "telemetry": {
    "enabled": true,
    "endpoint": "https://otel-collector.example.com",
    "protocol": "otlp-http",
    "captureContent": false,
    "lockCaptureContent": true,
    "serviceName": "copilot",
    "resourceAttributes": {
      "deployment.environment": "pilot",
      "department": "engineering"
    }
  }
}

認証ヘッダーが必要な場合は、次のようなheadersを追加できます。

{
  "telemetry": {
    "headers": {
      "Authorization": "Bearer <TOKEN>"
    }
  }
}

実際には、上記の断片だけで既存ファイルを上書きしてはいけません。すでにpermissions、model、enabledPluginsなどを管理している場合は、既存のトップレベル設定を残したままtelemetryブロックを追加します。

また、サンプルのトークンを長期固定トークンへ置き換えるだけでは不十分です。設定ファイルやMDMを閲覧できる管理者の範囲、漏えい時の失効手順、トークンの更新手順まで決めておく必要があります。

既存のVS Code設定や環境変数との互換性

既存のOTel設定は、今回の更新後も利用できます。変わるのは、どの値が最終的に採用されるかという優先順位です。

優先順位は2段階で考える

企業管理では、次の2種類の優先順位があります。

管理チャネルの優先順位
Native MDM > Server-managed > File-based

各テレメトリー値の優先順位
管理ポリシー > 環境変数 > ユーザー設定 > 既定値

管理チャネルはマージされません。最も優先度の高いチャネルに何らかの管理設定があれば、そのチャネルが全体の管理元となり、下位チャネルは無視されます。VS Codeでは、このチャネル優先制御がバージョン1.128から適用されます。(Visual Studio Code)

たとえば、Native MDMにはモデル設定だけを置き、Server-managed設定にはtelemetryブロックを置いたとします。この場合、Native MDMが管理チャネルとして選ばれるため、サーバー側のテレメトリー設定が適用されない可能性があります。

管理設定を複数チャネルに分散させず、最上位となる1つのチャネルへ集約することが重要です。

既存設定と管理キーの対応

目的既存のローカル設定企業管理キー
有効化github.copilot.chat.otel.enabled、COPILOT_OTEL_ENABLEDtelemetry.enabled
エンドポイントgithub.copilot.chat.otel.otlpEndpoint、OTEL_EXPORTER_OTLP_ENDPOINTtelemetry.endpoint
プロトコルgithub.copilot.chat.otel.exporterType、OTEL_EXPORTER_OTLP_PROTOCOLtelemetry.protocol
コンテンツ取得github.copilot.chat.otel.captureContent、COPILOT_OTEL_CAPTURE_CONTENTtelemetry.captureContent
サービス名OTEL_SERVICE_NAMEtelemetry.serviceName
リソース属性OTEL_RESOURCE_ATTRIBUTEStelemetry.resourceAttributes
認証ヘッダーOTEL_EXPORTER_OTLP_HEADERStelemetry.headers

管理対象になっていない項目は、従来どおり環境変数やユーザー設定へフォールバックします。一方、同じ項目に管理値がある場合、開発者が環境変数を変更しても管理値は上書きできません。(Visual Studio Code)

すべてのOTel機能が企業管理されるわけではない

既存のローカルOTel機能には、今回の企業管理スキーマに含まれていない項目もあります。

  • consoleやfileへのデバッグ出力
  • 属性サイズを制限するmaxAttributeSizeChars
  • ローカルSQLiteへトレースを保存するDB Span Exporter
  • OTelのログレベル
  • HTTPレベルの追加計装
  • JSON Linesファイルへの出力先

企業管理のtelemetry.protocolで指定できるのは、公開仕様上otlp-httpとotlp-grpcです。ローカルのコンソール出力やファイル出力まで、今回の設定ですべて集中管理できるわけではありません。(Visual Studio Code)

既存のサーバー管理ファイルも確認する

サーバー管理では、.github-privateリポジトリ内のcopilot/managed-settings.jsonが推奨パスです。従来の.github/copilot/settings.jsonも引き続きサポートされています。既存環境では、両方の場所に設定が分散していないか確認してください。(GitHub Docs)

VS CodeとCopilot CLIで異なる仕様

「VS CodeとCLIの両方に適用される」と聞くと、完全に同じ方法で送信されるように見えます。しかし、実際には実行プロセスや対応プロトコルに差があります。

確認項目VS CodeのCopilot ChatCopilot CLI・エージェントホスト
主な送信元Copilot Chat拡張機能CLI SDKまたは独立したCLIプロセス
管理エンドポイント対応対応
otlp-http対応対応
otlp-grpc対応ターミナルCLIはHTTPを使用
管理された認証ヘッダー拡張機能のExporterへ適用エージェントホストには渡されない
トレースの親子関係拡張機能内で関連付けられるターミナルCLIは独立したルートトレースになる
設定変更の反映再読み込みが必要な場合がある起動時に設定を計算するため再起動・再読み込みが重要

VS Code内のバックグラウンドエージェントとして動くCopilot CLI SDKでは、拡張機能側のラッパースパンとCLI側のネイティブスパンが同じトレースに表示されます。一方、「New Copilot CLI Session」から起動するターミナルCLIは別プロセスで動作し、独立したルートトレースとして送信されます。(Visual Studio Code)

ターミナルCLIはOTLP/HTTPのみを使用する

公式監視ガイドでは、ターミナルCLIのランタイムはotlp-httpのみをサポートするとされています。管理側でotlp-grpcを指定していても、ターミナルCLIはHTTPを使用します。(Visual Studio Code)

そのため、初回導入では次の構成が扱いやすいでしょう。

  • 管理プロトコルはotlp-httpにする
  • コレクター側でVS CodeとCLIの両方を受け付ける
  • gRPCを使う場合も、同じ送信先でHTTPを処理できるか確認する
  • VS Codeの成功だけで導入完了と判断しない

管理された認証ヘッダーはCLI側へ渡らない

telemetry.headersは、Copilot Chat拡張機能のOTLP Exporterにのみ適用されます。認証トークンがエージェントホストから起動されるツールのサブプロセスへ漏れることを防ぐため、環境変数としては受け渡されません。その結果、このリリースでは管理ヘッダーがエージェントホストへ配布されません。(Visual Studio Code)

コレクターが認証ヘッダーを必須としている場合、次のような状態が起こり得ます。

  • VS Codeのトレースは届く
  • Copilot CLIのトレースは認証エラーになる
  • 管理画面上は同じエンドポイントに見える
  • コレクター側では一部のサービスだけが欠落する

この制約があるため、telemetry.headersを設定しただけでVS CodeとCLIの認証が統一されたと判断してはいけません。

OpenTelemetryで取得される情報とプライバシー

標準設定では、プロンプト本文、応答本文、ツール引数などのコンテンツは取得されません。モデル名、トークン数、処理時間、ツール名、エラー情報などのメタデータが中心です。(Visual Studio Code)

captureContentを有効にすると、次の情報がスパン属性へ含まれる可能性があります。

  • ユーザーのプロンプト
  • Copilotの応答
  • システムプロンプト
  • ツールのスキーマ
  • ツールの引数と実行結果
  • コードやファイル内容
  • シェルコマンドやファイルパス

公式ドキュメントも、コンテンツ取得にはコード、ファイル内容、ユーザープロンプトなどの機密情報が含まれる可能性があるとして注意を促しています。(Visual Studio Code)

企業での初期値は、次の組み合わせが安全です。

{
  "captureContent": false,
  "lockCaptureContent": true
}

メタデータだけで、モデル別の処理時間、トークン使用量、ツール呼び出し回数、エラー傾向など、多くの運用分析が可能です。コンテンツ本文が本当に必要かは、メタデータのみのパイロットを実施した後に判断するとよいでしょう。(Visual Studio Code)

また、resourceAttributesには個人名、メールアドレス、顧客名、機密プロジェクト名を直接入れないようにします。チームや部門で集計したい場合は、社内で定義した識別子や分類コードを使用するほうが安全です。

導入に必要な条件と3つの配布方法

企業管理設定は、Native MDM、Server-managed、File-basedの3経路で配布できます。

配布方法主な用途配布先・場所注意点
Native MDMIntune、Jamf、Group Policyなどによる端末管理Windowsレジストリ、macOS管理対象設定Linuxでは利用できない
Server-managedGitHub上でのレビュー・履歴管理.github-private内のcopilot/managed-settings.jsonGitHubアカウントへのサインインが必要
File-basedChef、Puppet、AnsibleなどOSごとの既定パス配布漏れとファイル権限に注意

Native MDMの主な場所は次のとおりです。

OS場所
WindowsHKEY_LOCAL_MACHINE\SOFTWARE\Policies\GitHubCopilot
macOScom.github.copilotのManaged Preferences

ファイルベースの配置先は次のとおりです。

OSmanaged-settings.jsonの配置先
Windows%ProgramFiles%\GitHubCopilot\managed-settings.json
macOS/Library/Application Support/GitHubCopilot/managed-settings.json
Linux/etc/github-copilot/managed-settings.json

ファイルベース設定は、安全な所有者と権限で管理し、全ユーザーが書き込める状態やシンボリックリンクを避ける必要があります。また、設定ファイルが配布されなかった端末には制限が適用されません。(The GitHub Blog)

サーバー管理設定は通常、約1時間以内に更新されます。クライアントの再起動または再サインインで、より早く最新設定を取得できます。MDM管理では定期的にポリシーを確認し、VS CodeのDeveloper: Sync Account Policyコマンドでテスト用の同期を実行できます。(GitHub Docs)

ただし、ポリシーの取得が完了しても、起動中のエージェントホストは古いテレメトリー設定を保持することがあります。エンドポイントやプロトコルを変更した後は、VS Codeを再読み込みしてから検証してください。(Visual Studio Code)

導入手順

現在の設定を棚卸しする

最初に、開発者端末、開発コンテナー、CI環境、シェルプロファイルに設定されているOTel関連変数を確認します。

macOSやLinuxでは、次のコマンドで確認できます。

env | grep -E '^(OTEL_|COPILOT_OTEL_)'

PowerShellでは次のように確認できます。

Get-ChildItem Env: |
  Where-Object Name -Match '^(OTEL_|COPILOT_OTEL_)'

あわせて、VS Code設定で「copilot otel」を検索し、次の項目を確認します。

  • OTelが有効になっているか
  • 現在のOTLPエンドポイント
  • HTTPとgRPCのどちらを使用しているか
  • コンテンツ取得が有効か
  • ファイルやSQLiteへのローカル出力を使用しているか

収集目的を決める

「収集できるから収集する」のではなく、先に目的を決めます。

具体的には、次のどれを知りたいのかを明確にします。

  • モデル別の応答時間
  • トークン使用量
  • ツール呼び出しの成功率
  • エージェント処理の所要時間
  • エラーの種類
  • AI生成コードの受け入れ・拒否傾向

目的がメタデータで達成できるなら、captureContentを有効にする必要はありません。

管理チャネルを1つに集約する

既存のMDM管理があるなら、テレメトリー設定をサーバー管理へ分離せず、MDM側へまとめることを検討します。

反対に、端末グループ単位の制御が不要で、GitHub上のレビュー履歴を重視する場合は、Server-managed設定が適しています。

重要なのは、異なる管理項目を複数チャネルへ分散しないことです。

検証用コレクターを準備する

本番の監視基盤へ直接送る前に、検証用のOTLPエンドポイントを用意します。

次の項目を確認します。

  • OTLP/HTTPを受信できるか
  • OTLP/gRPCを使う場合もCLIのHTTP送信を処理できるか
  • TLS証明書をクライアントが信頼できるか
  • プロキシやファイアウォールを通過できるか
  • 認証ヘッダーなしのCLIをどう扱うか
  • 属性サイズやデータ量の上限
  • 保存期間と閲覧権限

小規模グループへ配布する

GitHub Docsでは、どの配布方法でも小規模な端末グループでパイロットを行ってから、広範囲へ展開することが推奨されています。(GitHub Docs)

パイロットでは、次の利用者を含めると問題を見つけやすくなります。

  • WindowsとmacOSの利用者
  • Linuxまたは開発コンテナーの利用者
  • VS CodeのCopilot Chat利用者
  • Copilot CLIの利用者
  • プロキシ経由の利用者
  • 複数のGitHubアカウントを切り替える利用者

適用されたポリシーを確認する

VS Codeでは、Developer: Policy Diagnosticsコマンドを実行すると、適用中のポリシーと使用されている管理チャネルを確認できます。(Visual Studio Code)

設定ファイルの内容だけを確認するのではなく、クライアントが実際に解決した値を確認することが重要です。

VS Codeを再読み込みしてからテストする

テレメトリー設定を変更した後は、次の順序で確認します。

  1. 管理ポリシーを同期する
  2. VS Codeを再読み込みする
  3. 新しいCopilot Chatセッションを開始する
  4. 読み取り専用のツール操作を1回実行する
  5. Copilot CLIでも別のセッションを開始する
  6. コレクター側で両方のトレースを確認する

導入テストで確認すべき項目

テスト操作期待する結果
管理チャネルPolicy Diagnosticsを実行想定したMDM、Server、Fileのいずれかが表示される
エンドポイント強制異なるOTEL_EXPORTER_OTLP_ENDPOINTを設定管理された送信先が使用される
VS Code送信Chatで安全な質問を実行拡張機能のトレースが届く
CLI送信Copilot CLIで安全な処理を実行CLI側のスパンが届く
プロトコルotlp-grpc構成でターミナルCLIを実行HTTPでの送信をコレクターが受け付ける
コンテンツ非取得captureContent:falseで実行プロンプトや応答本文が保存されない
設定ロックユーザーがコンテンツ取得を有効化管理ポリシーにより変更できない
認証ヘッダー必須コレクターへ送信VS CodeとCLIを別々に確認する
設定変更エンドポイントを変更して再読み込み古い送信先への新規送信が止まる
停止telemetry.enabled:falseを配布新しいOTelデータが送信されない

コンテンツ取得の確認では、機密コードを使わないテスト用ワークスペースを用意してください。誤ってcaptureContentが有効になっていた場合でも、実データを外部コレクターへ送らずに済みます。

失敗しやすいポイント

Server-managed設定が反映されない

Native MDMに別の管理設定が1つでも存在すると、MDMが管理チャネルとして選ばれ、Server-managedやFile-basedの設定が無視される可能性があります。

テレメトリー設定だけを見るのではなく、モデル、プラグイン、権限設定を含む管理設定全体を確認してください。

VS Codeでは届くがCLIでは届かない

代表的な原因は次の2つです。

  • 管理された認証ヘッダーがエージェントホストへ渡っていない
  • コレクターがgRPCのみを受け付け、CLIが送るHTTPを処理できない

まず、コレクターの401・403エラーと、HTTPエンドポイントの待ち受け状況を確認します。

設定変更後も古いコレクターへ送られる

エージェントホストは起動時にテレメトリー設定を計算します。ポリシー同期後にVS Codeを再読み込みしていない場合、古い設定が使われ続けることがあります。

一部の端末だけ設定が適用されない

ファイルベースでは、配布されていない端末にポリシーは適用されません。配置先、ファイル所有者、書き込み権限、シンボリックリンクの有無を確認します。

管理設定を削除したらOTelが再び有効になった

管理設定を削除すると、環境変数やユーザー設定へフォールバックします。緊急停止時にtelemetryブロックを削除するだけでは、開発者のOTEL_EXPORTER_OTLP_ENDPOINTによって再び有効になる可能性があります。

停止を確実にする場合は、まず次の設定を明示的に配布します。

{
  "telemetry": {
    "enabled": false
  }
}

その後、下位の管理チャネル、環境変数、VS Code設定に残っている値を整理します。

まとめ:最初に行うべきこと

GitHub Copilotのenterprise-managed OpenTelemetry exportは、OTelそのものを新しく導入する機能というより、VS CodeとCopilot CLIの観測設定を企業が統制するための更新です。

すでにOTelを利用している企業は、まずOTEL_*環境変数、VS Code設定、既存のmanaged-settings.jsonを棚卸ししてください。そのうえで、管理チャネルを1つに集約し、captureContent:falseとlockCaptureContent:trueを基本にパイロットを開始します。

検証では、VS Codeのトレースが届くだけで完了とせず、Copilot CLIのプロトコルと認証を必ず別に確認します。OTelを利用しない企業でも、開発者による任意の外部送信を防ぐ必要があるなら、telemetry.enabled:falseの企業管理を検討するのが次の行動です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次