はじめに
GitHub Copilotを組織で導入すると、こんな疑問が湧いてきます。
- エンジニアは実際に何を聞いているのか?
- どのくらい使われているのか?
- そもそもROIはあるのか?
GitHub Copilot EnterpriseにはDashboardがありますが、「どんなプロンプトを投げていて、AIがどう答えているか」 という会話レベルの可視性はほぼゼロです。通常のObservabilityスタック(Grafanaなど)でOTELログを受け取ることはできますが、プロンプトのメタデータやトークン数は見えても、エンジニアが何を考え・何を解決しようとしているかという 文脈(コンテキスト) はログだけでは読み取れません。
そこで今回、Pendo Agent Analytics というAIエージェント向けの可視化プラットフォームを使って、GitHub CopilotのOTELテレメトリを会話レベルで分析できるようにしてみました。
Pendo Agent Analyticsとは
Pendo はプロダクトアナリティクスで知られるSaaSですが、その中の Agent Analytics は AIエージェント専用の可視化ソリューションです。従来のObservabilityツールと大きく異なる点は、「誰が・何を・どう聞いて・AIがどう答えたか」という会話の文脈をユーザー単位で追跡できることです。収集したデータから以下のインサイトが得られます。
- 概要指標:使用量・ユニーク訪問者・リテンション・ユーザーの反応・問題発生率・レイジプロンプト率・未対応率・エラー率を経時的に追跡できる(参考:AIエージェントとのインタラクションを分析する)
- ユースケースの自動分類:プロンプトや会話の意味的な類似性をもとにユースケースを自動提示。コードレビューなのか、リファクタリングなのか、バグ修正なのか。エンジニアがCopilotを何に使っているかを把握できる(参考:AIエージェントのユースケースを分析および追跡する)
- Issuesの自動検出:エージェントがうまく答えられていない会話を自動で検出し、テーマごとにグループ化。改善すべきポイントを特定できる(参考:AIエージェントの問題を特定して追跡する)
- 会話トランスクリプト:ユーザーの質問とエージェントの応答をスレッド形式で確認でき、トレーニングデータやドキュメント改善の材料にもなる(参考:全会話を表示する)
- 効果測定:異なるモデル・構成・ツールのパフォーマンスを比較し、変更の影響を定量的に評価できる(参考:AIエージェントのバージョンを効果測定で比較する)
OTELベースではなく、独自のConversations APIでデータを受け取る仕様です。そこで、OTELをPendoのスキーマに変換するプロキシを自作して繋いでみました。
課題:従来のObservabilityでは「全体像」が見えない
GitHub CopilotはOpenTelemetry(OTEL)に対応しており、VS Codeの設定を少し変えるだけでOTLPログを外部へ送れます。
{
"github.copilot.chat.otel.enabled": true,
"github.copilot.chat.otel.otlpEndpoint": "http://localhost:4318",
"github.copilot.chat.otel.captureContent": true
}
こういったメタデータが見えます。
-
gen_ai.usage.input_tokens/output_tokens(トークン数) -
gen_ai.request.model(使用モデル) -
execute_toolスパン(ツール呼び出し) - レスポンス時間
でも、これだと 「エンジニアが何を聞いたか」「AIがどう答えたか」 という個別の会話内だけはみえるが、一個一個見ていくのは現実的ではありません。マネージャーや経営層に「Copilotって効いてるの?」と聞かれたとき、トークン数やレイテンシを見せても納得感が薄い。
必要なのはエンジニアリングメトリクスではなく、ビジネス文脈での可視化です。
解決策:OTEL → Pendo Agent Analytics プロキシ
Pendo Agent Analyticsは、AIエージェントのパフォーマンスを可視化するソリューションです。主な特徴はこちら。
- 会話・プロンプト・レスポンスを収集してユーザー行動を分析
- ROIの可視化(エージェントが本当にビジネス価値を生んでいるか)
アーキテクチャ
GitHub Copilot(VS Code)
│ OTLP/HTTP
▼
agentanalyticsOTELproxy(Sinatra + Puma)
│ 生OTLPをそのまま転送
│ トレース変換(invoke_agent ツリーを解析)
▼
Pendo Conversations API
│
▼
Pendo Agent Analytics ダッシュボード
リポジトリ:Band-Aid/agentanalyticsOTELproxy
スタックはRuby(Sinatra + Puma)、プロトコルバッファのデコードに google-protobuf、テストにRSpec + WebMockを使っています。
何が取れるのか
Copilot ChatはOTELの規約に従い、エージェントターンごとに invoke_agent スパンを1つ発行します。その配下に chat スパンや execute_tool スパンがぶら下がります。captureContent: true を有効にすると、スパンには gen_ai.input.messages(プロンプト全文)と gen_ai.output.messages(レスポンス全文)も入ってきます。
プロキシが収集してPendoに送るデータ:
| OTELソース | Pendoフィールド | 概要 |
|---|---|---|
gen_ai.input.messages |
props.content(prompt) |
ユーザープロンプト全文 |
gen_ai.output.messages |
props.content(agent_response) |
AIレスポンス全文(thinkingブロック含む) |
gen_ai.usage.input_tokens |
agentInputTokenCount |
入力トークン数 |
gen_ai.usage.output_tokens |
agentOutputTokenCount |
出力トークン数 |
execute_tool スパン |
toolsUsed |
呼び出したツール一覧 |
gen_ai.conversation.id |
conversationId |
会話ID(マルチターン対応) |
gen_ai.request/response.model |
agentModelsUsed |
使用モデル(複数対応) |
copilot_chat.user.feedback |
user_reaction |
👍/👎フィードバック |
resource user.id
|
visitor_id |
エンジニアのID |
thinking / reasoning ブロックにも対応しており、Copilotの思考プロセスもレスポンス内容に含めて送れます。なお、Pendo側にthinkingなのかagent responseなのか判別するためのプロパティがないため、すべてagent responseとして収集されてしまうのは玉に瑕。今後に期待。
セットアップ手順
1. プロキシを起動する
git clone https://github.com/Band-Aid/agentanalyticsOTELproxy
cd agentanalyticsOTELproxy
cp .env.example .env
# .env に PENDO_TRACK_EVENT_SECRET を設定
docker compose up --build
.env の主要設定:
PENDO_TRACK_EVENT_SECRET=your_secret_here
PENDO_ENDPOINT=https://data.pendo.io/data/agentic # JPNリージョンは data.jpn.pendo.io
PENDO_AGENT_ID=github-copilot
DEFAULT_VISITOR_ID=copilot-anonymous
注意:
PENDO_TRACK_EVENT_SECRETはPendoのJS埋め込みコードのサブスクリプションキーではなく、Subscription Settings → App Details → Show から取得できる「Track Event Shared Secret」です。
2. VS Code Copilotをプロキシに向ける
settings.json に追記:
{
"github.copilot.chat.otel.enabled": true,
"github.copilot.chat.otel.otlpEndpoint": "http://localhost:4318",
"github.copilot.chat.otel.captureContent": true
}
captureContent: true がなければプロンプト・レスポンスの内容は空になります(トークン数等のメタデータのみ)。
3. 動作確認
Copilot Chatで何か質問を投げて、プロキシのログを確認:
INFO OTLP→Pendo proxy ready on 0.0.0.0:4318
INFO transformed trace 0123… → prompt=true response=true reactions=0
INFO pendo POST prompt ok (202)
INFO pendo POST agent_response ok (202)
Pendo上での可視化
実際にプロキシを動かして、PendoのAgent Analyticsにこんな会話が流れてきました。
「Conversations」タブでは、エンジニアが投げた最初のプロンプト一覧が見えています。
is this SEO/AEO optimized?wheres the decode logic?
会話をクリックすると、AIのレスポンス全文が確認できます。上のスクリーンショットでは「SEO/AEOの監査結果」がPendo上で可視化されており、Copilotが5つのツールを実行して71秒かけて回答したこと、具体的なGood/Issuesまで把握できます。
こういった可視性があることで、例えば:
- エンジニアがどんな種類の質問をしているか(コードレビュー?設計相談?デバッグ?)を分類できる
- 特定のプロンプトパターンでROIが高いかどうかを評価できる
- コンプライアンス上問題のあるプロンプト(機密情報を含むなど)を検出できる
他にトピックの洗い出しや問題点を可視化できます。
まとめ
| 観点 | 従来のObservability(Tempo等) | Pendo Agent Analytics(今回) |
|---|---|---|
| トークン数・レイテンシ | ✅ 見える | ✅ 見える |
| 会話内容・プロンプト | △ 個別設定 | ✅ 見える |
| ユーザー別の利用状況 | △ 設定次第 | ✅ 見える |
| ROI・ビジネス貢献度 | ❌ 難しい | ✅ 見える |
| ユースケースの把握 | ❌ 難しい | ✅ 見える |
| 問題の検知 | ❌ 難しい | ✅ 見える |
GitHub CopilotのOTELとPendo Agent Analyticsを組み合わせることで、**「エンジニアリングメトリクス」から「ビジネス文脈での可視化」**へ一段階上のAI投資管理ができるようになりました。
「Copilotに課金してるけど、本当に使われてる?効いてる?」という問いに答えるための一つのアプローチとして、ぜひ試してみてください。


