本文へ移動
Claude Tips

利用状況の計測

OpenTelemetry で Claude Code の使用量・コスト・ツール活動を書き出す設定と、環境変数・スパン・メトリクス・イベントの全一覧、チーム分析ダッシュボードの見方です。

Claude Code は、メトリクスを時系列データとして、イベントをログ/イベントのプロトコルで、さらに分散トレースを(ベータで)OpenTelemetry(OTel)経由で出力できます。組織全体の使用量・コスト・ツール活動を自前の可観測性基盤で追うための仕組みです。Team・Enterprise の管理画面にある分析ダッシュボードは、このページの最後で説明します。

  • 環境変数 CLAUDE_CODE_ENABLE_TELEMETRY=1 で有効にし、エクスポーターを選ぶ
  • 管理者は管理設定で全ユーザーの送り先を固定できる
  • メトリクス・イベント・トレース(ベータ)の 3 種類を出せる
  • プロンプトやツール内容は既定で伏せられ、環境変数で個別に出す
  • コストの扱いはコストを抑える、管理設定の配り方は組織への導入と管理設定を参照

クイックスタート#

環境変数で設定します。

bash
# 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 設定を配れます(配布方法は組織への導入と管理設定、優先順位は設定ファイルの仕組み)。

json
{
  "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 スパンの下に入れ子になります。

text
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 に、自分のスクリプトのパスで追加します。

json
{
  "otelHeadersHelper": "/path/to/generate-otel-headers.sh"
}

値は、実行可能ファイルのパス(空白を含んでもよい)か、引数付きのシェルのコマンドラインです。Windows では常にシェル経由で動くので、空白を含むパスは JSON の値の中で引用符で囲みます。

スクリプトの要件#

スクリプトは、HTTP ヘッダーを表す文字列の key-value を、有効な JSON として出力する必要があります。

bash
#!/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 でグループを区別するカスタム属性を足せます。

bash
# 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 を設定する例です。

bash
export OTEL_RESOURCE_ATTRIBUTES="org.name=Johns_Organization"
export OTEL_RESOURCE_ATTRIBUTES="org.name=JohnsOrganization"

除外された文字に限らず、どの文字もパーセントエンコードできます。空白とアポストロフィーをエンコードする例です。

bash
export OTEL_RESOURCE_ATTRIBUTES="org.name=John%27s%20Organization"

値を引用符で囲んでも空白はエスケープされません。org.name="My Company" は、引用符を含んだ文字どおりの値 "My Company" になります。

設定例#

claude を実行する前に環境変数を設定します。どの例も完全な設定で、各変数は共通の設定変数の表にあります。反映の確認は、セッション開始後にバックエンドで claude_code.session.count を見ます(ログだけの構成と、何も届かないときの確認はクイックスタートを参照)。

コンソールでデバッグする(エクスポート間隔 1 秒):

bash
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console
export OTEL_METRIC_EXPORT_INTERVAL=1000

OTLP を gRPC で送る:

bash
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 を取得する:

bash
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=prometheus

セルフホスト環境では、ランナーの既定の容量(1)のときだけ、セッションがポート 9464 を使います。容量がそれより大きいと、ランナーが自分の /metrics エンドポイントでセッションのカウンターとゲージを再公開します。

複数のエクスポーターに送る:

bash
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=console,otlp
export OTEL_EXPORTER_OTLP_PROTOCOL=http/json

メトリクスとログを別のエンドポイント・バックエンドへ送る:

bash
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

メトリクスだけを送る(イベント・ログなし):

bash
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

イベントとログだけを送る(メトリクスなし):

bash
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 ルールを持つ管理設定の出力例です。

json
{"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_tokens
  • claude_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 のセッションには不要です
bash
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 の監査のためにツールの詳細を有効にして、イベントだけを出力します。

json
{
  "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 プロセッサは、これを列挙したパイプラインで両方の属性を削除します。

      yaml
      processors:
        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 を有効にした組織では、貢献指標は使えません。分析ダッシュボードには使用量の指標だけが出ます(セキュリティとデータの扱い)。

  1. GitHub の管理者が、組織の GitHub アカウントに Claude の GitHub アプリ(github.com/apps/claude)をインストールする
  2. Claude のオーナーが、claude.ai/admin-settings/claude-code で Claude Code の分析機能を有効にする
  3. 同じページで「GitHub analytics」のトグルを有効にする
  4. 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 がマージされたときの流れです。

  1. PR の diff から追加された行を取り出す
  2. 時間枠の中で、一致するファイルを編集した Claude Code のセッションを特定する
  3. 複数の方式で、PR の行を Claude Code の出力と照合する
  4. 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日時点の内容をもとに、日本語でまとめています。

ページの一覧