Claude Code OpenTelemetry完全ガイド|企業向け利用状況モニタリング・コスト追跡・監査ログ設定

Claude Code OpenTelemetry完全ガイド|企業向け利用状況モニタリング・コスト追跡・監査ログ設定 AI開発

「チームメンバーが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やバックエンドに送信するのが本番環境での標準的な構成です。

OTLP/gRPC接続設定
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

複数のエクスポーター(マルチ出力)

コンソールとOTLPに同時送信
# カンマ区切りで複数のエクスポーターを指定
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の取り扱いに注意
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

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

Prometheusへの接続設定
export CLAUDE_CODE_ENABLE_TELEMETRY=1

# Prometheusスクレイプ形式でエクスポート
export OTEL_METRICS_EXPORTER=prometheus

# PrometheusがスクレイプするポートとパスはOTel SDKが自動設定
# デフォルト: http://localhost:9464/metrics

Jaeger(トレース可視化)

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

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.jsonenvフィールドを使って、OpenTelemetry設定をチーム全体に配布できます。Managed settings(Teams/Enterpriseプラン)と組み合わせると、個人が設定を変更できなくなります。

.claude/settings.json(チーム共有・OTel設定)
{
  "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分ごと)。

~/.claude/generate-otel-headers.sh(ヘッダー生成スクリプト)
#!/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}"}"
~/.claude/settings.json(動的ヘッダー設定)
{
  "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を設定してもデータが送られてきません。

ACLAUDE_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して指定することもできます。