利用状況の計測
OpenTelemetry で Claude Code の使用量・コスト・ツール活動を書き出す設定と、環境変数・スパン・メトリクス・イベントの全一覧、チーム分析ダッシュボードの見方です。
Claude Code は、メトリクスを時系列データとして、イベントをログ/イベントのプロトコルで、さらに分散トレースを(ベータで)OpenTelemetry(OTel)経由で出力できます。組織全体の使用量・コスト・ツール活動を自前の可観測性基盤で追うための仕組みです。Team・Enterprise の管理画面にある分析ダッシュボードは、このページの最後で説明します。
- 環境変数
CLAUDE_CODE_ENABLE_TELEMETRY=1で有効にし、エクスポーターを選ぶ - 管理者は管理設定で全ユーザーの送り先を固定できる
- メトリクス・イベント・トレース(ベータ)の 3 種類を出せる
- プロンプトやツール内容は既定で伏せられ、環境変数で個別に出す
- コストの扱いはコストを抑える、管理設定の配り方は組織への導入と管理設定を参照
クイックスタート#
環境変数で設定します。
# 1. Enable telemetry
export CLAUDE_CODE_ENABLE_TELEMETRY=1
# 2. Choose exporters (both are optional - configure only what you need)
export OTEL_METRICS_EXPORTER=otlp # Options: otlp, prometheus, console, none
export OTEL_LOGS_EXPORTER=otlp # Options: otlp, console, none
# 3. Configure OTLP endpoint (for OTLP exporter)
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
# 4. Set authentication (if required)
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token"
# 5. For debugging: reduce export intervals, and reset them for production use
export OTEL_METRIC_EXPORT_INTERVAL=10000 # 10 seconds (default: 60000ms)
export OTEL_LOGS_EXPORT_INTERVAL=5000 # 5 seconds (default: 5000ms)
# 6. Run Claude Code
claude
- メトリクスの確認は、バックエンドに
claude_code.session.count(セッション開始時に出る)が届いたかを見る。ログだけの構成は、プロンプトを送ってclaude_code.user_promptイベントを探す - 何も届かなければ
claude --debug-file <path>で起動してログを見る。設定したエクスポーターの失敗は[3P telemetry]のエラー(3P は第三者の意味)として出る。[Anthropic telemetry]で始まる行は Anthropic 自身の運用テレメトリで、設定の問題ではない(セキュリティとデータの扱いを参照)
管理者による設定#
管理設定のファイルで、全ユーザーの OpenTelemetry 設定を配れます(配布方法は組織への導入と管理設定、優先順位は設定ファイルの仕組み)。
{
"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.example.com:4317",
"OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer example-token"
}
}
- デスクトップアプリの Code タブのセッションは、種類ごとに届く管理設定の取得元から読みます(デスクトップアプリ)。管理コンソールの「Data and privacy settings」にある「Monitoring」の OpenTelemetry フォームは Cowork のセッション専用で、ターミナルの CLI も Code タブもそこで指定したコレクターへは出力しません
- リポジトリの
.claude/settings.jsonと.claude/settings.local.jsonにある OpenTelemetry のエクスポーター変数は無視されます。リポジトリ側から、テレメトリを有効にする・送り先を決める・内容を取り出す、はできません。管理設定か、開発者のシェル・~/.claude/settings.jsonに置きます。ただしリポジトリはOTEL_LOGS_EXPORTERのようなエクスポーター選択をnoneにして信号を止めることはできます(管理設定・--settingsファイル・起動環境が同じ変数を設定していない場合) - Claude Code は、起動するサブプロセス(Bash ツール・フック・MCP サーバー・言語サーバー)に
OTEL_*環境変数を渡しません。Bash ツールで動かす OpenTelemetry 計装済みアプリが自分でテレメトリを出すなら、そのコマンドで変数を直接指定します
管理設定が OTLP の送り先を固定する仕組み#
管理設定に OTEL_EXPORTER_OTLP_* 変数を置くと、起動時に、衝突する開発者設定の変数を Claude Code が取り除き、デバッグログに警告を書きます。
| 管理設定で置いた変数 | 取り除かれる開発者設定 |
|---|---|
OTEL_EXPORTER_OTLP_ENDPOINT |
信号別のエンドポイントすべて(信号別を管理設定で重ねて置く必要はない) |
OTEL_EXPORTER_OTLP_PROTOCOL |
信号別のプロトコルすべて |
OTEL_EXPORTER_OTLP_HEADERS・OTEL_EXPORTER_OTLP_CLIENT_KEY・OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE |
その変数の信号別版と、汎用・信号別すべてのエンドポイント変数(資格情報が管理設定の選んでいないコレクターへ届くのを防ぐため) |
OTEL_METRICS_EXPORTER・OTEL_LOGS_EXPORTER・OTEL_TRACES_EXPORTER(ベータ) |
取り除かれない。通常のキー別の優先順位に従い、開発者設定で信号を無効にしたりコンソール出力にしたりできる。固定したいなら管理設定でも置く。管理者の取得元をまたぐときは OTEL_LOGS_EXPORTER がテレメトリの単位で動き、他の 2 つはキーごとに統合される(v2.1.223 以降) |
詳細ベータトレースが有効なときの BETA_TRACING_ENDPOINT |
下記の管理設定が、どちらかの信号の送り先を決めていると、開発者設定の値が取り除かれる |
詳細ベータトレースでは、ログとトレースをログ/トレースのエクスポーターではなく BETA_TRACING_ENDPOINT に出します。次のいずれかが管理設定にあると、開発者の BETA_TRACING_ENDPOINT は取り除かれます。
- 汎用またはログ・トレース用のエンドポイントや資格情報
otelHeadersHelper- ログまたはトレースのエクスポーター選択が
none・console・空(信号をコレクターから外す値) CLAUDE_CODE_ENABLE_TELEMETRYをオフにしたもの
メトリクス用だけのエンドポイントや資格情報では取り除かれません。v2.1.251 より前は、管理設定がコレクターを固定していても、開発者の BETA_TRACING_ENDPOINT が詳細ベータトレースのログとトレースを別の送り先へ振っていました。
- 管理設定の中に自分で置いた信号別の変数は取り除かれないので、信号ごとに別のコレクターへ振れます(SIEM の例は後の節)。信号別の資格情報を管理設定に置くと、その信号の開発者設定のエンドポイントは取り除かれます
- 取り除くのは配信先の話で、Claude Code が何を収集するかは変わりません
- v2.1.217 より前は、全変数がキー別の優先順位に独立に従い、ユーザー設定やシェルで信号別のエンドポイントを置くと、その信号が管理設定のコレクターから外れていました
- デスクトップアプリやセルフホスト環境のランナーが OTLP のエンドポイントを環境に入れて起動した場合も、同じ形で送り先が固定され、起動側が自分で置いた変数は取り除かれません(v2.1.251 以降)
設定の詳細#
共通の設定変数#
全構成で、エクスポーター・エンドポイント・エクスポートの動作を設定する変数です。信号別のエンドポイントやプロトコル(OTEL_EXPORTER_OTLP_METRICS_ENDPOINT など)を置くと、その信号では汎用変数より優先されます。信号別のヘッダー変数は、汎用の OTEL_EXPORTER_OTLP_HEADERS と統合されます。管理設定のあるマシンで何が取り除かれるかは前の節を見てください。
| 環境変数 | 説明 | 値の例 |
|---|---|---|
CLAUDE_CODE_ENABLE_TELEMETRY |
テレメトリ収集を有効にする(必須) | 1 |
OTEL_METRICS_EXPORTER |
メトリクスのエクスポーター種別(カンマ区切り)。none で無効 |
console、otlp、prometheus、none |
OTEL_LOGS_EXPORTER |
ログ/イベントのエクスポーター種別(カンマ区切り)。none で無効 |
console、otlp、none |
OTEL_EXPORTER_OTLP_PROTOCOL |
全信号に適用する OTLP のプロトコル。既定のプロトコルは無いので、otlp を使う各エクスポーターに、これか信号別の変数を設定する |
grpc、http/json、http/protobuf |
OTEL_EXPORTER_OTLP_ENDPOINT |
全信号の OTLP コレクターのエンドポイント | http://localhost:4317 |
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL |
メトリクスのプロトコル(汎用より優先) | grpc、http/json、http/protobuf |
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT |
メトリクスのエンドポイント(汎用より優先) | http://localhost:4318/v1/metrics |
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL |
ログのプロトコル(汎用より優先) | grpc、http/json、http/protobuf |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT |
ログのエンドポイント(汎用より優先) | http://localhost:4318/v1/logs |
OTEL_EXPORTER_OTLP_HEADERS |
OTLP の認証ヘッダー | Authorization=Bearer token |
OTEL_EXPORTER_OTLP_METRICS_HEADERS |
メトリクスの認証ヘッダー(汎用と統合) | Authorization=Bearer token |
OTEL_EXPORTER_OTLP_LOGS_HEADERS |
ログの認証ヘッダー(汎用と統合) | Authorization=Bearer token |
OTEL_METRIC_EXPORT_INTERVAL |
エクスポート間隔(ミリ秒。既定 60000) | 5000、60000 |
OTEL_LOGS_EXPORT_INTERVAL |
ログのエクスポート間隔(ミリ秒。既定 5000) | 1000、10000 |
OTEL_LOG_USER_PROMPTS |
ユーザープロンプトの内容を記録する(既定は無効) | 1 で有効 |
OTEL_LOG_ASSISTANT_RESPONSES |
assistant_response イベントにアシスタントの応答テキストを記録する(既定は無効)。未設定なら OTEL_LOG_USER_PROMPTS の値に従う。v2.1.193 以降 |
1 で有効、0 で伏せたまま |
OTEL_LOG_TOOL_DETAILS |
ツールのイベントとトレースのスパン属性に、ツールのパラメータと入力引数(Bash コマンド・MCP サーバー名とツール名・スキル名・ユーザーが書いたワークフロー名・ツール入力)を記録する。user_prompt イベントのカスタム・プラグイン・MCP コマンド名や、コスト・トークンのカウンターの実際のエージェント名・スキル名・プラグイン名・MCP サーバー名とツール名も出す(既定は無効)。Claude Desktop 組み込みのサーバーは、Desktop が管理するセッションでは、フラグがオフでも tool_decision/tool_result に mcp_server_name/mcp_tool_name が出る(この例外は v2.1.214 以降) |
1 で有効 |
OTEL_LOG_TOOL_CONTENT |
tool.output スパンイベントにツールの内容を記録する(既定は無効)。スパン属性のツール内容は別のゲートに従う。トレースが必要。内容はコンテンツ上限(既定 60 KB)で切られる |
1 で有効 |
OTEL_LOG_MANAGED_SETTINGS |
秘匿処理した管理設定と、秘匿前の SHA-256 ダイジェストを、managed settings resolved イベントに足す(既定は無効)。プロジェクト・ローカル設定の値では有効にならない。v2.1.274 以降 | 1 で有効 |
OTEL_LOG_RAW_API_BODIES |
Anthropic Messages API の要求・応答 JSON 全体を api_request_body/api_response_body のログイベントとして出す(既定は無効)。本文は会話履歴全体を含む。有効にすると OTEL_LOG_USER_PROMPTS・OTEL_LOG_TOOL_DETAILS・OTEL_LOG_TOOL_CONTENT が明らかにする内容すべてに同意したことになる |
1 でインライン(コンテンツ上限で切る)、file:<dir> でディスクに切らずに出しイベントに body_ref を付ける |
CLAUDE_CODE_OTEL_CONTENT_MAX_LENGTH |
コンテンツ上限:モデル応答・ツール内容・システムプロンプト・生の API 本文などの内容を持つ属性の最大長(切り詰めの印を含む。UTF-16 コード単位。既定 61440=60 KB)。属性値を 64 KB に制限するバックエンド向けの値で、大きな値を受けられるときだけ上げ、量を減らすなら下げる。OpenTelemetry SDK の属性上限(OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT やそのログレコード・スパン用の変種)がより小さければ、そちらで切る。v2.1.214 以降 |
262144 |
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
メトリクスの時間性(既定 delta)。バックエンドが累積を期待するなら cumulative |
delta、cumulative |
CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS |
動的ヘッダーの更新間隔(既定 1740000 ミリ秒=29 分) | 900000 |
http/protobuf と http/json では、各エクスポート要求に Content-Length ヘッダーを付けて送ります。v2.1.212 より前の v2.1.191 以降は chunked 転送で送っていたため、長さの宣言が必要な Azure Monitor などのエンドポイントは 411 Length Required か 400 で拒否していました。
mTLS 認証#
OTLP エクスポーターのクライアント証明書の設定は、その信号で使うプロトコル(OTEL_EXPORTER_OTLP_PROTOCOL か信号別の上書き)で決まります。メトリクス・ログ・トレースで同じ設定です。
| プロトコル | クライアント証明書の変数 | コレクターの CA を信頼させる変数 |
|---|---|---|
http/protobuf、http/json |
CLAUDE_CODE_CLIENT_CERT、CLAUDE_CODE_CLIENT_KEY、必要なら CLAUDE_CODE_CLIENT_KEY_PASSPHRASE(ネットワークと LLM ゲートウェイ) |
NODE_EXTRA_CA_CERTS |
grpc |
OTEL_EXPORTER_OTLP_CLIENT_KEY と OTEL_EXPORTER_OTLP_CLIENT_CERTIFICATE。信号ごとに証明書を変えるなら OTEL_EXPORTER_OTLP_METRICS_CLIENT_KEY のような信号別版 |
OTEL_EXPORTER_OTLP_CERTIFICATE |
grpc では OpenTelemetry SDK が標準の OTLP 変数を直接読むので、信号別のメトリクス変数を使う既存の設定もそのまま動きます。管理設定のあるマシンでは、起動時に開発者設定の信号別の資格情報とエンドポイントが取り除かれることがあります。
メトリクスのカーディナリティ制御#
メトリクスに含める属性を決める環境変数です。
| 環境変数 | 説明 | 既定値 | 無効化の例 |
|---|---|---|---|
OTEL_METRICS_INCLUDE_SESSION_ID |
メトリクスに session.id(クラウドセッションでは ccr.session.id も)を含める |
true |
false |
OTEL_METRICS_INCLUDE_VERSION |
メトリクスに app.version を含める |
false |
true |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID |
メトリクスに user.account_uuid と user.account_id を含める |
true |
false |
OTEL_METRICS_INCLUDE_ENTRYPOINT |
メトリクスに app.entrypoint を含める |
false |
true |
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES |
OTEL_RESOURCE_ATTRIBUTES のキーをメトリクスのデータポイントの属性として含める |
true |
false |
OTEL_METRICS_INCLUDE_REPOSITORY |
vcs.* のリポジトリ識別属性をメトリクスとイベントに含める。v2.1.269 以降 |
false |
true |
カーディナリティが低いほど性能が良く保管費用も安いが、分析の粒度は粗くなります。
トレース(ベータ)#
分散トレースは、ユーザーのプロンプトと、それが引き起こす API リクエストやツール実行をつなぐスパンを出力します。1 つの要求を、トレースのバックエンドで 1 本のトレースとして見られます。
トレースは既定でオフです。CLAUDE_CODE_ENABLE_TELEMETRY=1 と CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1 の両方を設定し、OTEL_TRACES_EXPORTER で送り先を選びます。エンドポイント・プロトコル・ヘッダー・mTLS は共通の OTLP 設定を使い回します。
| 環境変数 | 説明 | 値の例 |
|---|---|---|
CLAUDE_CODE_ENHANCED_TELEMETRY_BETA |
スパントレースを有効にする(必須)。ENABLE_ENHANCED_TELEMETRY_BETA も受け付ける |
1 |
OTEL_TRACES_EXPORTER |
トレースのエクスポーター種別(カンマ区切り)。none で無効 |
console、otlp、none |
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL |
トレースのプロトコル(OTEL_EXPORTER_OTLP_PROTOCOL より優先) |
grpc、http/json、http/protobuf |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT |
トレースのエンドポイント(OTEL_EXPORTER_OTLP_ENDPOINT より優先) |
http://localhost:4318/v1/traces |
OTEL_EXPORTER_OTLP_TRACES_HEADERS |
トレースの認証ヘッダー(OTEL_EXPORTER_OTLP_HEADERS と統合) |
Authorization=Bearer token |
OTEL_TRACES_EXPORT_INTERVAL |
スパンのバッチ出力間隔(ミリ秒。既定 5000) | 1000、10000 |
スパンは、プロンプトのテキスト・ツール入力の詳細・ツール内容を既定で伏せます。含めるには OTEL_LOG_USER_PROMPTS=1・OTEL_LOG_TOOL_DETAILS=1・OTEL_LOG_TOOL_CONTENT=1 を設定します。
- トレースが有効なとき、Bash と PowerShell のサブプロセスは、実行中のツールスパンの W3C トレースコンテキストを入れた環境変数
TRACEPARENTを引き継ぎます。サブプロセスがこれを読めば、自分のスパンを同じトレースの下に置けます - Anthropic API に直接つないでいるときは、各モデル要求に
claude_code.llm_requestスパンのコンテキストを入れた W3C のtraceparentヘッダーが付き、API のtraceresponseヘッダーはスパンリンクに記録されます。互換のある中継を通してもクライアント側とサーバー側のトレースがつながります。HTTP の MCP 要求にも同様にtraceparentが付きます。サードパーティのプロバイダには送りません - モデルと HTTP MCP 要求の
traceparentヘッダーは、ANTHROPIC_BASE_URLが未設定か Anthropic API を指すときだけ送ります(未知のヘッダーを拒否するプロキシがあるため)。サブプロセスのTRACEPARENTも同じ切り替えに従います。独自のANTHROPIC_BASE_URLのプロキシ越しでもトレースコンテキストを伝えたいときはCLAUDE_CODE_PROPAGATE_TRACEPARENT=1を設定します - Agent SDK と
-pの非対話セッションは、各インタラクションのスパンを始めるとき、自分の環境からTRACEPARENTとTRACESTATEも読みます。埋め込み元のプロセスのトレースコンテキストを渡せば、Claude Code のスパンが呼び出し元の分散トレースの子として現れます。対話セッションは、CI やコンテナ環境の環境値を誤って引き継がないよう、受け取ったTRACEPARENTを無視します - この受け取ったトレースコンテキストはイベントにも適用されます。
TRACEPARENTを設定した Agent SDK と-pのセッションでは、トレースのエクスポーターを設定していなくても、各 OTLP イベントのログレコードにtrace_idとspan_idが付き、アプリケーションのトレースと結べます - インタラクションが有効なあいだに出たレコードは、権限確認のコールバックや起動中にバッファして後で出すものなど、スパンの非同期コンテキストの外で出す場合でも、インタラクションのスパンの ID を持ちます。有効なインタラクションのスパンが無いときは、受け取った
TRACEPARENTの ID を直接持ちます。v2.1.214 より前は、スパンの非同期コンテキストの外のレコードはスパンの ID ではなく受け取ったTRACEPARENTの ID を持ち、v2.1.212 より前は、有効なスパンの外のイベントにtrace_id/span_idが付きませんでした
スパンの階層#
ユーザーのプロンプトごとに、ルートスパン claude_code.interaction が始まり、API 呼び出し・ツール呼び出し・フック実行がその子として記録されます。ツールのスパンには、権限判断の待ち時間と実行の 2 つの子スパンがあります。Agent ツール(旧 Task ツール)がサブエージェントを起動すると、そのサブエージェントの API・ツールのスパンは親の claude_code.tool スパンの下に入れ子になります。
claude_code.interaction
├── claude_code.llm_request
├── claude_code.hook (requires detailed beta tracing)
└── claude_code.tool
├── claude_code.tool.blocked_on_user
├── claude_code.tool.execution
└── (Agent tool) subagent claude_code.llm_request / claude_code.tool spans
- Agent SDK と
claude -pのセッションでは、環境にTRACEPARENTがあるとclaude_code.interaction自体が呼び出し元のスパンの子になります PreToolUseフックがツール呼び出しを保留すると、Claude Code は保留したターンのトレースコンテキストを保存します。セッションを再開してツールが再実行されると、そのツールのスパンは、以前のターンのclaude_code.interactionスパンの子として、そのトレースに加わります
スパン属性#
どのスパンも標準属性と、スパン名と一致する span.type 属性を持ちます。以下は各スパンの追加属性です。llm_request・tool.execution・hook のスパンは失敗を記録するとステータスが ERROR になり、ほかのスパンは常に UNSET で終わります。「ゲート」の列は、その属性に必要な変数です。
claude_code.interaction
| 属性 | 説明 | ゲート |
|---|---|---|
user_prompt |
プロンプトのテキスト。ゲートが無ければ <REDACTED> |
OTEL_LOG_USER_PROMPTS |
user_prompt_length |
プロンプトの文字数 | |
interaction.sequence |
インタラクションの 1 始まりの連番。セッションごとではなく Claude Code のプロセスごとに数える(event.sequence と同じ) |
|
parent.source |
スパンが親トレースを得た方法。受け取った TRACEPARENT の下に入ったら env、自前のトレースを始めたら none。v2.1.268 以降 |
|
interaction.duration_ms |
ターンの実時間 |
claude_code.llm_request
| 属性 | 説明 | ゲート |
|---|---|---|
model |
モデルの識別子 | |
gen_ai.system |
常に anthropic(OpenTelemetry GenAI の規約) |
|
gen_ai.request.model |
model と同じ値(GenAI の規約) |
|
query_source |
要求を出したサブシステム。repl_main_thread やサブエージェント名など |
ENABLE_BETA_TRACING_DETAILED |
query_source_safe |
query_source の限定形。詳細ベータトレースの有無にかかわらず出る。repl_main_thread や agent.builtin.general-purpose など。: は . になり、ユーザー命名のエージェントは agent.custom。v2.1.268 以降 |
|
agent_id |
要求を出したサブエージェントかチームメイトの識別子。メインセッションには無い | |
parent_agent_id |
このエージェントを起動したエージェントの識別子。メインセッションと、メインから直接起動されたエージェントには無い | |
workflow.run_id |
このエージェントを起動した Workflow ツール実行の識別子(接頭辞 wf_)。ワークフローが起動していなければ無い |
|
workflow.name |
このエージェントを起動したワークフロー名。ユーザーが付けた名前は、ゲートが無ければ custom に置き換わる |
OTEL_LOG_TOOL_DETAILS |
speed |
fast か normal |
|
effort |
要求に適用した effort レベル:low・medium・high・xhigh・max。effort を送らないとき(effort 非対応のモデルなど)は無い。v2.1.274 以降 |
|
llm_request.context |
親スパンに応じて interaction・tool・standalone |
|
duration_ms |
リトライを含む実時間 | |
ttft_ms |
最初のトークンまでの時間(ミリ秒) | |
first_content_ms |
要求の開始から、成功した試行の最初のコンテンツブロックまでの時間(ミリ秒)。非ストリーミングへ切り替えた要求には無い。v2.1.268 以降 | |
input_tokens |
API の usage ブロックの入力トークン数。プロンプトキャッシュから読んだ分と書いた分は含まず、それぞれ cache_read_tokens と cache_creation_tokens に出る |
|
output_tokens |
出力トークン数 | |
cache_read_tokens |
プロンプトキャッシュから読んだトークン数 | |
cache_creation_tokens |
プロンプトキャッシュに書いたトークン数 | |
request_id |
API のリクエスト ID。イベントの相関属性 request_id と同じ値 |
|
gen_ai.response.id |
request_id と同じ値(GenAI の規約) |
|
client_request_id |
最後の試行でクライアントが生成した x-client-request-id |
|
attempt |
この要求の総試行回数 | |
success |
true か false |
|
status_code |
要求が失敗したときの HTTP ステータスコード | |
error |
要求が失敗したときのエラーメッセージ | |
error_class |
要求が失敗したときの短いエラー分類のトークン。api_timeout・server_overload など。v2.1.268 以降 |
|
response.has_tool_call |
応答に tool-use ブロックがあれば true |
|
stop_reason |
API 応答の stop_reason。end_turn・tool_use・max_tokens・stop_sequence・pause_turn・refusal など |
|
gen_ai.response.finish_reasons |
stop_reason と同じ値を文字列配列で包んだもの(GenAI の規約) |
各リトライの試行は、attempt と client_request_id を持つ gen_ai.request.attempt スパンイベントとしても記録されます。
claude_code.tool
| 属性 | 説明 | ゲート |
|---|---|---|
tool_name |
ツール名 | |
tool_name_safe |
ユーザーが付けた名前を含まない tool_name の形。組み込みツール名はそのまま。MCP ツール名は mcp_other になるが、playwright の browser_* のような決まった形はそのまま通る。v2.1.268 以降 |
|
bash_command_class |
Bash ツールで、コマンドの最初のプログラムの、決まった一覧の中の分類(vcs・package_manager など)。一覧外は other、構文を解析できなければ unparsed。v2.1.268 以降 |
|
bash_argv0 |
Bash ツールで、コマンドの最初のプログラムが同じ一覧にあるときの名前(git・npm など)。一覧外は other。v2.1.268 以降 |
|
duration_ms |
権限待ちと実行を含む実時間 | |
result_tokens |
ツール結果のおおよそのトークン数 | |
agent_id |
ツールを実行したサブエージェントかチームメイトの識別子。メインセッションには無い | |
parent_agent_id |
このエージェントを起動したエージェントの識別子。メインセッションと、メインから直接起動されたエージェントには無い | |
workflow.run_id |
このエージェントを起動した Workflow ツール実行の識別子(接頭辞 wf_)。ワークフローが起動していなければ無い |
|
workflow.name |
このエージェントを起動したワークフロー名。ユーザーが付けた名前は、ゲートが無ければ custom に置き換わる |
OTEL_LOG_TOOL_DETAILS |
tool_use_id |
このツール呼び出しのモデルの tool_use ブロック ID。tool_result・tool_decision のイベントやフックのペイロードの tool_use_id と一致するので、スパンとそれらを結べる |
|
gen_ai.tool.call.id |
tool_use_id と同じ値(GenAI の規約) |
|
file_path |
Read・Edit・Write ツールの対象ファイルのパス | OTEL_LOG_TOOL_DETAILS |
full_command |
Bash ツールのコマンド文字列 | OTEL_LOG_TOOL_DETAILS |
skill_name |
Skill ツールのスキル名 | OTEL_LOG_TOOL_DETAILS |
subagent_type |
Agent ツール(旧 Task ツール)のサブエージェントの種類 | OTEL_LOG_TOOL_DETAILS |
claude_code.tool 上の tool.output スパンイベント
OTEL_LOG_TOOL_CONTENT=1 を設定すると、Read と Bash の呼び出しは claude_code.tool スパンに tool.output スパンイベントを記録できます。Edit と Write は、OTEL_LOG_TOOL_DETAILS=1 も設定したときだけ記録します。この変数はその 2 つのツールに限らず他へ引数を足すので、共通設定の表の行を確認してください。MCP ツール・WebFetch・WebSearch も、v2.1.283 以降はこのイベントを記録します。
イベントはツール呼び出しが成功して戻ったときに書くので、エラーを出した呼び出しは何のツールでも記録しません。戻った呼び出しでも、次は tool.output イベントを記録しません。
- Read・Edit・Write・Bash・WebFetch・WebSearch・MCP ツール以外のツールの呼び出し
- ファイルのテキスト以外(画像・PDF・内容が変わっていないファイルの再読込)を返した Read
OTEL_LOG_TOOL_DETAILS=1を設定していない Edit・Write- 待っているメッセージを Claude に届けるため、Claude Code が実行中にバックグラウンドへ移した WebFetch・WebSearch の呼び出し(あとで届く結果も記録されない)。いつ移すかは、ターミナルでは対話モードの「キューに入れたものをいつ送るか」の項、Agent SDK のセッションでは
SDKUserMessageのpriorityフィールドを見る
イベントの属性は、それぞれコンテンツ上限(既定 60 KB)で切られます。「ゲート」は OTEL_LOG_TOOL_CONTENT=1 に加えて必要な変数で、Edit と Write では、その変数が属性ではなくイベント自体のゲートです。
| 属性 | 説明 | ゲート |
|---|---|---|
content |
Read ツールが返したテキスト、または Write 呼び出しが書くよう頼まれたテキスト | Write ツールでは OTEL_LOG_TOOL_DETAILS |
output |
Bash ツールでは、stderr を stdout に混ぜたコマンドの出力。MCP ツール・WebFetch・WebSearch では、ツールが返した結果(テキストブロックを改行でつなぐ。画像やドキュメントは [image] のような代替表示に置き換わる) |
|
diff |
Edit ツールが適用した構造化パッチ | OTEL_LOG_TOOL_DETAILS |
file_path |
Read・Edit・Write ツールの対象ファイルのパス(同名のスパン属性と同じ) | OTEL_LOG_TOOL_DETAILS |
bash_command |
Bash ツールのコマンド文字列 | OTEL_LOG_TOOL_DETAILS |
どのツールから来たイベントかは、親スパンの tool_name 属性で分かります。コンテンツ上限で切られた属性には、<属性名>_truncated と <属性名>_original_length が付きます。
claude_code.tool.blocked_on_user
| 属性 | 説明 | ゲート |
|---|---|---|
duration_ms |
権限判断を待った時間 | |
decision |
accept か reject |
|
source |
判断の取得元。tool decision イベントと同じ |
claude_code.tool.execution
| 属性 | 説明 | ゲート |
|---|---|---|
duration_ms |
ツール本体の実行時間 | |
tool_use_id |
親の claude_code.tool スパンと同じ値 |
|
gen_ai.tool.call.id |
tool_use_id と同じ値(GenAI の規約) |
|
success |
true か false |
|
error |
実行が失敗したときのエラー分類の文字列(Error:ENOENT・ShellError など)。ゲートがあれば完全なエラーメッセージになる |
OTEL_LOG_TOOL_DETAILS |
error_class |
エラー分類を識別子の形にしたもの(英数字とアンダースコア以外は _ に置換。Error_ENOENT・ShellError など)。error が完全なメッセージのときも分類を持つ。v2.1.268 以降 |
claude_code.hook
このスパンは、詳細ベータトレースが有効なときだけ出ます。ENABLE_BETA_TRACING_DETAILED=1 と BETA_TRACING_ENDPOINT の組が必要で、この組はログとトレースの送り先も変えます(環境変数一覧)。シェル・ユーザー設定・管理設定のどれかに置きます。両方ともプロジェクトとローカル設定では無視されます。CLAUDE_CODE_ENHANCED_TELEMETRY_BETA だけでは出ません。対話の CLI セッションでは、詳細ベータトレースに、組織がこの機能の許可リストに載っていることも必要です。Agent SDK と非対話の -p セッションでは許可リストは不要です。
| 属性 | 説明 | ゲート |
|---|---|---|
hook_event |
フックのイベント種別。PreToolUse など |
|
hook_name |
フックの完全な名前。PreToolUse:Write など |
|
num_hooks |
実行された、一致するフックコマンドの数 | |
hook_definitions |
JSON 化したフック設定 | OTEL_LOG_TOOL_DETAILS |
duration_ms |
一致した全フックの実時間 | |
num_success |
成功したフックの数 | |
num_blocking |
ブロックの判断を返したフックの数 | |
num_non_blocking_error |
ブロックせずに失敗したフックの数 | |
num_cancelled |
完了前に取り消されたフックの数 |
補足
詳細ベータトレースの内容属性
補足
new_context・system_reminders・system_prompt_preview・user_system_prompt・tool_input・response.model_output のような内容を持つ属性は、詳細ベータトレースが有効なときだけ出ます。安定したスパンのスキーマには含まれません。
これらの属性は次のスパンに載り、「ゲート」は詳細ベータトレースに加えて要る変数です。コンテンツ上限(既定 60 KB)より長い値は切り詰められます。
| 属性 | スパン | 説明 | ゲート |
|---|---|---|---|
new_context |
claude_code.interaction |
ユーザープロンプト | OTEL_LOG_USER_PROMPTS |
new_context |
claude_code.llm_request |
その要求と一緒に送った新しいユーザーメッセージとツール結果 | OTEL_LOG_USER_PROMPTS |
system_reminders |
claude_code.llm_request |
その要求の新しいメッセージの中のシステムリマインダーのテキスト | OTEL_LOG_USER_PROMPTS |
system_prompt_preview |
claude_code.llm_request |
その要求で送った完全なシステムプロンプトの先頭 500 文字 | OTEL_LOG_USER_PROMPTS |
user_system_prompt |
claude_code.llm_request |
SDK オプション systemPrompt や --system-prompt・--append-system-prompt フラグで渡したシステムプロンプトのテキストだけ。要求ごとではなくセッションに 1 回出る |
OTEL_LOG_USER_PROMPTS |
response.model_output |
claude_code.llm_request |
その要求へのモデルの応答テキスト | OTEL_LOG_USER_PROMPTS |
new_context |
claude_code.tool |
そのツール呼び出しの結果(どのツールでも) | OTEL_LOG_TOOL_CONTENT |
tool_input |
claude_code.tool |
JSON 化したツール入力 | OTEL_LOG_TOOL_DETAILS |
詳細ベータトレースで OTEL_LOG_USER_PROMPTS=1 のときは、完全なシステムプロンプトを持つ claude_code.system_prompt イベントも出ます。コンテンツ上限で切られ、セッションが異なるシステムプロンプトを初めて送るたびと、コンパクションの後にもう一度届きます。
動的ヘッダー#
動的な認証が要る企業環境向けに、スクリプトでヘッダーを動的に生成できます。動的ヘッダーは http/protobuf と http/json のプロトコルにだけ適用されます。grpc では、静的ヘッダーの変数(OTEL_EXPORTER_OTLP_HEADERS とその信号別の変数)だけを使います。
設定#
.claude/settings.json に、自分のスクリプトのパスで追加します。
{
"otelHeadersHelper": "/path/to/generate-otel-headers.sh"
}
値は、実行可能ファイルのパス(空白を含んでもよい)か、引数付きのシェルのコマンドラインです。Windows では常にシェル経由で動くので、空白を含むパスは JSON の値の中で引用符で囲みます。
スクリプトの要件#
スクリプトは、HTTP ヘッダーを表す文字列の key-value を、有効な JSON として出力する必要があります。
#!/bin/bash
# Example: Multiple headers
echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"
ヘルパーが失敗するか、要件を満たさない出力をすると、エクスポートは失敗し、ヘルパーが直るまでテレメトリのバックエンドにそのセッションの分は何も届きません。失敗は次で報告されます。
- 対話セッションの警告通知
otelHeadersHelper failed; telemetry is not being exported(最初に失敗したときにセッションごとに 1 回) /statusの出力--debugで起動したとき、またはセッション中に/debugを実行した後のデバッグログ-pの非対話セッションでは stderr
更新の動作#
ヘッダーのヘルパースクリプトは、起動時とその後定期的に実行され、トークンの更新に対応します。既定では 29 分ごとです。間隔は環境変数 CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS で変えられます。
複数チームの組織向け#
複数のチームや部門を持つ組織は、環境変数 OTEL_RESOURCE_ATTRIBUTES でグループを区別するカスタム属性を足せます。
# Add custom attributes for team identification
export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"
カスタム属性は全メトリクスとイベントに入るので、次ができます。
- チームや部門でメトリクスを絞り込む
- コストセンターごとにコストを追う
- チーム別のダッシュボードを作る
- 特定のチーム向けのアラートを設定する
Claude Code は、これらの値を OTLP のリソースブロックに送るのに加えて、全メトリクスのデータポイントとイベントのレコードの属性としても付けます。多くのメトリクスのバックエンドはデータポイントの属性を検索できるラベルとして扱うので、カスタムキーで直接グループ化や絞り込みができます。vcs.* のリポジトリ属性を除き、カスタムキーは user.id や session.id などの標準属性を上書きしません。衝突したときは組み込みの値を保ちます。
カスタムキーは全メトリクス系列のラベルになるので、カーディナリティの高い値は保管費用を増やします。カスタム属性をリソースブロックだけに送りデータポイントのラベルから外すには、OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false を設定します。
注意
OTEL_RESOURCE_ATTRIBUTES はカンマ区切りの key=value で、書式が厳密です。
- 空白は使えません(
user.organizationName=My Companyは無効) - 書式は
key1=value1,key2=value2 - 使える文字は、制御文字・空白・二重引用符・カンマ・セミコロン・バックスラッシュを除く US-ASCII のみ
- 範囲外の文字はパーセントエンコードする
空白が要る値は、アンダースコアかキャメルケースにします。org.name を設定する例です。
export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"
export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"
除外された文字に限らず、どの文字もパーセントエンコードできます。空白とアポストロフィーをエンコードする例です。
export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"
値を引用符で囲んでも空白はエスケープされません。org.name="My Company" は、引用符を含んだ文字どおりの値 "My Company" になります。
設定例#
claude を実行する前に環境変数を設定します。どの例も完全な設定で、各変数は共通の設定変数の表にあります。反映の確認は、セッション開始後にバックエンドで claude_code.session.count を見ます(ログだけの構成と、何も届かないときの確認はクイックスタートを参照)。
コンソールでデバッグする(エクスポート間隔 1 秒):
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console
export OTEL_METRIC_EXPORT_INTERVAL=1000
OTLP を gRPC で送る:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
Prometheus で http://localhost:9464/metrics を取得する:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=prometheus
セルフホスト環境では、ランナーの既定の容量(1)のときだけ、セッションがポート 9464 を使います。容量がそれより大きいと、ランナーが自分の /metrics エンドポイントでセッションのカウンターとゲージを再公開します。
複数のエクスポーターに送る:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console,otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/json
メトリクスとログを別のエンドポイント・バックエンドへ送る:
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_METRICS_PROTOCOL=http/protobuf
export OTEL_EXPORTER_OTLP_METRICS_ENDPOINT=http://metrics.example.com:4318
export OTEL_EXPORTER_OTLP_LOGS_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_LOGS_ENDPOINT=http://logs.example.com:4317
メトリクスだけを送る(イベント・ログなし):
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
イベントとログだけを送る(メトリクスなし):
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
クラウドセッションと Claude Tag のテレメトリ#
クラウドセッション(Slack と Claude Tag のチャネルのセッションを含む)は、ユーザーの端末ではなくクラウド環境で動くため、端末の管理設定ファイルやシェルプロファイルではテレメトリを設定できません。Anthropic がホストする環境のセッション向けに、変数を置く場所・コレクターへ届かせる方法・クラウドと Claude Tag のセッションをデータ上で見分ける方法を説明します。
CLAUDE_CODE_ENABLE_TELEMETRY と OTEL_* 変数(管理者による設定の例と同じキー)は、次の 2 か所のどちらかに置きます。
- サーバー管理設定:組織のサーバー管理設定の
envブロックに足す。サーバー管理設定が適用される場所では、Claude Code が起動時に取得する。ユーザーの端末と、Claude Tag のチャネルセッション以外のクラウドセッションを含む。Claude Tag のセッションはサーバー管理設定を受け取らないので、この経路では設定できない - 環境の変数:クラウド環境の環境変数に足すと、その環境で動くセッションだけを設定できる。Claude Tag のセッションに届くのはこちらの経路
環境を使う人は誰でも変数を読めるので、OTEL_EXPORTER_OTLP_HEADERS のコレクターのトークンのような資格情報を置いてはいけません。環境の API 資格情報も役に立ちません。Claude Code 自身のテレメトリのエクスポートは、資格情報が付かない要求の 1 つだからです。コレクターが資格情報を要求するなら、エクスポート全体をサーバー管理設定で設定します。そこに資格情報を置くと、管理設定の外で置かれたエンドポイント変数が取り除かれるからです。
クラウドセッションのテレメトリを設定するときの制約です。
- セッションからコレクターへ届かせる:エクスポートはセッションのネットワーク経由で送られるので、
OTEL_EXPORTER_OTLP_ENDPOINTのホストに届くかは、環境のネットワークアクセスレベルで決まります。選んだレベルでコレクターのドメインに届かないなら、環境の許可リストにそのドメインを足します(サーバー管理設定では環境のネットワーク許可リストにドメインを足せない) - Claude Tag のチャネルは組織レベルの環境を使う:チャネルのセッションは、メンバー個人の環境ではなく組織レベルの環境で動くので、許可リストや環境変数の変更は、組織の既定にしたか、そのチャネルに固定した共有環境で行う
- Cowork は別に設定する:Cowork のセッションはサーバー管理設定を受け取らないので、サーバー管理の
envブロックではテレメトリを設定できない
クラウドセッションにテレメトリを紐づける#
既定では、クラウドセッションのメトリクスとイベントは session.id・ccr.session.id・organization.id を含む標準属性を持つので、追加設定なしでセッションや組織で絞れます。ccr.session.id の値はセッションの CLAUDE_CODE_REMOTE_SESSION_ID です。
さらに詳しく紐づけるには、次を使います。
- Claude Tag のセッションを見分ける:
OTEL_METRICS_INCLUDE_ENTRYPOINT=trueを設定する。メトリクスにapp.entrypointが付き、Claude Tag のセッションでは値がclaude-in-slackになる - カスタム属性を足す:そのセッション向けの他の
OTEL_*変数と同じ場所にOTEL_RESOURCE_ATTRIBUTESを置く。環境のセットアップスクリプトでexportしても Claude Code には届かない(セットアップスクリプトは Claude Code の起動前に動く別の Bash スクリプトで、export した変数はそこで終わる)
Claude Tag のチャネルセッションでは、Claude は特定のメンバーではなく組織の共有 ID として動くので、誰がタグ付けしたかを user.* 属性で特定しようとしないでください。
メトリクスとイベントの一覧#
標準属性#
すべてのメトリクスとイベントが共通で持つ属性です。
| 属性 | 説明 | 制御 |
|---|---|---|
session.id |
セッションの一意の識別子 | OTEL_METRICS_INCLUDE_SESSION_ID(既定 true) |
ccr.session.id |
クラウド環境で動くセッションの識別子。CLAUDE_CODE_REMOTE_SESSION_ID の値 |
OTEL_METRICS_INCLUDE_SESSION_ID(既定 true) |
app.version |
現在の Claude Code のバージョン | OTEL_METRICS_INCLUDE_VERSION(既定 false) |
app.entrypoint |
セッションの起動方法。cli・sdk-cli・sdk-ts・sdk-py・claude-vscode、Claude Tag のセッションなら claude-in-slack |
OTEL_METRICS_INCLUDE_ENTRYPOINT(既定 false) |
organization.id |
組織の UUID(認証済みのとき) | 取得できれば常に含まれる |
user.account_uuid |
アカウントの UUID(認証済みのとき) | OTEL_METRICS_INCLUDE_ACCOUNT_UUID(既定 true) |
user.account_id |
Anthropic の管理 API と同じ形式のアカウント ID(認証済みのとき)。user_01BWBeN28... など |
OTEL_METRICS_INCLUDE_ACCOUNT_UUID(既定 true) |
user.id |
初回実行時に生成され ~/.claude.json に保存されるランダムな匿名の識別子。個人情報を含まず、Claude アカウントから導出されない。ファイルを消すと、次の実行で無関係な新しい値になる |
常に含まれる |
user.email |
ユーザーのメールアドレス。サインインから取る。クラウドセッションではセッション自身の資格情報から取る | 取得できれば常に含まれる |
terminal.type |
端末の種類。iTerm.app・vscode・cursor・tmux など |
検出できれば常に含まれる |
OTEL_RESOURCE_ATTRIBUTES のキー |
自分で設定したカスタム属性。department・team.id など |
OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES(既定 true) |
vcs.repository.url.full・vcs.owner.name・vcs.repository.name・vcs.provider.name |
セッションのリポジトリの識別。origin リモートから導出する |
OTEL_METRICS_INCLUDE_REPOSITORY(既定 false)。v2.1.269 以降 |
Claude apps gateway に /login でサインインしたセッションでは、CLI が認証済みの ID をエクスポートに付けます。user.id は IdP のサブジェクト、user.email はサインインしたメール、user.groups は IdP のグループ所属(カンマ区切りの文字列)です。エクスポートには identity.source: gateway-oidc も付きます。ゲートウェイの ID は最後に適用されるので、そのセッションでは OTEL_RESOURCE_ATTRIBUTES で設定した user.* と identity.* のキーは無視されます。ゲートウェイ経由の Claude Desktop と Cowork のセッションの ID 属性は、ゲートウェイの telemetry の設定リファレンスを見ます。
イベントは、さらに次の属性を持ちます。無制限のカーディナリティになるため、メトリクスには付きません。
| 属性 | 説明 |
|---|---|
prompt.id |
ユーザーのプロンプトを、次のプロンプトまでのすべてのイベントに結びつける UUID |
workspace.host_paths |
デスクトップアプリで選んだホストのワークスペースディレクトリ(文字列配列) |
workflow.run_id |
Workflow ツールの実行に属するエージェントが出す API とツールのイベントにある実行識別子(接頭辞 wf_)。1 つの workflow.run_id で絞ると、その実行の API 要求とツール結果を再構成できる。ワークフローのスクリプトが起動するエージェントと、そこからさらに起動されるエージェント(スキル呼び出しなど)を含む。Workflow ツールの結果に出る実行識別子と一致する。ほかのイベントには無い。v2.1.202 以降(ワークフロー) |
workflow.name |
ワークフローの名前(スクリプトの meta.name)。workflow.run_id と一緒に出る。組み込みのワークフローは、改変なしで実行したときだけ名前がそのまま出る。ユーザーが書いた名前(組み込みスクリプトを編集したコピーを含む)は、OTEL_LOG_TOOL_DETAILS=1 が無いと custom に置き換わる。v2.1.202 以降 |
リポジトリ属性#
OTEL_METRICS_INCLUDE_REPOSITORY=true で、メトリクスとイベントにセッションのリポジトリの識別を付けられ、共有のコレクターでリポジトリ別の使用量を割り当てられます(v2.1.269 以降)。
Claude Code は、リポジトリの origin リモートからセッションごとに 1 回、これらの属性を導出します。GitHub・GitLab・Bitbucket Cloud のように、HTTPS と SSH のリモートが同じホストと同じパスを指すときは、どちらも同じ値になります。
| 属性 | 値 |
|---|---|
vcs.repository.url.full |
.git を除いたリポジトリのブラウザ URL。https://github.com/example-org/example-repo など |
vcs.owner.name |
オーナーかグループのパス。example-org など。リモートのパスが 1 セグメントなら省略 |
vcs.repository.name |
リポジトリ名だけ。example-repo など |
vcs.provider.name |
リモートのホストか URL の形が認識できれば github・gitlab・bitbucket・gitea。それ以外は省略 |
- 値は小文字になり、リモート URL の資格情報・クエリ文字列・フラグメントは入りません。
originリモートが無い・リモートが URL の形でない・囲むリポジトリがホームディレクトリだけ、のときは属性が省略されます - クラウドセッションでこの属性を得るには、
OTEL_METRICS_INCLUDE_REPOSITORYを含むテレメトリ変数をそのクラウド環境の環境変数に置き、コレクターのドメインを環境のネットワークアクセスで許可します OTEL_RESOURCE_ATTRIBUTESに宣言したvcs.*キーは、そのキーの導出値を置き換えます。vcs.repository.url.fullを宣言すると、Claude Code はリモートを読まず、宣言したキーだけを報告します- 1 つのリポジトリで HTTPS と SSH のクローンが違う値になる場合(HTTPS のクローン URL にだけパスの接頭辞があるセルフホスト環境など)は、
OTEL_RESOURCE_ATTRIBUTESにvcs.repository.url.fullと、報告したい他のvcs.*キーをすべて宣言すると、どのクローンも宣言した ID を報告します - 属性は自分のエクスポーターにだけ流れます。Anthropic のテレメトリは
vcs.*キーをすべて捨てます
メトリクス#
Claude Code は次のメトリクスを出力します。単位の列は各メトリクスに付く OpenTelemetry の単位文字列で、カウント系は単位なしです。
| メトリクス名 | 説明 | 単位 |
|---|---|---|
claude_code.session.count |
開始された CLI セッションの数 | なし |
claude_code.lines_of_code.count |
変更されたコード行数 | なし |
claude_code.pull_request.count |
作成されたプルリクエストの数 | なし |
claude_code.commit.count |
作成された git コミットの数 | なし |
claude_code.cost.usage |
Claude Code セッションのコスト | USD |
claude_code.token.usage |
使われたトークン数 | tokens |
claude_code.code_edit_tool.decision |
コード編集ツールの権限判断の数 | なし |
claude_code.active_time.total |
合計のアクティブ時間 | s |
OTEL_METRICS_EXPORTER に prometheus だけを挙げたときは、スクレイプが正しい Prometheus のテキスト形式を保つよう、出力から USD・tokens・s の単位を省きます。メトリクス名は変わらず、otlp,prometheus のように組み合わせると単位は残ります。v2.1.216 より前は、一部のスクレイパーが拒否する OpenMetrics 専用の # UNIT 行が含まれていました。
メトリクスの詳細#
各メトリクスは上の標準属性を持ちます。追加の属性があるものを以下に挙げます。
セッションカウンター#
各セッションの開始時に加算されます。
| 属性 | 説明 |
|---|---|
| 標準属性すべて | |
start_type |
セッションの開始方法。"fresh"・"resume"・"continue"・"agents_view" のどれか。"agents_view" は claude agents ダッシュボードのプロセス(ユーザーが起動するローカルの UI で、会話のセッションではない)を指す。UI の起動と会話セッションを分けるときに使う |
コード行数カウンター#
コードが追加・削除されたときに加算されます。
| 属性 | 説明 |
|---|---|
| 標準属性すべて | |
type |
"added"、"removed" |
model |
変更したモデルの識別子(例:claude-sonnet-5) |
プルリクエストカウンター#
Claude Code が、シェルコマンドか MCP ツールでプルリクエスト(マージリクエスト)を作ったときに加算されます。標準属性のみ。
コミットカウンター#
Claude Code で git コミットを作ったときに加算されます。標準属性のみ。
コストカウンター#
API リクエストごとに加算されます。
agent.name・skill.name・plugin.name・mcp_server.name・mcp_tool.name は、既定では一部の名前を "custom" か "third-party" の代替値に置き換えます。OTEL_LOG_TOOL_DETAILS=1 を設定すると実際の名前が入ります。v2.1.273 より前は、コスト・トークンのカウンターと api_request・api_error・api_refusal のイベントが、OTEL_LOG_TOOL_DETAILS=1 でも伏せた値のままでした。
| 属性 | 説明 |
|---|---|
| 標準属性すべて | |
model |
モデルの識別子(例:claude-sonnet-5) |
query_source |
要求を出したサブシステムの分類。"main"・"subagent"・"auxiliary" のどれか |
speed |
fast mode の要求なら "fast"。それ以外は無い |
effort |
要求に適用した effort レベル:"low"・"medium"・"high"・"xhigh"・"max"。effort を送らないとき(非対応のモデルなど)は無い |
agent.name |
要求を出したサブエージェントの種類。組み込みのエージェント名と公式マーケットプレイスのプラグインのエージェントはそのまま、ほかのユーザー定義のエージェント名は "custom" に置き換わる。名前付きのサブエージェントが出した要求でなければ無い |
skill.name |
要求で有効だったスキル(Skill ツールか / コマンドで設定、または起動したサブエージェントが引き継ぐ)。組み込み・バンドル・ユーザー定義・公式マーケットプレイスのプラグインのスキル名はそのまま、サードパーティのプラグインのスキル名は "third-party"。有効なスキルが無ければ無い |
plugin.name |
有効なスキルかサブエージェントをプラグインが提供しているときの、そのプラグイン。公式マーケットプレイスのプラグイン名はそのまま、サードパーティは "third-party"。持ち主のプラグインが無ければ無い |
marketplace.name |
持ち主のプラグインをインストールしたマーケットプレイス。公式マーケットプレイスのプラグインだけに出て、OTEL_LOG_TOOL_DETAILS=1 でも変わらない。それ以外は無い |
mcp_server.name |
この要求が結果を消費した MCP サーバー。組み込み・claude.ai 経由・公式レジストリのサーバー名はそのまま、ユーザーが設定したサーバー名は "custom"。MCP ツールの結果を消費しない要求には無い。v2.1.222 より前は、MCP ツール呼び出しの後の全要求に付けていたため、これを集計するダッシュボードはアップグレード後に段差が出る |
mcp_tool.name |
この要求が結果を消費した MCP ツール。伏せ方とバージョンの挙動は mcp_server.name と同じ。MCP ツールの結果を消費しない要求には無い |
トークンカウンター#
API リクエストごとに加算されます。
| 属性 | 説明 |
|---|---|
| 標準属性すべて | |
type |
"input"・"output"・"cacheRead"・"cacheCreation"。"input" はプロンプトキャッシュから読んだ分と書いた分を含まず、それぞれ "cacheRead" と "cacheCreation" に数える |
model |
モデルの識別子(例:claude-sonnet-5) |
query_source |
要求を出したサブシステムの分類。"main"・"subagent"・"auxiliary" のどれか |
speed |
fast mode の要求なら "fast"。それ以外は無い |
effort |
要求に適用した effort レベル(詳細はコストカウンター) |
agent.name・skill.name・plugin.name・marketplace.name・mcp_server.name・mcp_tool.name |
要求のスキル・プラグイン・エージェント・MCP の割り当て(定義と伏せ方はコストカウンター) |
コード編集ツール判断カウンター#
ユーザーが Edit・Write・NotebookEdit の使用を承認または拒否したときに加算されます。
| 属性 | 説明 |
|---|---|
| 標準属性すべて | |
tool_name |
ツール名("Edit"・"Write"・"NotebookEdit") |
decision |
ユーザーの判断("accept"・"reject") |
source |
判断の出どころ。"config"・"hook"・"user_permanent"・"user_temporary"・"user_abort"・"user_reject" のどれか(意味は tool decision イベントの節) |
language |
編集したファイルのプログラミング言語。"TypeScript"・"Python"・"JavaScript"・"Markdown" など。未知の拡張子は "unknown" |
アクティブ時間カウンター#
Claude Code を実際に使っている時間を、アイドル時間を除いて追います。入力や応答を読むなどのユーザー操作中と、ツール実行や AI の応答生成などの CLI の処理中に加算されます。
| 属性 | 説明 |
|---|---|
| 標準属性すべて | |
type |
キーボード操作は "user"、ツール実行と AI の応答は "cli" |
イベント#
OTEL_LOGS_EXPORTER を設定すると、Claude Code は次のイベントを OpenTelemetry のログ/イベントで出力します。
どのイベントも、標準属性に加えて次の 3 つを持ちます。以降の各イベントの表には、イベント固有の属性だけを載せます。
| 共通の属性 | 説明 |
|---|---|
event.name |
イベント名(claude_code. を除いた部分。例:"user_prompt") |
event.timestamp |
ISO 8601 の時刻 |
event.sequence |
イベントの順序づけに使う、プロセスごとのカウンター |
イベントの相関属性#
ユーザーがプロンプトを送ると、Claude Code は複数の API 呼び出しと複数のツール実行を行うことがあります。prompt.id 属性で、それらのイベントを元の 1 つのプロンプトに結びつけます。
| 属性 | 説明 |
|---|---|
prompt.id |
1 つのユーザープロンプトの処理中に出るすべてのイベントを結ぶ UUID v4 |
event.sequence |
イベントを順序づける 0 始まりのカウンター。セッションごとではなく Claude Code のプロセスごとに数える |
message.uuid |
セッションの記録(~/.claude/projects/*/*.jsonl)に保存されたメッセージの UUID。assistant_response・api_response_body、およびコマンド実行(0 個以上のメッセージを生みうる)を除く user_prompt にある。assistant_response と api_response_body では応答の最後の記録エントリで、次のターンの parentUuid がここから連なる。v2.1.214 以降(api_response_body では v2.1.274 以降) |
request_id |
request-id 応答ヘッダーから読む、サーバーが割り当てた API リクエスト ID(req_011... など)。request-id ヘッダーの無い応答(Amazon Bedrock など)は x-amzn-requestid ヘッダーの値になる。どちらかのヘッダーがある応答の api_request・api_error・api_refusal・assistant_response・api_response_body に付く。llm_request トレーススパンの同名の属性と一致する。x-amzn-requestid の取得は v2.1.282 以降 |
client_request_id |
x-client-request-id リクエストヘッダーとして送るクライアント生成の UUID。ファーストパーティの API 接続の api_request と api_error に付く。サードパーティのプロバイダのバックエンドと、非ストリーミングのフォールバックでリトライした要求には無い。要求と応答を結び、サーバーの request_id が付かなかったタイムアウトのような失敗でも使える。llm_request トレーススパンの同名の属性と一致する。v2.1.214 以降 |
- 1 つのプロンプトが起こした活動をすべて追うには、特定の
prompt.idの値でイベントを絞ります。そのプロンプトの処理中に出たuser_prompt・api_request・tool_resultのイベントが得られます event.sequenceは Claude Code のプロセスが始まるたびに 0 から始まり、そのプロセスの存続中は数え続けます。新しいsession.idを割り当てる/clearをまたいでも続きます。分岐せずにセッションを再開すると、session.idはそのままでevent.sequenceは再開したプロセスの値になるので、1 つのセッションの中で後のイベントが前より小さい値になったり重複したりします。順序はevent.timestampで並べ、同じ時刻のものだけをevent.sequenceで並べます- メッセージ単位で再構成するため、各イベントの種類は、セッション記録の項目と一致するキーを持ちます。記録のエントリの形式は Claude Code の内部のもので、バージョンで変わるので、これらのキーで結合するパイプラインはどのリリースでも壊れうるものとして、バージョン固有に扱ってください
| 結合キー | 付くイベント |
|---|---|
message.uuid |
user_prompt・assistant_response・api_response_body |
request_id |
API のイベント(記録では assistant エントリの requestId として保存される) |
tool_use_id |
tool_result・tool_decision のイベント |
user_prompt イベント#
プロンプトが送られたときに記録されます。Claude Code が自分で始めたターンも含みます。イベント名:claude_code.user_prompt
| 属性 | 説明 |
|---|---|
prompt_length |
プロンプトの長さ |
prompt |
プロンプトの内容。既定は伏せられ、OTEL_LOG_USER_PROMPTS=1 で含める |
prompt_text |
prompt と同じ値で、同じゲートで伏せられる。ドット付きの属性名を入れ子のオブジェクトとして保存するバックエンドは、prompt.id を prompt というオブジェクトの中の id として読み、プロンプトの文字列を失いうる。そのときは prompt_text を読む。v2.1.287 以降 |
message.uuid |
生成されたユーザーメッセージの UUID(保存された記録のエントリと一致)。コマンド実行には無い。v2.1.214 以降 |
command_name |
プロンプトがコマンドを呼ぶときのコマンド名。組み込み・バンドルのコマンド名(compact・debug など)はそのまま出る。reset のようなエイリアスは正規名ではなく入力どおり。カスタム・プラグイン・MCP のコマンド名は、OTEL_LOG_TOOL_DETAILS=1 が無いと custom か mcp にまとめられる |
command_source |
コマンドの出どころ:builtin・custom・mcp(あるとき)。プラグインのコマンドは custom と報告される |
assistant_response イベント#
モデルのテキストを返した API リクエストのあとに記録されます。応答のテキストブロックだけを含み、thinking ブロックと tool-use ブロックは含みません。v2.1.193 以降。イベント名:claude_code.assistant_response
| 属性 | 説明 |
|---|---|
response_length |
応答テキストの文字数 |
response |
応答テキスト(コンテンツ上限で切り詰め。既定 60 KB)。既定は <REDACTED> で、OTEL_LOG_ASSISTANT_RESPONSES=1 で含める。OTEL_LOG_ASSISTANT_RESPONSES が未設定なら OTEL_LOG_USER_PROMPTS が制御するので、プロンプトの記録を有効にしたまま応答を伏せるには OTEL_LOG_ASSISTANT_RESPONSES=0 を設定する |
model |
モデルの識別子(例:claude-sonnet-5) |
request_id |
API リクエスト ID |
message.uuid |
応答の最後の記録エントリの UUID。API の応答は、コンテンツブロックごとに 1 つの記録エントリとして保存され、これはその最後のもので、次のターンの parentUuid がここから連なる。v2.1.214 以降 |
query_source |
要求を出したサブシステム。"repl_main_thread"・"compact"・サブエージェント名など |
tool_result イベント#
ツールの実行が完了したときに記録されます。ツール呼び出しが拒否された場合は出ません(拒否は tool_decision イベント)。イベント名:claude_code.tool_result
| 属性 | 説明 |
|---|---|
tool_name |
ツール名 |
tool_use_id |
このツール呼び出しの一意の識別子。フックに渡される tool_use_id と一致し、OTel のイベントとフックが集めたデータを結べる |
success |
"true" か "false" |
duration_ms |
実行時間(ミリ秒) |
error_type |
ツールが失敗したときのエラー分類の文字列。"Error:ENOENT"・"ShellError" など |
error |
ツールが失敗したときの完全なエラーメッセージ(OTEL_LOG_TOOL_DETAILS=1 のとき) |
decision_type |
常に "accept"(このイベントはツールが動いた後にだけ出るため。拒否された呼び出しは tool result を生まない) |
decision_source |
権限判断の出どころ。"config"・"hook"・"user_permanent"・"user_temporary" のどれか(意味は tool_decision イベント)。拒否専用の "user_abort" と "user_reject" はこのイベントには出ない |
tool_input_size_bytes |
JSON 化したツール入力のバイト数 |
tool_result_size_bytes |
ツール結果のバイト数 |
mcp_server_scope |
MCP サーバーのスコープ識別子(MCP ツールのとき) |
vcs.ref.head.revision・vcs.ref.head.name・vcs.ref.head.type |
Bash か PowerShell ツールが実行して成功した git commit のコミット識別(OTEL_LOG_TOOL_DETAILS=1 のとき)。revision はコミット SHA、name はコミットしたブランチ、type は branch。HEAD が切り離されたコミットでは name と type は省かれる。v2.1.269 以降 |
tool_parameters |
ツール固有のパラメータの JSON 文字列(OTEL_LOG_TOOL_DETAILS=1 のとき)。Claude Desktop 組み込みのサーバーで、Desktop が管理するセッションでは、フラグがオフでも mcp_server_name/mcp_tool_name の組が入る(tool_decision イベントと同じ、ホストが決める名前の例外。v2.1.214 以降) |
tool_input |
JSON 化したツール引数(OTEL_LOG_TOOL_DETAILS=1 のとき)。512 文字を超える個々の値は切り詰められ、全体はおよそ 4K 文字までに収まる。MCP ツールを含む全ツールに適用される |
tool_parameters の中身はツールで変わります。
| ツール | 含まれるもの |
|---|---|
| Bash | bash_command・full_command・timeout・description・dangerouslyDisableSandbox。git commit が成功すると git_commit_id と git_branch も。git_commit_id は、セッションの作業ディレクトリの HEAD のコミットなら完全な SHA、そうでなければ git の省略 SHA。git_branch はコミットしたブランチで、HEAD が切り離されていれば省かれる |
デスクトップアプリのワークスペースの Bash(tool_name は同じく Bash) |
bash_command・full_command・timeout のみ |
| MCP ツール | mcp_server_name・mcp_tool_name |
| Skill ツール | skill_name |
| Agent ツール・旧 Task ツール | subagent_type |
api_request イベント#
Claude への API リクエストごとに記録されます。イベント名:claude_code.api_request
| 属性 | 説明 |
|---|---|
model |
使ったモデル(例:claude-sonnet-5) |
cost_usd |
推定コスト(USD) |
cost_usd_micros |
推定コスト(100 万分の 1 ドル単位の整数) |
duration_ms |
リクエストの所要時間(ミリ秒) |
input_tokens |
入力トークン数(プロンプトキャッシュから読んだ分と書いた分は含まない) |
output_tokens |
出力トークン数 |
cache_read_tokens |
キャッシュから読んだトークン数 |
cache_creation_tokens |
キャッシュの作成に使ったトークン数 |
request_id |
API リクエスト ID("req_011..." など) |
client_request_id |
x-client-request-id リクエストヘッダーとして送るクライアント生成の UUID(付く条件は相関属性の表)。v2.1.214 以降 |
speed |
fast mode が有効だったかを示す "fast" か "normal" |
query_source |
要求を出したサブシステム。"repl_main_thread"・"compact"・サブエージェント名など |
effort |
要求に適用した effort レベル:"low"・"medium"・"high"・"xhigh"・"max"。effort を送らないとき(非対応のモデルなど)は無い |
agent.name・skill.name・plugin.name・marketplace.name・mcp_server.name・mcp_tool.name |
要求のスキル・プラグイン・エージェント・MCP の割り当て(定義と伏せ方はコストカウンター) |
api_error イベント#
Claude への API リクエストが失敗したときに記録されます。イベント名:claude_code.api_error
| 属性 | 説明 |
|---|---|
model |
使ったモデル(例:claude-sonnet-5) |
error |
エラーメッセージ |
status_code |
HTTP ステータスコード(数値)。接続失敗など HTTP 以外のエラーには無い |
duration_ms |
リクエストの所要時間(ミリ秒) |
attempt |
最初の要求を含む総試行回数(1 はリトライなし) |
request_id |
API リクエスト ID("req_011..." など) |
client_request_id |
x-client-request-id リクエストヘッダーとして送るクライアント生成の UUID。サーバーの request_id が付かなかったタイムアウトや接続エラーでも使える(付く条件は相関属性の表)。v2.1.214 以降 |
speed |
fast mode が有効だったかを示す "fast" か "normal" |
query_source |
要求を出したサブシステム。"repl_main_thread"・"compact"・サブエージェント名など |
effort |
要求に適用した effort レベル。effort を送らないとき(非対応のモデルなど)は無い |
agent.name・skill.name・plugin.name・marketplace.name・mcp_server.name・mcp_tool.name |
要求のスキル・プラグイン・エージェント・MCP の割り当て(定義と伏せ方はコストカウンター) |
api_refusal イベント#
API リクエストが stop_reason: "refusal" を返したときに記録されます。拒否は HTTP エラーではなく成功した応答ストリームで届くので、api_error イベントは出ません。このイベントで拒否の頻度を追え、api_request・api_error と同じ属性でグループ化できます。イベント名:claude_code.api_refusal
| 属性 | 説明 |
|---|---|
model |
要求のモデル識別子 |
request_id |
API リクエスト ID("req_011..." など) |
query_source |
要求を出したサブシステム。"repl_main_thread"・"compact"・サブエージェント名など(定義は api_request) |
speed |
fast mode が有効なら "fast"、そうでなければ "normal" |
attempt |
リトライの試行番号。最初の試行は 1 |
effort |
要求に適用した effort レベル。effort を送らないとき(非対応のモデルなど)は無い |
server_fallback_hop |
API のサーバー側のモデルフォールバックが、この拒否を別のモデルで再試行済みで、ユーザーはこの拒否を見ていないとき true。要求が拒否で終わったときは false。フォールバックのモデルも拒否した場合、1 ターンで true の hop イベントと、後の false の最終イベントの両方が出ることがある |
has_category |
API の応答が stop_details.category に "cyber"・"bio"・"frontier_llm"・"reasoning_extraction" のどれかを持っていたら true。カテゴリが無いか、この集合外の値なら false。server_fallback_hop が true のときは無い(hop のブロックは stop_details を持たないため) |
has_explanation |
API の応答が stop_details.explanation を持っていたら true、そうでなければ false。server_fallback_hop が true のときは無い |
category |
API の応答の stop_details.category の値("cyber"・"bio"・"frontier_llm"・"reasoning_extraction" のどれか)。OTEL_LOG_TOOL_DETAILS=1 を設定していて has_category が true のときだけ付く |
agent.name・skill.name・plugin.name・marketplace.name・mcp_server.name・mcp_tool.name |
要求のスキル・プラグイン・エージェント・MCP の割り当て(定義と伏せ方はコストカウンター) |
api_request_body イベント#
OTEL_LOG_RAW_API_BODIES を設定したとき、API リクエストの試行ごとに記録されます。試行ごとに 1 イベントなので、パラメータを調整したリトライもそれぞれイベントを出します。イベント名:claude_code.api_request_body
| 属性 | 説明 |
|---|---|
body |
JSON 化した Messages API のリクエストパラメータ(システムプロンプト・メッセージ・ツールなど)。コンテンツ上限(既定 60 KB)で切り詰め。過去のアシスタントのターンの extended thinking の内容は伏せられる。インラインモード(OTEL_LOG_RAW_API_BODIES=1)のときだけ出る |
body_ref |
切り詰めない本文を入れた <dir>/<uuid>.request.json ファイルの絶対パス。ファイルモード(OTEL_LOG_RAW_API_BODIES=file:<dir>)のときだけ出る |
body_length |
切り詰め前の本文の長さ。file:<dir> のときは UTF-8 のバイト数、=1 のときは UTF-16 コード単位 |
body_truncated |
インラインで切り詰めたとき "true"。ファイルモードと、切り詰めが無いときは無い |
model |
リクエストパラメータのモデル識別子 |
query_source |
要求を出したサブシステム(例:"compact") |
request_body_id |
この試行のリクエスト本文を識別する UUID。成功した試行の api_response_body イベントが同じ値を持つので、応答を、それを生んだ要求と組にできる。v2.1.274 以降 |
api_response_body イベント#
OTEL_LOG_RAW_API_BODIES を設定したとき、API 応答が成功するごとに記録されます。
ファイルモード(OTEL_LOG_RAW_API_BODIES=file:<dir>)では、成功した応答ごとに <dir>/index.jsonl へ JSON を 1 行追記します。項目は timestamp・session_id・query_source・model・request_id・message_id・message_uuid・request_file・response_file です。テレメトリのバックエンドに問い合わせずに、ある記録メッセージの元になった要求と応答のファイルを探すのに使えます。インデックスファイルは v2.1.274 以降です。イベント名:claude_code.api_response_body
| 属性 | 説明 |
|---|---|
body |
JSON 化した Messages API の応答(id・コンテンツブロック・usage・停止理由を含む)。コンテンツ上限(既定 60 KB)で切り詰め。extended thinking の内容は伏せられる。インラインモード(OTEL_LOG_RAW_API_BODIES=1)のときだけ出る |
body_ref |
切り詰めない本文を入れた <dir>/<request_id>.response.json ファイルの絶対パス。ファイルモードのときだけ出る |
body_length |
切り詰め前の本文の長さ。file:<dir> のときは UTF-8 のバイト数、=1 のときは UTF-16 コード単位 |
body_truncated |
インラインで切り詰めたとき "true"。ファイルモードと、切り詰めが無いときは無い |
model |
モデルの識別子 |
query_source |
要求を出したサブシステム |
request_id |
API リクエスト ID("req_011..." など) |
request_body_id |
この応答が答えた api_request_body イベントの request_body_id。v2.1.274 以降 |
message.id |
API が応答に割り当てたメッセージ ID(応答本文の id 項目)。v2.1.274 以降 |
message.uuid |
応答の最後の記録エントリの UUID。request_body_id と合わせて、記録メッセージを、その元の要求・応答の本文に結ぶ。v2.1.274 以降 |
tool_decision イベント#
ツールの権限判断(承認・拒否)が行われたときに記録されます。イベント名:claude_code.tool_decision
| 属性 | 説明 |
|---|---|
tool_name |
ツール名("Read"・"Edit"・"Write"・"NotebookEdit" など) |
tool_use_id |
このツール呼び出しの一意の識別子。フックに渡される tool_use_id と一致する |
decision |
"accept" か "reject" |
tool_source |
常に付く。ツールの出どころで、CLI が決める閉じた集合の値。v2.1.214 以降 |
source |
判断の出どころ(下の表) |
tool_parameters |
ツール固有のパラメータの JSON 文字列(OTEL_LOG_TOOL_DETAILS=1 のとき)。形は tool_result イベントと同じで、git_commit_id のような実行後の項目は除く。承認された呼び出しでも、権限判断が updatedInput でツール入力を書き換えると tool_result と値が違うことがある。decision が "reject" のときに、どのコマンドが拒否されたかを見るのに使う |
tool_source の値です。
| 値 | 意味 |
|---|---|
"builtin" |
CLI 自身のツール |
"mcp" |
MCP サーバー全般 |
"sdk_host_builtin_mcp" |
Claude Desktop 自身に組み込まれたプロセス内サーバー(Claude Desktop が管理するセッション)。Claude Desktop が管理するのは、自分のエントリポイント claude-desktop・claude-desktop-3p・local-agent から始めた、入れ子の子でないセッション。入れ子のセッション(Claude Code 自身が起動するものを含む)は、これらのサーバーを "mcp" と報告する |
source の値です。
| 値 | 意味 |
|---|---|
"config" |
確認なしに自動で決まった。プロジェクト設定・ユーザー個人設定の allow/deny ルール・企業の管理ポリシー・--allowedTools/--disallowedTools フラグ・有効な権限モード・同じ対話 CLI セッションで以前の確認から得たセッション単位の許可・ツールが本質的に安全であること、のどれか(どれに一致したかはイベントに出ない)。権限確認の要求自体が失敗したときも "config" になる(Agent SDK の canUseTool コールバックや --permission-prompt-tool のツールが無効な結果を返したとき、要求の待機中に入力ストリームが閉じたときなど)。v2.1.216 より前は、これらの失敗を "user_reject" と報告していた |
"hook" |
PreToolUse か PermissionRequest のフックが判断を返した |
"user_permanent" |
権限確認で「Yes, and don't ask again for ...」(個人設定に allow ルールを保存する)を選んだ。対話 CLI ではその選択自体だけで出し、保存したルールに一致する後の呼び出しは "config" を出す。Agent SDK と非対話の -p では、最初の選択も後のルール一致も "user_permanent"。承認として扱う |
"user_temporary" |
権限確認で 1 回限りの「Yes」を選んだか、ファイルの編集・読み取りの確認でセッションの残りの間アクセスを許す選択をした。対話 CLI ではその選択自体だけで出し、そのセッション単位の許可が通す後の呼び出しは "config"。Agent SDK と非対話の -p では、選択も後の一致も "user_temporary"。承認として扱う |
"user_abort" |
権限確認に答えずに閉じた。Agent SDK と非対話の -p では、canUseTool か --permission-prompt-tool の権限要求の待機中にターンを中断した場合も含む(v2.1.216 より前はこの中断を "user_reject" と報告)。拒否として扱う |
"user_reject" |
確認で「No」を選んだ。対話 CLI ではその選択自体だけで出し、個人設定の deny ルールに一致した呼び出しは "config"。Agent SDK と非対話の -p では、個人設定の deny ルールに一致した呼び出しが "user_reject"。拒否として扱う |
tool_parameters の補足です。
"sdk_host_builtin_mcp"のツールでは、ホストアプリがこれらの名前を決めるので、OTEL_LOG_TOOL_DETAILSがオフでもmcp_server_nameとmcp_tool_nameが入ります。これが無いと、これらの組み込みサーバーへの拒否された呼び出しが、既定のストリームで誰のものか分からなくなるためです。ユーザーが設定した MCP サーバーでは、イベントのtool_nameは常に文字どおり"mcp_tool"で、サーバー名とツール名は、フラグがあるときのtool_parametersにだけ出ます。引数の内容はどこでもフラグが必要です。v2.1.214 以降- Bash ツール:
bash_command・full_command・timeout・description・dangerouslyDisableSandbox。デスクトップアプリのワークスペースの Bash ツールもtool_nameはBashだが、含まれるのはbash_command・full_command・timeoutのみ - MCP ツール:
mcp_server_name・mcp_tool_name - Skill ツール:
skill_name - Agent ツール・旧 Task ツール:
subagent_type
permission_mode_changed イベント#
権限モードが変わったときに記録されます。Shift+Tab の切り替え・plan mode の終了・auto mode のゲート確認などが原因です(権限モード)。イベント名:claude_code.permission_mode_changed
| 属性 | 説明 |
|---|---|
from_mode |
変更前の権限モード。"default"・"plan"・"acceptEdits"・"auto"・"bypassPermissions" など |
to_mode |
新しい権限モード |
trigger |
変更の原因。"shift_tab"・"exit_plan_mode"・"auto_gate_denied"・"auto_opt_in" のどれか。変更が SDK かブリッジ由来のときは無い |
auth イベント#
/login か /logout が完了したときに記録されます。イベント名:claude_code.auth
| 属性 | 説明 |
|---|---|
action |
"login" か "logout" |
success |
"true" か "false" |
auth_method |
認証方法。"oauth" など |
error_category |
失敗したときのエラーの種類の分類。生のエラーメッセージは含まれない |
status_code |
HTTP エラーで失敗したときの HTTP ステータスコード(文字列) |
mcp_server_connection イベント#
MCP サーバーが接続・切断・接続失敗したときに記録されます。イベント名:claude_code.mcp_server_connection
| 属性 | 説明 |
|---|---|
status |
"connected"・"failed"・"disconnected" |
transport_type |
サーバーのトランスポート。"stdio"・"sse"・"http" など |
server_scope |
サーバーを設定したスコープ。"user"・"project"・"local" など |
duration_ms |
接続試行の所要時間(ミリ秒) |
error_code |
接続が失敗したときのエラーコード |
is_plugin |
サーバーがプラグイン提供なら true、そうでなければ false |
plugin_id_hash |
プラグイン名とマーケットプレイスの安定したハッシュ(is_plugin が true のとき)。名前を出さずにプラグイン別にイベントをまとめられる。算出方法は plugin_loaded イベントの節 |
plugin.name |
サーバーを提供するプラグインの名前(is_plugin が true のとき)。サードパーティのプラグインは、OTEL_LOG_TOOL_DETAILS=1 が無い限り文字列 "third-party" になり、既定ではログにサードパーティのプラグイン名が出ないようにしている。Anthropic の公式の出どころのプラグインは常に名前で識別される。plugin_id_hash と plugin.name は自分の監視バックエンドへ流れ、Anthropic には送られない |
server_name |
設定したサーバー名(OTEL_LOG_TOOL_DETAILS=1 のとき) |
error |
接続が失敗したときの完全なエラーメッセージ(OTEL_LOG_TOOL_DETAILS=1 のとき) |
internal_error イベント#
Claude Code が想定外の内部エラーを捕捉したときに記録されます。記録するのはエラーのクラス名と errno 形式のコードだけで、エラーメッセージとスタックトレースは含みません。Amazon Bedrock・Google Cloud の Agent Platform・Microsoft Foundry で動かしているとき、または DISABLE_ERROR_REPORTING を設定しているときは出ません。イベント名:claude_code.internal_error
| 属性 | 説明 |
|---|---|
error_name |
エラーのクラス名。"TypeError"・"SyntaxError" など |
error_code |
エラーにあれば、Node.js の errno コード。"ENOENT" など |
plugin_installed イベント#
プラグインのインストールが完了したとき、claude plugin install CLI コマンドと対話の /plugin UI の両方から記録されます(プラグインを使う)。イベント名:claude_code.plugin_installed
| 属性 | 説明 |
|---|---|
marketplace.is_official |
マーケットプレイスが Anthropic 公式なら "true"、そうでなければ "false" |
install.trigger |
"cli" か "ui" |
plugin.name |
インストールしたプラグイン名。サードパーティのマーケットプレイスでは OTEL_LOG_TOOL_DETAILS=1 のときだけ含まれる |
plugin.version |
マーケットプレイスのエントリに宣言されたプラグインのバージョン。サードパーティのマーケットプレイスでは OTEL_LOG_TOOL_DETAILS=1 のときだけ含まれる |
marketplace.name |
プラグインをインストールしたマーケットプレイス。サードパーティのマーケットプレイスでは OTEL_LOG_TOOL_DETAILS=1 のときだけ含まれる |
plugin_loaded イベント#
セッション開始時に、有効なプラグインごとに 1 回記録されます。インストール操作自体を記録する plugin_installed を補い、全社でどのプラグインが有効かの棚卸しに使います。イベント名:claude_code.plugin_loaded
| 属性 | 説明 |
|---|---|
plugin.name |
プラグイン名。公式マーケットプレイスと組み込みバンドル以外のプラグインは、OTEL_LOG_TOOL_DETAILS=1 が無いと "third-party" |
marketplace.name |
プラグインをインストールしたマーケットプレイス(分かるとき)。plugin.name と同じ条件で "third-party" に伏せられる |
plugin.version |
プラグインのマニフェストのバージョン。名前が伏せられておらず、マニフェストがバージョンを宣言しているときだけ含まれる |
plugin.scope |
プラグインの由来の分類:"official"・"community"・"org"・"user-local"・"default-bundle" |
enabled_via |
有効になった経緯:"default-enable"・"org-policy"・"admin-install"・"seed-mount"・"user-install"。"admin-install" は、組織の「Organization settings > Plugins & skills」で必須または自動インストールに設定されたプラグイン(v2.1.246 より前は "user-install" か "seed-mount" と報告していた) |
plugin_id_hash |
プラグイン名とマーケットプレイスの決定的なハッシュで、設定したエクスポーターにだけ送る。名前を記録せずに、全社で読み込まれた別個のサードパーティのプラグインを数えられる。claude.ai から同期されたプラグインは、claude.ai が報告するマーケットプレイス名(無ければ synced)と合わせてハッシュする(v2.1.246 より前は claude.ai が報告するマーケットプレイス名を使っていなかった) |
has_hooks |
プラグインがフックを提供するか |
has_mcp |
プラグインが MCP サーバーを提供するか |
host_owned_mcp |
SDK のホストがこのプラグインの MCP 接続を管理し、Claude Code がプラグインの MCP サーバー設定を読むのを省いたとき true、そうでなければ false。v2.1.172 以降 |
skill_path_count |
プラグインが宣言するスキルのディレクトリ数 |
command_path_count |
プラグインが宣言するコマンドのディレクトリ数 |
agent_path_count |
プラグインが宣言するエージェントのディレクトリ数 |
safe_mode |
セッションを --safe-mode で始めたとき "true"、そうでなければ "false"。safe mode ではこのイベントは設定された一覧だけを報告し、プラグインのコマンド・スキル・フック・MCP サーバーは読み込まれない。v2.1.169 以降 |
skill_activated イベント#
スキルが呼び出されたとき、Claude が Skill ツールで呼んだ場合も、/ コマンドで実行した場合も記録されます(スキル)。イベント名:claude_code.skill_activated
| 属性 | 説明 |
|---|---|
skill.name |
スキル名。ユーザー定義とサードパーティのプラグインのスキルは、OTEL_LOG_TOOL_DETAILS=1 が無いと代替値 "custom_skill" |
invocation_trigger |
スキルが起動された方法("user-slash"・"claude-proactive"・"nested-skill") |
skill.source |
スキルの読み込み元(例:"bundled"・"userSettings"・"projectSettings"・"plugin") |
skill.kind |
ワークフローのスキルなら "workflow"。そうでなければ無い |
plugin.name |
スキルをプラグインが提供しているときの持ち主のプラグイン名(OTEL_LOG_TOOL_DETAILS=1 か、公式マーケットプレイスのプラグインのとき) |
marketplace.name |
スキルをプラグインが提供しているときの、そのプラグインをインストールしたマーケットプレイス(OTEL_LOG_TOOL_DETAILS=1 か、公式マーケットプレイスのプラグインのとき) |
at_mention イベント#
Claude Code がプロンプトの @ メンションを解決したときに記録されます。すべてのメンションが出すわけではなく、権限の拒否・大きすぎるファイル・PDF の参照の添付・ディレクトリ一覧の失敗などの早期終了の経路は、記録せずに戻ります。イベント名:claude_code.at_mention
| 属性 | 説明 |
|---|---|
mention_type |
メンションの種類("file"・"directory"・"agent"・"mcp_resource"・"peer")。"peer" は自分の別の Claude Code セッションへのメンション(セッション間のメッセージ)。v2.1.232 以降 |
success |
メンションの解決に成功したか("true" か "false") |
api_retries_exhausted イベント#
2 回以上の試行のあとに API リクエストが失敗したときに 1 回記録されます。最終の api_error イベントと一緒に出ます。イベント名:claude_code.api_retries_exhausted
| 属性 | 説明 |
|---|---|
model |
使ったモデル |
error |
最終のエラーメッセージ |
status_code |
HTTP ステータスコード(数値)。HTTP 以外のエラーには無い |
total_attempts |
総試行回数 |
total_retry_duration_ms |
全試行を通した実時間の合計 |
speed |
"fast" か "normal" |
hook_registered イベント#
セッション開始時に、設定されたフックごとに 1 回記録されます。実行ごとの hook_execution_start・hook_execution_complete を補い、全社でどのフックが有効かの棚卸しに使います(フックのリファレンス)。イベント名:claude_code.hook_registered
| 属性 | 説明 |
|---|---|
hook_event |
フックのイベント種別。"PreToolUse"・"PostToolUse" など |
hook_type |
フックの実装の種類:"command"・"prompt"・"mcp_tool"・"http"・"agent" |
hook_source |
フックを定義した場所:"userSettings"・"projectSettings"・"localSettings"・"flagSettings"・"policySettings"・"pluginHook" |
safe_mode |
セッションを --safe-mode で始めたとき "true"、そうでなければ "false"。v2.1.169 以降 |
hook_matcher |
フック設定の matcher 文字列(設定されているとき。OTEL_LOG_TOOL_DETAILS=1 のとき) |
plugin.name |
提供したプラグインの名前(hook_source が "pluginHook" のとき)。公式マーケットプレイスと組み込みバンドル以外のプラグインは、OTEL_LOG_TOOL_DETAILS=1 が無いと "third-party" |
plugin_id_hash |
プラグイン名とマーケットプレイスの決定的なハッシュ(hook_source が "pluginHook" のとき)で、設定したエクスポーターにだけ送る。名前を記録せずに、提供している別個のプラグインを数えられる。算出方法は plugin_loaded イベント |
hook_execution_start イベント#
フックのイベントに対して 1 つ以上のフックが実行を始めたときに記録されます。イベント名:claude_code.hook_execution_start
| 属性 | 説明 |
|---|---|
hook_event |
フックのイベント種別。"PreToolUse"・"PostToolUse" など |
hook_name |
matcher を含むフックの完全な名前。"PreToolUse:Write" など |
num_hooks |
一致したフックコマンドの数 |
managed_only |
管理ポリシーのフックだけが許可されているとき "true" |
hook_source |
"policySettings" か "merged" |
safe_mode |
セッションを --safe-mode で始めたとき "true"、そうでなければ "false"。v2.1.169 以降 |
hook_definitions |
JSON 化したフック設定。詳細ベータトレースと OTEL_LOG_TOOL_DETAILS=1 の両方が有効なときだけ含まれる |
hook_execution_complete イベント#
フックのイベントのすべてのフックが終わったときに記録されます。イベント名:claude_code.hook_execution_complete
| 属性 | 説明 |
|---|---|
hook_event |
フックのイベント種別 |
hook_name |
matcher を含むフックの完全な名前 |
num_hooks |
一致したフックコマンドの数 |
num_success |
成功して完了した数 |
num_blocking |
ブロックの判断を返した数 |
num_non_blocking_error |
ブロックせずに失敗した数 |
num_cancelled |
完了前に取り消された数 |
total_duration_ms |
一致した全フックの実時間 |
stdout_chars |
成功した一致フック全体の stdout の合計文字数。v2.1.280 以降 |
additional_context_chars |
一致したフックが返した additionalContext の合計文字数。v2.1.280 以降 |
system_message_chars |
一致したフックが返した systemMessage の合計文字数。v2.1.280 以降 |
initial_user_message_chars |
一致したフックが返した initialUserMessage の合計文字数。v2.1.280 以降 |
num_outputs_persisted |
10,000 文字の上限を超え、Claude Code がファイルへ保存したフック出力の数。v2.1.280 以降 |
managed_only |
管理ポリシーのフックだけが許可されているとき "true" |
hook_source |
"policySettings" か "merged" |
safe_mode |
セッションを --safe-mode で始めたとき "true"、そうでなければ "false"。v2.1.169 以降 |
hook_definitions |
JSON 化したフック設定。詳細ベータトレースと OTEL_LOG_TOOL_DETAILS=1 の両方が有効なときだけ含まれる |
hook_plugin_metrics イベント#
公式マーケットプレイスのプラグインのフックが、呼び出しごとの指標を出したときに記録されます。出せるのは、Anthropic の公式マーケットプレイスからインストールしたプラグインだけで、サードパーティのマーケットプレイスのプラグインとユーザーが設定したフックはこのイベントを出しません。プラグインの挙動(検出率・コスト・所要時間など)を自前の可観測性基盤で監視するのに使います。イベント名:claude_code.hook_plugin_metrics
| 属性 | 説明 |
|---|---|
plugin_id |
<name>@<marketplace> 形式のプラグイン識別子 |
hook_event |
指標を出したフックのイベント種別 |
| プラグインが出す指標のキー(最大 20) | 名前は ^[a-z][a-z0-9_]{0,39}$ に合致する。値は真偽値か数値 |
compaction イベント#
会話の圧縮が完了したときに記録されます(コンテキストとプロンプトキャッシュ)。イベント名:claude_code.compaction
| 属性 | 説明 |
|---|---|
trigger |
"auto" か "manual" |
success |
"true" か "false" |
duration_ms |
圧縮の所要時間 |
pre_tokens |
圧縮前のおおよそのトークン数 |
post_tokens |
圧縮後のおおよそのトークン数 |
error |
圧縮が失敗したときのエラーメッセージ |
precompute_reuse |
trigger が "manual" のときだけ設定される。自動圧縮はコンテキストウィンドウが埋まる前にバックグラウンドで要約を用意でき、この属性は /compact がその用意した要約を再利用したかを記録する。"hit" は再利用。"miss_custom_instructions"・"miss_hook"・"miss_not_ready" は、代わりに新しい要約を計算した理由。v2.1.153 以降 |
subagent_completed イベント#
サブエージェントが終わり、起動元の会話へ結果を返したときに記録されます。サブエージェントの種類ごとにツール使用と実行時間を集計するのに使います。トークンやコストの集計には、query_source を "subagent" に絞ったトークンカウンターとコストカウンターを使います(このイベントの total_tokens は最後のリクエストだけだからです)。"subagent" の分類は、エージェント型フックのリクエストも数えますが、それはサブエージェントのイベントを出しません。イベント名:claude_code.subagent_completed
| 属性 | 説明 |
|---|---|
agent_type |
サブエージェントの種類。組み込みのエージェント名と公式マーケットプレイスのプラグインのエージェントはそのまま、ほかのエージェント名は OTEL_LOG_TOOL_DETAILS=1 が無いと "custom" に置き換わる |
agent.source |
エージェント定義の出どころ:built-in・plugin、またはカスタムエージェントを定義した設定の取得元(userSettings・projectSettings など) |
is_built_in |
サブエージェントが組み込みのエージェント型か |
is_async |
サブエージェントがバックグラウンドで動いたか |
total_tokens |
サブエージェントの最後の API リクエストのトークン量。その 1 リクエストの入力・キャッシュ作成・キャッシュ読み取り・出力のトークンで、完了時のサブエージェントのコンテキストの大きさにほぼ等しい。実行全体の合計ではない |
total_tool_uses |
サブエージェントが実行全体で行ったツール呼び出しの数 |
duration_ms |
実行時間(ミリ秒) |
model |
サブエージェントが実行すると決まったモデル |
final_model |
サブエージェントの最終応答を出したモデル。フォールバックなどで途中で切り替わると model と異なる。v2.1.212 以降 |
model_swapped |
2 つ以上のモデルがサブエージェントの要求に応じたか。v2.1.212 以降 |
plugin_id_hash・plugin.name |
プラグイン提供のエージェントに付く。公式マーケットプレイスのプラグイン名はそのまま、ほかのプラグイン名は OTEL_LOG_TOOL_DETAILS=1 が無いと "third-party" に置き換わる |
feedback_survey イベント#
セッションの品質アンケートが表示された、または回答されたときに記録されます。アンケートが集める内容と制御の方法はセキュリティとデータの扱いを参照してください。イベント名:claude_code.feedback_survey
| 属性 | 説明 |
|---|---|
event_type |
アンケートのライフサイクルのイベント。"appeared"・"responded"・"transcript_prompt_appeared" など |
appearance_id |
1 回のアンケートで出たイベントを結ぶ一意の ID |
survey_type |
イベントを出したアンケート。"session" は「How is Claude doing?」の評価プロンプト |
response |
responded イベントでのユーザーの選択 |
enabled_via_override |
CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTEL を設定したとき true。文字列ではなく真偽値で出る。session アンケートのイベントに付く。全社で上書きが適用されたかをこの属性で絞って確かめられる |
retention_sweep イベント#
保持期間の掃除(cleanupPeriodDays 設定より古いセッション記録などのアプリケーションデータを削除する)の実行ごとに 1 回記録されます。掃除は、1 セッションにつき最大 1 回、バックグラウンドで動きます。何も削除しなかった実行もイベントを出します。同じマシンのどこかのセッションで過去 24 時間以内に掃除が走っていれば、このセッションの掃除は少なくとも 10 分遅れるので、それより早く終わるセッションはイベントを出しません。claude -p を --bare で動かすと、掃除は走らず、イベントも出ません。
このページのほかの OTel イベントと同じく、設定したテレメトリのバックエンドにだけ送られます(v2.1.227 以降)。
Claude Code が保持期間を安全に決められないときは、掃除を止め、result を "skipped" にして skip_reason を付けたイベントを出します。管理設定が cleanupPeriodDays を設定していると、管理値が保持期間を固定し、優先度の低いスコープの設定ファイルが壊れていても掃除は動きます。managed-settings.json 自体が読めないときは、管理層が別の取得元(サーバー管理設定や、壊れたファイルの隣の managed-settings.d/ のドロップイン)から cleanupPeriodDays を供給しない限り、掃除は止まります。削除数のカウンターの属性は result が "complete" のときだけ付きます。イベント名:claude_code.retention_sweep
| 属性 | 説明 |
|---|---|
result |
掃除が動いたら "complete"、Claude Code が止めたら "skipped" |
period_days |
統合した設定の cleanupPeriodDays の日数。どの取得元も設定していなければ 30。スキップしたイベントでは、読めた設定の取得元から計算した、掃除が使ったはずの値 |
used_default |
読める設定の取得元のどれも cleanupPeriodDays を設定していなければ "true"、そうでなければ "false"。完了したイベントでの "true" は、既定の 30 日が適用されたこと |
skip_reason |
掃除を止めた理由。result が "skipped" のときだけ付く(下の表) |
transcripts_deleted |
掃除が削除したセッション記録(トップレベルの ~/.claude/projects/*/*.jsonl)の数 |
transcripts_exempted_desktop |
保持期間を過ぎたが、Claude Desktop と Cowork の規則で掃除が残した記録の数。files_past_cutoff には数えない。v2.1.248 以降 |
session_files_deleted |
セッションファイルの掃除が削除した成果物の数:記録と、サイドカー・録画・ツール結果などのセッションごとの付属ファイル |
artifacts_deleted |
掃除が対象とするデータディレクトリ全体で削除した項目の合計(セッションファイルを含む)。ディレクトリツリー全体を 1 項目と数える掃除や、カウンターに寄与しない掃除があるので、正確なファイル数ではなく下限として扱う |
files_retained_fresh |
調べた結果、まだ保持期間内なので残したファイル。ファイル単位の掃除だけが数えるので下限の値。0 でない値は通常の定常状態 |
files_past_cutoff |
保持期間より古いのに掃除が削除に失敗したファイル(権限エラーや開いたままのファイルなど)。0 より大きければ、設定した保持期間より長く残ったファイルがある。ディレクトリ全体の削除の失敗は error_count に数えるので、0 でも残りが無い証明にはならない |
error_count |
掃除がファイルの一覧取得や削除で出会ったエラーの数 |
skip_reason の値です。
| 値 | 意味 |
|---|---|
"user_source_disabled" |
--setting-sources フラグや SDK の settingSources オプションなどでユーザー設定が除外され、有効な取得元のどれも cleanupPeriodDays を提供していない |
"settings_unknowable" |
設定ファイルを読めない・解析できないため、cleanupPeriodDays か desktopSessionCleanupPeriodDays に Claude Code から見えない値が設定されているかもしれない |
"settings_invalid_key_set" |
設定に検証エラーがあり、cleanupPeriodDays か desktopSessionCleanupPeriodDays が明示的に設定されているため、既定に戻すとその設定に反して削除したり残したりしうる |
managed_settings_resolved イベント#
セッションが解決した管理設定とともに記録されます。セッション開始時に 1 回、セッション中に管理設定かポリシーヘルパーの状態が変わったとき、および error.type が挙げる理由のどれかで Claude Code が起動を拒否またはセッションを終了したときです。想定外の管理の取得元で動いているマシン・ポリシーヘルパーが失敗しているマシン・マシンが起動を拒否した理由を見つけるのに使います(v2.1.274 以降。設定の詳細は組織への導入と管理設定)。
既定では、イベントは管理の取得元とポリシーヘルパーの状態を持ち、設定そのものは持ちません。秘匿した managed_settings.settings 属性と managed_settings.resolved_sha256 ダイジェストを足すには OTEL_LOG_MANAGED_SETTINGS=1 を設定します。
- 管理設定の
envブロック・ユーザー設定・--settings、または Claude Code を起動する環境に置く。プロジェクトとローカル設定の値では有効にならない(クローンしたリポジトリが書けるため) - サーバー管理設定からは、セキュリティ承認ダイアログを出さずに設定できる。この変数は、組織がすでに受け取るイベントに、組織自身の秘匿済みポリシーを足すだけだから
- 信頼していないフォルダでの対話セッションでは、Claude Code は拒否イベントをエクスポートしない
イベント名:claude_code.managed_settings_resolved
| 属性 | 説明 |
|---|---|
managed_settings.trigger |
セッション開始時のイベントは "startup"、セッション中に管理設定かポリシーヘルパーの状態が変わったら "change"、管理設定のポリシーがセッションを止めたら "refused"。change イベントは、属性が最後に送ったイベントと異なるときだけ送られ、設定値の変更は OTEL_LOG_MANAGED_SETTINGS がオフでも数えられる |
error.type |
Claude Code がセッションを止めた理由。refused イベントにだけ付く(下の表) |
managed_settings.sources |
ポリシーキーを 1 つ以上届ける管理の取得元すべて(優先度の高い順)。first-wins で効かないキーの取得元も含む。値は、"remote"・MDM か OS レベルのポリシーの "plist" か "hklm"・管理設定ファイルとドロップインの "file"・埋め込みホストが設定を供給するときの "parent"・Claude Code が読むときの Windows HKCU レジストリ値の "hkcu"。制御キーしか持たない取得元や、Claude Code が読めなかった取得元は載らない。文字列の配列で、管理の取得元がポリシーキーを届けていなければ空 |
managed_settings.source_behavior |
Claude Code が読んだ managedSourcesBehavior の値で、"first-wins" か "merge"。どの取得元もキーを設定していなければ "first-wins" |
managed_settings.helper.state |
選ばれた MDM かファイルの取得元が設定するポリシーヘルパーの状態(下の表) |
managed_settings.helper.applied |
ヘルパー自身の出力が管理設定として使われているとき "output"、そうでなければ "none" |
managed_settings.helper.entry |
Claude Code が policyHelper を選んだとき "policyHelper"。ヘルパーを選ばなければ無い |
managed_settings.helper.path |
ヘルパーに設定された path。Claude Code がヘルパーを選んだときは、OTEL_LOG_MANAGED_SETTINGS の有無にかかわらず付く |
managed_settings.resolved_sha256 |
秘匿前の、解決済みの管理設定の SHA-256(キーを再帰的に並べ替え、空白なしの JSON にシリアライズしたもの)。OTEL_LOG_MANAGED_SETTINGS=1 のとき。同じダイジェストのマシンは同じポリシーで動いている。短いポリシーは推測のハッシュ化で復元できるので、オプトインのときだけ送る。管理設定が解決されなかったときと refused イベントには無い |
managed_settings.settings |
解決済みの管理設定の名前と形を、値を秘匿した JSON 文字列にしたもの(OTEL_LOG_MANAGED_SETTINGS=1 のとき)。refused イベントには無い。Claude Code が自分の設定スキーマから作る |
managed_settings.settings_truncated |
managed_settings.settings が出ているとき、Claude Code が 8 KB で切ったら true、そうでなければ false。文字列ではなく真偽値で出る |
error.type の値です。
| 値 | 意味 |
|---|---|
"helper_failed" |
ポリシーヘルパーの実行が失敗した |
"policy_invalid" |
管理設定に Claude Code の起動を止めるエラーがあるか、管理者の取得元が、読み取りの拒否以外の理由で読み込めず、組織ログインやプロバイダーの強制を確認できない |
"provider_not_allowed" |
セッションが、管理の allowedProviders リストが許可しない API プロバイダーを使う、またはプロバイダーの通信を許可しないホストへ送ろうとした。v2.1.285 以降 |
"consent_rejected" |
サーバー管理設定のセキュリティ承認ダイアログをユーザーが拒否した |
"force_refresh_failed" |
forceRemoteSettingsRefresh が要求する設定の取得が失敗した |
"gateway_rejected" |
Claude apps gateway が管理設定の読み込みに HTTP 403 で答えた |
"version_below_minimum" |
この Claude Code のバージョンが requiredMinimumVersion より低いか、requiredMaximumVersion より高い |
"_OTHER" |
Claude apps gateway の管理設定の読み込みがほかの理由で失敗した |
managed_settings.helper.state の値です。
| 値 | 意味 |
|---|---|
"ok" |
ヘルパーの出力が管理設定として使われている |
"bad_path"・"not_a_file"・"exit_nonzero"・"timed_out"・"oversize"・"parse_failed"・"envelope_invalid"・"schema_rejected" |
ヘルパーの最後の実行が失敗した(各ケースの意味はポリシーヘルパーの失敗の説明) |
"none" |
ヘルパーが設定されていない、またはそれを設定する取得元が MDM ポリシーでも管理設定ファイルでもない |
managed_settings.settings の作り方です。
- スキーマが宣言する設定名は出力し、宣言していないキーは出さない
- 真偽値・数値と、スキーマが固定の選択肢に限る文字列値(
permissions.defaultModeなど)はそのまま出力する。sandbox.network.httpProxyPortとsandbox.network.socksProxyPortは"[REDACTED]"で出力する - ほかの文字列(
model・apiKeyHelper・envのすべての値・すべての URL・すべてのコマンドなど)は"[REDACTED]"で出力する - マップのエントリ名(
envの変数名やプラグイン ID など)はそのまま出力する。スキーマがエントリの型を決めていない設定(vimInsertModeRemapsなど)は 1 つの"[REDACTED]"で出力し、sandbox.ignoreViolationsはコマンドパターンを除いたパスのリストの一覧で出力する - リストは長さを保ち、各エントリを同じ規則で秘匿する
permissions.allow・permissions.deny・permissions.askのルールは、ツールがこのバージョンの組み込みかmcp__jira__create_issueのようなmcp__の参照なら、内容を秘匿したツール名(Read([REDACTED])など)で出力する。それ以外のルールは"[REDACTED]"- フックも同じ規則に従うので、
typeやtimeoutのような固定の選択肢や数値の項目は出て、各コマンド・URL・matcher・if条件は"[REDACTED]"になる
apiKeyHelper・2 つの env 変数・deny ルールを持つ管理設定の出力例です。
{"apiKeyHelper":"[REDACTED]","env":{"HTTPS_PROXY":"[REDACTED]","CLAUDE_CODE_ENABLE_TELEMETRY":"[REDACTED]"},"permissions":{"deny":["Read([REDACTED])"]}}
値は UTF-8 で 8 KB で切られ、切られた値は有効な JSON ではありません。
メトリクスとイベントを読み解く#
出力したメトリクスとイベントは、さまざまな分析に使えます。
使用量の監視#
| メトリクス | 分析の使いみち |
|---|---|
claude_code.token.usage |
トークンの type(入力・出力・cacheRead・cacheCreation)・ユーザー・チーム・モデル・skill.name・plugin.name・agent.name で分解する |
claude_code.session.count |
導入と利用の推移を追う |
claude_code.lines_of_code.count |
コードの追加・削除をモデル別に見て生産性を測る |
claude_code.commit.count と claude_code.pull_request.count |
開発ワークフローへの影響を把握する |
コストの監視#
claude_code.cost.usage メトリクスは次に役立ちます。
- チームや個人ごとの使用量の傾向を追う
- 最適化の対象になる使用量の多いセッションを見つける
skill.name・plugin.name・agent.name属性で、支出を特定のスキル・プラグイン・サブエージェントの種類に割り当てる
補足
コストのメトリクスは概算です。公式の請求データは、API プロバイダー(Claude Console・Amazon Bedrock・Google Cloud の Agent Platform)で確認します。
Claude Code は、ANTHROPIC_BASE_URL の先のゲートウェイやプロキシが複数フレームにまたがって使用量を段階的にストリームする場合でも、各ストリーム応答をコストとトークンのメトリクスにちょうど 1 回だけ数えます。v2.1.214 より前は、使用量を複数フレームで運ぶストリームは、増えたフレームごとにおよそ 1 リクエスト分、claude_code.cost.usage と claude_code.token.usage を水増ししていました。
アラートとセグメント分け#
検討したい一般的なアラートです。
- コストの急増
- 異常なトークン消費
- 特定のユーザーからのセッション数の多さ
すべてのメトリクスは標準属性で分けられます。model 属性は claude_code.token.usage・claude_code.cost.usage、および v2.1.172 以降の claude_code.lines_of_code.count にあります。コミットのモデル別の内訳は、1 つのセッションが複数のモデルにまたがりうるので、session.id でトークンかコストのメトリクスと結合して近似するしかありません。補助とサブエージェントの要求が、コミットを作っていないモデルに割り当てられないよう、トークンかコスト側を query_source が "main" の行に絞ります。
リトライ切れの検出#
Claude Code は失敗した API リクエストを内部でリトライし、あきらめたあとにだけ claude_code.api_error を 1 回出すので、そのイベント自体がそのリクエストの終端の信号です。途中のリトライの試行は別のイベントとして記録されません。
- イベントの
attempt属性が総試行回数。CLAUDE_CODE_MAX_RETRIESの既定は 10 で、上限は 15 - v2.1.199 以降は、
CLAUDE_CODE_RETRY_WATCHDOGを設定すると既定を引き上げ、上限を外せる - 一時的なエラーですべてのリトライを使い切ると、
attemptは有効な上限に 1 を足した値になる:既定では 11、watchdog を設定しなければ 16 を超えない。これより小さい値は、400応答のようなリトライ不能なエラーか、より小さな独自のリトライ枠を持つ原因を示す(たとえば AWS や Google Cloud の資格情報の読み込み失敗は、最大 2 回までリトライ) - 回復したセッションと止まったセッションを分けるには、
session.idでイベントをグループ化し、エラーの後にapi_requestイベントがあるかを確認する
イベントの分析#
イベントデータは、Claude Code の各やり取りを詳しく記述します。
- ツールの使用パターン:tool_result イベントから、よく使われるツール・ツールの成功率・ツールの平均実行時間・ツール種別ごとのエラーの傾向を分析する
- 性能の監視:API リクエストの所要時間とツールの実行時間を追って、性能のボトルネックを見つける
入力トークンを OpenTelemetry の GenAI の規約へ対応づける#
Claude Code は、入力トークン数を API 応答の usage ブロックのとおりに出すので、次の値にはプロンプトキャッシュから読んだ分と書いた分が含まれません。
claude_code.llm_requestスパンとapi_requestイベントのinput_tokensclaude_code.token.usageメトリクスの"input"の type
Claude Code は gen_ai.usage.* の属性を設定しません。OpenTelemetry の GenAI の規約は、gen_ai.usage.input_tokens にキャッシュから読んだ分と書いた分を含めるべきだとしています。合計は次のように出します。
- スパンかイベントから:
input_tokens・cache_read_tokens・cache_creation_tokensを足す claude_code.token.usageメトリクスから:"input"・"cacheRead"・"cacheCreation"の type を足す
規約には、キャッシュの読み取りと書き込みの別々の属性もあります。
cache_read_tokensはgen_ai.usage.cache_read.input_tokensに対応するcache_creation_tokensはgen_ai.usage.cache_write.input_tokensに対応する。規約の古い版は書き込みの属性をgen_ai.usage.cache_creation.input_tokensと呼ぶので、バックエンドが求める名前を使う
セキュリティイベントの監査#
OpenTelemetry のイベントは、Claude Code の活動の監査データの出どころです。どのイベントも、ツール呼び出し・MCP の活動・権限判断を、それを起こしたユーザーに結ぶ ID 属性を持ちます。OTLP のログエクスポーターは、これらのイベントを、OTLP レシーバーを持つ SIEM(Security Information and Event Management)基盤か、SIEM へ転送する OpenTelemetry Collector へ届けられます。
操作をユーザーに結びつける#
各イベントの標準属性には、認証済みユーザーの ID があります。Claude アカウントでサインインしているとき(クラウドセッションではセッション自身の資格情報が持つとき)の user.email・user.account_uuid・user.account_id・organization.id と、user.id とセッションごとの session.id です。user.id はインストール単位の識別子ですが、Claude apps gateway に /login でサインインしたセッションでは、ゲートウェイが発行したトークンの IdP のサブジェクトになります。
- 開発者が始めたセッションでは、MCP ツール呼び出し・Bash コマンド・ファイル編集はその開発者に結びつきます。別のサービスアカウントで動くことはなく、各イベントの ID は、開発者自身の Claude アカウント(Claude apps gateway のセッションでは開発者の IdP の ID)です。Claude Tag のチャネルセッションでは、Claude は組織の共有 ID として動きます
- 直接の API キーや Amazon Bedrock・Google Cloud の Agent Platform・Microsoft Foundry で認証しているときは、セッションに Claude アカウントが無く、
user.idとsession.idだけが入ります。この構成では、OTEL_RESOURCE_ATTRIBUTESでユーザーの ID を自分で付けます。管理設定のファイルかランチャーのラッパーで、ユーザーごとに設定します。Claude apps gateway のセッションには不要です
export OTEL_RESOURCE_ATTRIBUTES="enduser.id=jdoe@example.com,enduser.directory_id=S-1-5-21-..."
MCP の活動を監査する#
MCP サーバーの活動を呼び出しの詳細つきで取るには、ログのエクスポーターを有効にして OTEL_LOG_TOOL_DETAILS=1 を設定します。各 MCP 操作が、標準の ID 属性とともにサーバー名・ツール名・呼び出し引数を持つ構造化イベントを出します。
| イベント | MCP について記録するもの |
|---|---|
mcp_server_connection |
サーバーの接続・切断・接続失敗。server_name・transport_type・server_scope とエラーの詳細つき |
tool_result |
各 MCP ツール呼び出し。tool_name と mcp_server_scope、mcp_server_name と mcp_tool_name を含む tool_parameters、呼び出し引数を含む tool_input |
tool_decision |
呼び出しが許可されたか拒否されたか、判断が設定・フック・ユーザーのどれから来たか、mcp_server_name と mcp_tool_name を含む tool_parameters |
OTEL_LOG_TOOL_DETAILS が無いと、これらのイベントは識別の詳細を落とします。
tool_result:mcp_server_scopeは残り、ユーザーが設定したサーバーではtool_nameが文字どおり"mcp_tool"に伏せられ、引数の内容は出ない。Claude Desktop 組み込みのサーバー(Desktop が管理するセッション)では、tool_parametersの中のmcp_server_name/mcp_tool_nameの組も残る(v2.1.214 以降)tool_decision:tool_sourceは残り、ユーザーが設定したサーバーではtool_nameが文字どおり"mcp_tool"に伏せられ、引数の内容は出ない。Claude Desktop 組み込みのサーバー(Desktop が管理するセッション)ではmcp_server_name/mcp_tool_nameの組も残る。tool_sourceと名前の組はどちらも v2.1.214 以降mcp_server_connection:server_nameとエラーメッセージは出ないが、is_plugin・plugin_id_hash・plugin.nameは残り、Anthropic 以外のプラグイン名は文字どおり"third-party"に伏せられるので、詳細ログが無くてもプラグイン提供のサーバーを見分けられる
セキュリティの問いをイベントに対応づける#
検知ルールを作るときは、監視したい信号を探し、対応するイベントと属性をバックエンドに問い合わせます。
| 信号 | イベント | 主な属性 |
|---|---|---|
| ツール呼び出しの許可・拒否と、その判断元 | tool_decision |
decision、source、tool_name、tool_parameters |
| 権限モードの昇格 | permission_mode_changed |
from_mode、to_mode、trigger |
| ポリシーのフックが操作を止めた | hook_execution_complete |
hook_event、num_blocking |
| ログイン・ログアウト・認証の失敗 | auth |
action、success、error_category |
| MCP サーバーの接続や失敗 | mcp_server_connection |
status、server_name、is_plugin、error_code |
| プラグインのインストールとその出どころ | plugin_installed |
plugin.name、marketplace.name、marketplace.is_official |
| 実行したコマンドと触れたファイル | tool_result(実行)か tool_decision(拒否)。OTEL_LOG_TOOL_DETAILS=1 が必要 |
tool_parameters、tool_input(tool_result のみ) |
| マシンがどの管理設定の取得元で動いているか・ポリシーヘルパーが健全か・マシンが起動を拒否した理由 | managed_settings_resolved |
managed_settings.trigger、managed_settings.sources、managed_settings.source_behavior、managed_settings.helper.state、error.type。OTEL_LOG_MANAGED_SETTINGS=1 なら managed_settings.settings と managed_settings.resolved_sha256 も |
Claude Code が出すのは生のイベントストリームだけです。異常検知・ベースライン・セッションをまたぐ相関・アラートは、SIEM か可観測性バックエンドの役目です。
イベントを SIEM に送る#
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT を、SIEM の OTLP レシーバーか、SIEM のネイティブの取り込み API へ転送する OpenTelemetry Collector に向けます。次の管理設定の例は、MCP と Bash の監査のためにツールの詳細を有効にして、イベントだけを出力します。
{
"env": {
"CLAUDE_CODE_ENABLE_TELEMETRY": "1",
"OTEL_LOGS_EXPORTER": "otlp",
"OTEL_LOG_TOOL_DETAILS": "1",
"OTEL_EXPORTER_OTLP_LOGS_PROTOCOL": "http/protobuf",
"OTEL_EXPORTER_OTLP_LOGS_ENDPOINT": "https://siem.example.com:4318/v1/logs",
"OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer your-siem-token"
}
}
イベントが届くかは、この設定で動くセッションでプロンプトを送り、SIEM で claude_code.user_prompt イベントを探して確かめます。何も届かなければ、claude --debug-file <path> で起動し、そのログで [3P telemetry] のエクスポートエラーを確認します。
バックエンドの選び方#
メトリクス・ログ・トレースのバックエンドの選択が、できる分析の種類を決めます。
| 対象 | バックエンドの種類と得意なこと |
|---|---|
| メトリクス | 時系列データベース:レートの計算・集計したメトリクス。列指向ストア:複雑なクエリ・ユニークユーザーの分析。フル機能の可観測性基盤:高度なクエリ・可視化・アラート |
| イベント/ログ | ログ集約システム:全文検索・ログ分析。列指向ストア:構造化したイベントの分析。フル機能の可観測性基盤:メトリクスとイベントの相関 |
| トレース | 分散トレースの保管とスパンの相関に対応するもの。分散トレーシングシステム:スパンの可視化・リクエストのウォーターフォール・レイテンシの分析。フル機能の可観測性基盤:トレースの検索と、メトリクス・ログとの相関 |
日次・週次・月次のアクティブユーザー(DAU/WAU/MAU)の指標が要る組織は、ユニークな値の効率的なクエリに対応するバックエンドを検討してください。
サービス情報#
すべてのメトリクスとイベントは、次のリソース属性つきで出力されます。
| 属性 | 説明 |
|---|---|
service.name |
ターミナルのセッションは claude-code、Claude Desktop アプリの Code タブから始めたセッションは claude-code-desktop |
service.version |
現在の Claude Code のバージョン。Code タブのセッションでは Desktop アプリのバージョン |
os.type |
OS の種類(例:linux・darwin・windows) |
os.version |
OS のバージョン文字列 |
host.arch |
ホストのアーキテクチャ(例:amd64・arm64) |
wsl.version |
WSL のバージョン番号(Windows Subsystem for Linux で動いているときだけ) |
| Meter Name | com.anthropic.claude_code |
コレクターのパイプラインやダッシュボードが service.name = claude-code で絞っているなら、Code タブのセッションのテレメトリも拾うため、絞り込みに claude-code-desktop を足します。
投資対効果の測定#
Claude Code の投資対効果を測る包括的なガイドとして、Anthropic が公開している「Claude Code ROI Measurement Guide」のリポジトリ(anthropics/claude-code-monitoring-guide)があります。テレメトリの設定・コスト分析・生産性指標・自動レポートを扱い、すぐ使える Docker Compose の構成、Prometheus と OpenTelemetry の設定、Linear などのツールと連携する生産性レポートのテンプレートが入っています。Amazon Bedrock での使用量の監視は、AWS が公開している「Claude Code Monitoring Implementation (Amazon Bedrock)」を参照してください。
セキュリティとプライバシー#
- あなたのバックエンドへの OpenTelemetry のエクスポートはオプトインで、明示的な設定が要ります。Anthropic 自身の運用テレメトリとその無効化はセキュリティとデータの扱いを参照
- ファイルの生の内容とコードの断片は、メトリクスとイベントに含まれません。トレースのスパンは別のデータ経路で、
OTEL_LOG_TOOL_CONTENTの項目を参照 - OAuth で認証していると
user.emailがテレメトリの属性に入ります。送られるのは設定した OTel エンドポイントだけで、Anthropic には送られません。懸念がある組織は、テレメトリのバックエンド側でこの項目を絞り込むか秘匿します - ユーザープロンプトの内容は既定で収集されず、プロンプトの長さだけが記録されます。含めるには
OTEL_LOG_USER_PROMPTS=1。有効にすると次が起きます-
user_promptイベントは、プロンプトのテキストをpromptとprompt_textの 2 つの属性に持つ。コレクターで属性名を指定してイベントのプロンプトのテキストを落とす・伏せるときは、ルールに両方の名前を書く次の OpenTelemetry Collector の
attributesプロセッサは、これを列挙したパイプラインで両方の属性を削除します。yamlprocessors: attributes/drop-prompt-text: actions: - key: prompt action: delete - key: prompt_text action: delete -
トレースを有効にすると、
claude_code.interactionスパンがuser_prompt属性にプロンプトのテキストを持つ -
詳細ベータトレースでは、スパンが要求ごとの新しいユーザーメッセージ・ツール結果・システムリマインダー、システムプロンプトのテキスト、モデルの出力も持つ。各属性は「詳細ベータトレースの内容属性」の表を見る。
claude_code.system_promptイベントは完全なシステムプロンプトを持つ
-
- アシスタントの応答テキストは既定で収集されず、応答の長さだけが記録されます。含めるには
OTEL_LOG_ASSISTANT_RESPONSES=1。Claude Code の他の OpenTelemetry データと同じく、応答テキストは設定した OTel エンドポイントにだけ送られ、Anthropic には送られません。この変数が未設定ならOTEL_LOG_USER_PROMPTSが代わりに使われるので、プロンプトの内容は取り、イベントの応答の内容は取りたくないならOTEL_LOG_ASSISTANT_RESPONSES=0を設定します。詳細ベータトレースでは、claude_code.llm_requestスパンのresponse.model_outputが引き続きモデルの出力を持ち、これはこの変数ではなくOTEL_LOG_USER_PROMPTSに従います - ツールの入力引数とパラメータは既定で記録されません。含めるには
OTEL_LOG_TOOL_DETAILS=1。このデータも設定した OTEL エンドポイントにだけ送られ、Anthropic には送られません。引数に機密の値が入りうるので、必要に応じてバックエンドでこれらの属性を絞り込むか秘匿します。有効にすると次が起きますtool_resultとtool_decisionのイベントに、Bash コマンド・MCP のサーバー名とツール名・スキル名を含むtool_parameters属性が入る。full_commandなどは切り詰めずに出るtool_resultイベントには、ファイルパス・URL・検索パターンなどの引数を含むtool_input属性も入る。512 文字を超える個々の値は切り詰められ、全体はおよそ 4K 文字までに収まるuser_promptイベントに、カスタム・プラグイン・MCP のコマンドのcommand_nameがそのまま入る- コスト・トークンのカウンターと
api_request・api_error・api_refusalのイベントの割り当て属性に、実際のエージェント・スキル・プラグイン・MCP のサーバー名とツール名が入る claude_code.toolスパンに、file_pathなどの入力由来の属性が入る。詳細ベータトレースではtool_input属性も入る
- ツールの内容は、トレースのスパンに既定では記録されません。含めるには
OTEL_LOG_TOOL_CONTENT=1。claude_code.toolスパンに、ファイルの生の内容・Bash コマンドの出力・MCP ツールや WebFetch や WebSearch が返したものを持つtool.outputスパンイベントが付き、属性ごとにコンテンツ上限(既定 60 KB)で切られます。MCP ツール・WebFetch・WebSearch の結果は v2.1.283 以降です。ツールの内容はnew_context(ゲートはスパンごとに違う)経由でもスパンに届きます。必要に応じてバックエンドでこれらの属性を絞り込むか秘匿します - Anthropic Messages API の生のリクエスト・応答本文は既定で記録されません。含めるには、シェル・ユーザー設定・管理設定に
OTEL_LOG_RAW_API_BODIESを設定します(プロジェクトとローカル設定では無視される)。本文は、システムプロンプト・過去のユーザーとアシスタントのすべてのターン・ツール結果を含む会話履歴全体を含むので、有効にすると、他のOTEL_LOG_*の内容フラグが明らかにするすべてに同意したことになります。Claude の extended thinking の内容は、他の設定にかかわらず常に伏せられます。設定した値が、本文の届け方を決めます=1:API 呼び出しごとにapi_request_bodyとapi_response_bodyのログイベントを出す。イベントのbody属性に JSON 化したペイロードが入り、コンテンツ上限(既定 60 KB)で切られる=file:<dir>:切り詰めない本文を、そのディレクトリの下の.request.jsonと.response.jsonに書き、イベントにはインラインの本文の代わりにbody_refのパスが入る。ディレクトリはテレメトリのストリームではなく、ログコレクターかサイドカーで送る。成功した応答ごとに、そのディレクトリのindex.jsonlへ 1 行が追記され、応答ファイルを、それを生んだ要求ファイルと、それになった記録メッセージに結ぶ。各行はメッセージの内容を持たない。項目は api_response_body イベントの節にある。インデックスファイルは v2.1.274 以降
チームの分析ダッシュボード#
OpenTelemetry とは別に、プランごとの分析ダッシュボードがあります。開発者の利用状況・貢献の指標・導入状況を見るためのものです。
| プラン | ダッシュボード | 含まれるもの |
|---|---|---|
| Claude for Teams / Enterprise | claude.ai の analytics/claude-code |
使用量の指標、GitHub 連携の貢献指標、リーダーボード、データのエクスポート |
| API(Claude Console) | platform.claude.com の claude-code |
使用量の指標、支出の追跡、チームの洞察 |
ユーザー別のトークン数とコストの推定は、OpenTelemetry のエクスポートを設定するか、組織の分析設定から Spend report をエクスポートします(ユーザー別・モデル別のトークン使用量と、推定の使用クレジットの支出が出ます)。支出の管理はコストを抑えるを参照してください。
Team・Enterprise の分析#
ダッシュボードを見られるのは、管理者(Admin)とオーナー(Owner)です。内容は次のとおりです。
- 使用量の指標:受け入れたコードの行数・提案の受け入れ率・日次のアクティブユーザーとセッション
- 貢献の指標:Claude Code の支援で出した PR とコード行数(GitHub 連携)
- リーダーボード:Claude Code の使用量で並べた上位の貢献者
- データのエクスポート:貢献データを CSV でダウンロードしてカスタムレポートに使う
貢献指標を有効にする#
補足
貢献指標は公開ベータで、Claude for Teams と Claude for Enterprise のプランで使えます。対象は claude.ai の組織内のユーザーだけで、Claude Console の API やサードパーティ連携の使用は含まれません。
使用量と導入のデータは、すべての Claude for Teams と Claude for Enterprise のアカウントで使えます。貢献指標には、GitHub の組織をつなぐ追加の設定が要り、分析設定の変更にはオーナーのロールが、GitHub アプリのインストールには GitHub の管理者が必要です。
注意
Zero Data Retention を有効にした組織では、貢献指標は使えません。分析ダッシュボードには使用量の指標だけが出ます(セキュリティとデータの扱い)。
- GitHub の管理者が、組織の GitHub アカウントに Claude の GitHub アプリ(
github.com/apps/claude)をインストールする - Claude のオーナーが、
claude.ai/admin-settings/claude-codeで Claude Code の分析機能を有効にする - 同じページで「GitHub analytics」のトグルを有効にする
- GitHub の認証フローを完了し、分析に含める GitHub の組織を選ぶ
データは通常、有効にしてから 24 時間以内に現れ、毎日更新されます。データが出ないときは次のメッセージが出ることがあります。
- 「GitHub app required」:貢献指標を見るには GitHub アプリをインストールする
- 「Data processing in progress」:数日後にもう一度見る。それでも出なければ GitHub アプリがインストールされているか確認する
貢献指標は、GitHub Cloud と GitHub Enterprise Server に対応しています。
要約指標を読む#
補足
これらの指標は意図的に控えめで、Claude Code の実際の影響を過小に見積もります。Claude Code の関与に高い確信がある行と PR だけを数えます。
ダッシュボードの上部に次の要約指標が出ます。
| 指標 | 説明 |
|---|---|
| PRs with CC | Claude Code で書いたコードを 1 行以上含む、マージ済みプルリクエストの総数 |
| Lines of code with CC | Claude Code の支援で書かれた、マージ済みの全 PR のコード行の合計。「有効な行」だけを数える:正規化後に 3 文字を超える行で、空行と、括弧や些細な句読点だけの行を除く |
| PRs with Claude Code (%) | マージ済みの全 PR のうち、Claude Code の支援を受けたコードを含む PR の割合 |
| Suggestion accept rate | ユーザーが Claude Code のコード編集の提案を受け入れた割合。Edit・Write・NotebookEdit ツールの使用を含む |
| Lines of code accepted | ユーザーがセッションで受け入れた、Claude Code が書いたコードの行数の合計。拒否した提案を除き、その後の削除は追跡しない |
グラフ#
| グラフ | 内容 |
|---|---|
| Adoption | 日次の利用傾向:users(日次のアクティブユーザー)と sessions(1 日のアクティブな Claude Code のセッション数) |
| PRs per user | 開発者個人の活動の推移:PRs per user(1 日のマージ済み PR の総数を日次のアクティブユーザーで割った値)と users。Claude Code の導入が進むにつれ、個人の生産性がどう変わるかを見る |
| Pull requests | マージ済み PR の日次の内訳:PRs with CC(Claude Code の支援を受けたコードを含む PR)と PRs without CC。「Lines of code」表示に切り替えると、PR 数ではなく行数で同じ内訳が見られる |
| Leaderboard | 貢献量の上位 10 人。「Pull requests」(ユーザーごとの Claude Code の PR と全 PR)と「Lines of code」(ユーザーごとの Claude Code の行と全行)を切り替える。「Export all users」で、上位 10 人だけでなく全ユーザーの貢献データを CSV でダウンロードできる |
PR の帰属#
貢献指標を有効にすると、Claude Code はマージ済みのプルリクエストを分析し、Claude Code の支援で書かれたコードを判定します。Claude Code のセッション活動を、各 PR のコードと照合する方法です。
PR がマージされたときの流れです。
- PR の diff から追加された行を取り出す
- 時間枠の中で、一致するファイルを編集した Claude Code のセッションを特定する
- 複数の方式で、PR の行を Claude Code の出力と照合する
- AI の支援を受けた行と全体の行について指標を計算する
比較の前に、行は正規化されます(空白を削る・連続する空白をまとめる・引用符を統一する・小文字に変換する)。Claude Code の支援を受けた行を含むマージ済みの PR には、GitHub で claude-code-assisted のラベルが付きます。
- 時間枠:PR のマージ日の 21 日前から 2 日後までのセッションを、帰属の照合の対象にする
- 除外されるファイル:自動生成されるため、次のファイルは分析から自動で除外される
- ロックファイル:package-lock.json・yarn.lock・Cargo.lock など
- 生成コード:Protobuf の出力・ビルド成果物・最小化したファイル
- ビルドのディレクトリ:dist/・build/・node_modules/・target/
- テストのフィクスチャ:スナップショット・カセット・モックデータ
- 1,000 文字を超える行(最小化か生成されたものとみられる)
- 帰属の注意点:
- 開発者が大幅に書き直したコード(20% を超える差)は、Claude Code に帰属されない
- 21 日の枠の外のセッションは考慮されない
- アルゴリズムは、帰属を行うときに PR のソースブランチもマージ先ブランチも考慮しない
分析を活かす#
貢献指標は、ROI の説明・導入パターンの把握・始めたい人を手伝える人の発見に使えます。
- 導入を監視する:Adoption のグラフとユーザー数で、他の人にベストプラクティスを共有できるアクティブユーザー、組織全体の導入の傾向、摩擦や問題を示しうる利用の落ち込みを見つける
- ROI を測る:「このツールは投資に見合うか」に、自分のコードベースのデータで答える。導入が進むにつれた PR per user の変化を追う。Claude Code ありとなしで出した PR とコード行数を比べる。DORA 指標・スプリントのベロシティなどのエンジニアリング KPI と併用して、Claude Code の導入による変化を理解する
- パワーユーザーを見つける:リーダーボードで、Claude Code の導入が進んでいて、プロンプトの工夫とワークフローをチームに共有し、うまくいっている点のフィードバックをくれ、新しいユーザーの立ち上げを助けてくれる人を探す
- データをプログラムから取る:Enterprise プランでは、Claude Enterprise Analytics API が、Claude Code を含む各サーフェスの組織のユーザー別のエンゲージメント・使用量・コストのレポートを返す。キーは Primary Owner が
claude.ai/analytics/api-keysでread:analyticsスコープ付きで作る。この API は Teams プランでは使えない。貢献データを GitHub 側で調べたいなら、claude-code-assistedラベルが付いた PR を検索する
API 利用者(Claude Console)の分析#
Claude Console の API 利用者は、platform.claude.com の claude-code で分析を見られます。ダッシュボードには UsageView の権限が必要で、Developer・Billing・Admin・Owner・Primary Owner のロールに付与されています。同じ日次のユーザー別の指標をプログラムから取るには、Admin API キーで Claude Code Analytics API を使います。
補足
GitHub 連携の貢献指標は、現時点では API 利用者には使えません。Console のダッシュボードには、使用量と支出の指標だけが出ます。
Console のダッシュボードに出るもの:
- Lines of code accepted:ユーザーがセッションで受け入れた、Claude Code が書いたコードの行数の合計。拒否した提案を除き、その後の削除は追跡しない
- Suggestion accept rate:コード編集ツール(Edit・Write・NotebookEdit)の使用をユーザーが受け入れた割合
- Activity:日次のアクティブユーザーとセッションのグラフ
- Spend:日次の API コスト(ドル)とユーザー数
チームの洞察の表は、ユーザー別の指標を出します。
| 列 | 説明 |
|---|---|
| Members | Claude Code に認証した全ユーザー。API キーのユーザーはキーの識別子、OAuth のユーザーはメールアドレスで表示される |
| Spend this month | ユーザーごとの、今月の API コストの合計 |
| Lines this month | ユーザーごとの、今月の受け入れたコード行の合計 |
補足
Console のダッシュボードの支出の数値は、分析用の推定値です。実際のコストは請求のページで確認します。権限の設定は権限ルールを参照してください。
公式ドキュメント(英語)
2026年10月5日時点の内容をもとに、日本語でまとめています。