「チームメンバーがClaude Codeをどれくらい使っているのか把握したい」「部門ごとのAPIコストを可視化してコスト配賦したい」「どのツール・コマンドが多く実行されているか監査ログを残したい」——こうした企業ニーズに応えるのが、Claude CodeのOpenTelemetry統合です。
Claude CodeはOpenTelemetry(OTel)に対応しており、Datadog・Prometheus・Jaeger・New Relicなどの観測ツールと連携してセッション数・トークン消費量・コスト・コード変更行数・エラー発生数などのメトリクスをリアルタイムで収集できます。この記事では、設定方法・メトリクス一覧・実践的な活用パターンを解説します。
Claude Code全般の概要はClaude Code完全ガイドを、settings.jsonの設定はsettings.json完全リファレンスを、クラウドプロバイダ統合はクラウドプロバイダ統合ガイドを参照してください。
OpenTelemetryとは
OpenTelemetry(OTel)は、アプリケーションのメトリクス・ログ・トレースを収集するためのオープンスタンダードな観測フレームワークです。ベンダー中立でDatadog・Prometheus・Jaeger・New Relic・Grafanaなどに対応しており、一度設定すれば複数のバックエンドに同時にデータを送信することもできます。
| データ種別 | 説明 | Claude Codeでの例 |
|---|---|---|
| メトリクス | 数値の集計(カウント・時間・コスト) | セッション数・トークン消費量・コスト |
| ログ(イベント) | タイムスタンプ付きの出来事の記録 | ツール実行・APIリクエスト・エラー |
| トレース | リクエストの処理フローの追跡 | (将来対応予定) |
OpenTelemetryの基本設定
最小構成:コンソール出力で動作確認
# テレメトリを有効化 export CLAUDE_CODE_ENABLE_TELEMETRY=1 # コンソールに出力(動作確認用) export OTEL_METRICS_EXPORTER=console export OTEL_LOGS_EXPORTER=console # エクスポート間隔を短くして確認しやすくする export OTEL_METRIC_EXPORT_INTERVAL=5000 # 5秒ごと claude
OTLP/gRPC接続(本番環境向け)
OTLP(OpenTelemetry Protocol)を使ってCollectorやバックエンドに送信するのが本番環境での標準的な構成です。
export CLAUDE_CODE_ENABLE_TELEMETRY=1 # メトリクスとログをOTLPで送信 export OTEL_METRICS_EXPORTER=otlp export OTEL_LOGS_EXPORTER=otlp # プロトコルとエンドポイントを指定 export OTEL_EXPORTER_OTLP_PROTOCOL=grpc export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 # 認証ヘッダー(バックエンドが必要とする場合) export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token" claude
複数のエクスポーター(マルチ出力)
# カンマ区切りで複数のエクスポーターを指定 export OTEL_METRICS_EXPORTER=console,otlp export OTEL_LOGS_EXPORTER=console,otlp
環境変数リファレンス
| 環境変数 | 説明 | 例・デフォルト |
|---|---|---|
CLAUDE_CODE_ENABLE_TELEMETRY |
テレメトリの有効化(必須) | 1 |
OTEL_METRICS_EXPORTER |
メトリクスのエクスポーター | otlp / console / prometheus |
OTEL_LOGS_EXPORTER |
ログのエクスポーター | otlp / console |
OTEL_EXPORTER_OTLP_PROTOCOL |
OTLPプロトコル | grpc / http/json / http/protobuf |
OTEL_EXPORTER_OTLP_ENDPOINT |
OTLPコレクターのエンドポイント | http://localhost:4317 |
OTEL_EXPORTER_OTLP_HEADERS |
OTLPリクエストのヘッダー | Authorization=Bearer token |
OTEL_METRIC_EXPORT_INTERVAL |
メトリクス送信間隔(ミリ秒) | デフォルト60000(60秒) |
OTEL_LOGS_EXPORT_INTERVAL |
ログ送信間隔(ミリ秒) | デフォルト5000(5秒) |
OTEL_LOG_USER_PROMPTS |
ユーザーのプロンプト内容をログに含める | 1で有効(デフォルト無効) |
OTEL_LOG_TOOL_DETAILS |
ツール名・MCP名をログに含める | 1で有効(デフォルト無効) |
OTEL_RESOURCE_ATTRIBUTES |
リソース属性(部門・チーム情報等) | department=engineering,team.id=platform |
OTEL_METRICS_INCLUDE_SESSION_ID |
セッションIDをメトリクスに含める | true(デフォルト) |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID |
アカウントUUIDをメトリクスに含める | true(デフォルト) |
OTEL_LOG_USER_PROMPTS=1を有効にすると、ユーザーが入力したプロンプトの内容がテレメトリデータとして送信されます。機密情報が含まれる可能性があるため、送信先のバックエンドのセキュリティを確認した上で使用してください。デフォルトでは無効です。利用可能なメトリクス一覧
メトリクス(集計値)
| メトリクス名 | 説明 | 単位 |
|---|---|---|
claude_code.session.count |
開始されたセッション数 | count |
claude_code.lines_of_code.count |
追加・削除されたコード行数 | count |
claude_code.pull_request.count |
作成されたPRの数 | count |
claude_code.commit.count |
作成されたコミットの数 | count |
claude_code.cost.usage |
セッションのAPIコスト | USD |
claude_code.token.usage |
使用されたトークン数 | tokens |
claude_code.code_edit_tool.decision |
ファイル編集ツールのAllow/Deny判断回数 | count |
claude_code.active_time.total |
アクティブな作業時間 | seconds |
イベント(ログ)
| イベント名 | 説明 |
|---|---|
claude_code.user_prompt |
ユーザーがプロンプトを送信したとき |
claude_code.tool_result |
ツールの実行が完了したとき |
claude_code.api_request |
Claude APIへのリクエスト送信時 |
claude_code.api_error |
APIリクエストのエラー発生時 |
claude_code.tool_decision |
ツール使用の権限判断が行われたとき |
標準属性(全メトリクス・イベントに付与)
| 属性 | 説明 |
|---|---|
session.id |
セッションのユニークID |
app.version |
Claude Codeのバージョン |
organization.id |
組織UUID |
user.account_uuid |
アカウントUUID |
user.email |
ユーザーのメールアドレス(OAuth認証時) |
terminal.type |
使用ターミナルの種類(iTerm2・vscode・tmux等) |
主要バックエンド別の設定例
Datadog
export CLAUDE_CODE_ENABLE_TELEMETRY=1 export OTEL_METRICS_EXPORTER=otlp export OTEL_LOGS_EXPORTER=otlp export OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf # Datadogエージェントのエンドポイント(ローカルエージェント経由) export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 # または直接Datadog OTLPエンドポイントへ(エージェント不要) # export OTEL_EXPORTER_OTLP_ENDPOINT=https://api.datadoghq.com/api/intake/otlp/v1/metrics # export OTEL_EXPORTER_OTLP_HEADERS="DD-API-KEY=your-datadog-api-key"
Prometheus
export CLAUDE_CODE_ENABLE_TELEMETRY=1 # Prometheusスクレイプ形式でエクスポート export OTEL_METRICS_EXPORTER=prometheus # PrometheusがスクレイプするポートとパスはOTel SDKが自動設定 # デフォルト: http://localhost:9464/metrics
Jaeger(トレース可視化)
export CLAUDE_CODE_ENABLE_TELEMETRY=1 export OTEL_METRICS_EXPORTER=otlp export OTEL_LOGS_EXPORTER=otlp export OTEL_EXPORTER_OTLP_PROTOCOL=grpc export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
New Relic
export CLAUDE_CODE_ENABLE_TELEMETRY=1 export OTEL_METRICS_EXPORTER=otlp export OTEL_LOGS_EXPORTER=otlp export OTEL_EXPORTER_OTLP_PROTOCOL=grpc export OTEL_EXPORTER_OTLP_ENDPOINT=https://otlp.nr-data.net:4317 export OTEL_EXPORTER_OTLP_HEADERS="api-key=your-new-relic-license-key"
企業向けの実践的な活用パターン
部門・チームごとのコスト追跡
OTEL_RESOURCE_ATTRIBUTESで部門・チーム・コストセンター情報を付与することで、部門別のAPIコストを可視化できます。
# 部門・チーム情報を属性として付与 export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123" # 注意: スペースや特殊文字は使えない(アンダースコアで代替) # NG: export OTEL_RESOURCE_ATTRIBUTES="team.name=Platform Team" # OK: export OTEL_RESOURCE_ATTRIBUTES="team.name=Platform_Team"
設定後はclaude_code.cost.usageメトリクスをこれらの属性でフィルタリングすることで、チームごとの月次コストをダッシュボードに表示できます。
管理者設定でチーム全体に配布する
企業の管理者はsettings.jsonのenvフィールドを使って、OpenTelemetry設定をチーム全体に配布できます。Managed settings(Teams/Enterpriseプラン)と組み合わせると、個人が設定を変更できなくなります。
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.your-company.internal:4317"
}
}
動的ヘッダー更新(トークン自動更新)
バックエンドへの認証トークンが定期的に更新される場合、otelHeadersHelperスクリプトを設定するとClaude Codeが自動でトークンを更新してヘッダーに挿入します(デフォルト29分ごと)。
#!/bin/bash
# 認証トークンを取得して JSON で出力
TOKEN=$(curl -s -X POST https://auth.internal/token \
-d "grant_type=client_credentials&client_id=claude-code" \
| jq -r '.access_token')
echo "{"Authorization": "Bearer ${TOKEN}"}"
{
"otelHeadersHelper": "~/.claude/generate-otel-headers.sh",
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_METRICS_EXPORTER": "otlp",
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://collector.example.com:4317"
}
}
監査ログ:ツール実行の記録
セキュリティ・コンプライアンス目的でClaude Codeのツール実行を監査ログとして記録できます。OTEL_LOG_TOOL_DETAILS=1を有効にすると、どのツールが実行されたかがログに記録されます。
export CLAUDE_CODE_ENABLE_TELEMETRY=1 export OTEL_LOGS_EXPORTER=otlp export OTEL_EXPORTER_OTLP_ENDPOINT=http://siem.company.internal:4317 # ツール名をログに含める(セキュリティ監査向け) export OTEL_LOG_TOOL_DETAILS=1 # プロンプト内容もログに含める場合(機密情報に注意) # export OTEL_LOG_USER_PROMPTS=1
よくある質問
QOpenTelemetryを設定してもデータが送られてきません。
A①CLAUDE_CODE_ENABLE_TELEMETRY=1が設定されているか確認。②まずOTEL_METRICS_EXPORTER=consoleでコンソール出力されるか確認。③エンドポイントのURLとポートが正しいか確認(gRPCは4317番、HTTP/JSON・HTTP/Protobufは4318番が一般的)。④ファイアウォールでポートがブロックされていないか確認してください。
Qクラウドプロバイダ(Bedrock/Vertex AI)経由で使うとテレメトリはどうなりますか?
Aクラウドプロバイダ経由の場合、Anthropicへのデフォルトテレメトリ(Statsig・Sentry)はデフォルトでオフになります。OpenTelemetry設定(CLAUDE_CODE_ENABLE_TELEMETRY=1)は独立していて、クラウドプロバイダとは関係なく自社のCollectorにデータを送ることができます。
Qdelta temporalityとcumulative temporalityの違いは何ですか?
Adeltaは前回エクスポートからの増分(差分)を送信します。cumulativeは開始からの累積値を送信します。Prometheusはcumulativeを、Datadogはdeltaを推奨しています。OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE=deltaで切り替えられます。
Q個人の開発者もOpenTelemetryを使えますか?
Aはい、個人でも使えます。ローカルにJaegerやGrafana+Prometheusを起動して接続することができます。Docker Composeで簡単に構築できるOTelスタックが多数公開されています。ただし、主なユースケースは企業でのチーム全体の監視・コスト追跡・監査ログです。
QOTEL_RESOURCE_ATTRIBUTESに日本語(マルチバイト文字)は使えますか?
A技術的にはUTF-8文字列を使えますが、特殊文字・スペース・カンマはパーサーに誤解される可能性があります。バックエンドツールによっては正しく表示されないケースもあります。ASCII英数字・アンダースコア・ハイフンを使うことを推奨します。日本語の値はpercent-encodeして指定することもできます。
