CloudWatch と OpenTelemetry を使用した GitHub Copilot の使用状況の分析
OpenTelemetry を出力する Copilot 製品は 2 つあり、それぞれ異なるメトリクスを出力します。このレシピとそのダッシュボードは両方をカバーしています。
| VS Code Copilot Chat extension | GitHub Copilot CLI | |
|---|---|---|
service.name | copilot-chat | github-copilot |
| Tool metric prefix | copilot_chat.tool.call.* | github.copilot.tool.call.* |
| Default OTLP protocol | http/protobuf | http/json |
| Metric breadth | ~20 metrics | 5 metrics (tokens, LLM duration, tool count/duration, agent turns) |
ダッシュボードはいずれかの製品に @resource.service.name=~"copilot.*" でマッチし、2 つのツールメトリクス名を結合します。両方が gen_ai.client.token.usage と gen_ai.client.operation.duration(OTel GenAI セマンティック規約)を共有しています。VS Code 拡張機能のみが 出力するパネル(セッション、編集、フィードバック、コード行数、PR、最初のトークンまでの時間)には (VS Code) というラベルが付いています。メトリクス名は公式のVS Code モニタリングガイド、GitHub Copilot CLI の copilot help monitoring、および OTel GenAI セマンティック規約に基づいています。一部のメトリクスごとの内訳属性キー(例: 承認済み編集と拒否済み編集)は公開されていません。これらのパネルには合計値が表示されます(Copilot が出力するメトリクスを参照)。
Bearer トークン認証
ベアラートークン(CloudWatch メトリクス API キー)を使用すると、AWS 外部で実行されているツール(開発者のラップトップ上の Copilot など)が、AWS SDK や IAM 認証情報チェーンを必要とせずに CloudWatch にメトリクスを送信できます。各トークンは、CloudWatchAPIKeyAccess マネージドポリシーのみにスコープされた AWS IAM ユーザーに紐付けられています。
Bearer トークンは長期的な認証情報です。このレシピで Bearer トークンを使用しているのは、AI コーディングエージェントが AWS の外部にある開発者のラップトップ上で動作しており、短期的な認証情報を使用した SigV4 では中央コレクターまたはマシンごとのコレクタープロセスが必要になるためです。短期的な認証情報を使用した SigV4 が実現可能な AWS 内で動作するワークロードの場合は、より強固なセキュリティ体制のためにそのアプローチを優先してください。CloudWatch OTLP エンドポイントは HTTPS を必要とします。プレーンな HTTP によるリクエストは拒否されます。詳細については、CloudWatch OTLP Metrics Bearer Token Auth を参照してください。
ソリューションの概要
セットアップには 3 つのコンポーネントがあります。
- CloudWatch メトリクス API キー — 範囲を絞った IAM ユーザーに紐付けられたベアラートークンです 。開発者ごとに 1 回作成するか、チームで共有します。
- Copilot 設定 — VS Code の設定と環境変数で、Copilot の OpenTelemetry SDK にメトリクスの送信先と属性付けの方法を伝えます。
- 事前構築済みダッシュボード — トークン使用量、レイテンシー、ツールおよび開発者のアクティビティ、PromQL クエリを使用したチームレベルの使用状況を可視化する CloudWatch ダッシュボード(および Grafana 相当品)です。
前提条件
- CloudWatch および IAM リソースを作成する権限を持つ AWS アカウント。
- AWS CLI v2 がインストールおよび設定済みであること。
- 次のいずれか(または両方)の Copilot クライアント: GitHub Copilot Chat 拡張機能を使用して Copilot にサインインした VS Code、および/または認証済みの GitHub Copilot CLI(
copilot→/login、またはGITHUB_TOKENを使用)。 - CloudWatch メトリクス API キー(以下で作成)。
ベアラートークンを作成する
CloudWatch コンソール (設定 > API キーまでスクロール > 作成) または CLI を使用してトークンを作成できます。
# Create an IAM user for CloudWatch metrics ingestion
aws iam create-user --user-name copilot-cloudwatch-metrics-user
# Attach the CloudWatchAPIKeyAccess managed policy
aws iam attach-user-policy \
--user-name copilot-cloudwatch-metrics-user \
--policy-arn arn:aws:iam::aws:policy/CloudWatchAPIKeyAccess
# Create a service-specific credential (the bearer token), expiring in 90 days
aws iam create-service-specific-credential \
--user-name copilot-cloudwatch-metrics-user \
--service-name cloudwatch.amazonaws.com \
--credential-age-days 90
レスポンスには ServiceCredentialSecret フィールド — これはベアラートークンの値です。AWS Secrets Manager またはお客様の組織のボールトに安全に保存してください。バージョン管理にコミットしないでください。
Copilot を設定する
使用するクライアントを設定します。どちらも OTEL_RESOURCE_ATTRIBUTES(帰属のため)と OTEL_EXPORTER_OTLP_HEADERS(ベアラートークン用)に対応しています。<AWS_REGION>(例: us-east-1)と <YOUR_BEARER_TOKEN>(ServiceCredentialSecret の値)を全体で置き換えてください。
クライアントを起動するシェルで、以下の共通環境変数を最初に定義してください。
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer <YOUR_BEARER_TOKEN>"
export OTEL_RESOURCE_ATTRIBUTES="user.id=$(whoami),user.email=${USER_EMAIL},team.id=${TEAM:-engineering},cost_center=${COST_CENTER:-default},department=${DEPARTMENT:-engineering},environment=${ENV:-dev}"
VS Code Copilot Chat 拡張機能
settings.json で OTel を有効にします (認証ヘッダーは環境から取得する必要があります — VS Code のドキュメントには次のように記載されています: 「リモートコレクターの認証ヘッダーは、OTEL_EXPORTER_OTLP_HEADERS 環境変数を通じてのみ設定可能です」):
{
"github.copilot.chat.otel.enabled": true,
"github.copilot.chat.otel.otlpEndpoint": "https://monitoring.<AWS_REGION>.amazonaws.com",
"github.copilot.chat.otel.exporterType": "otlp-http"
}