監視
Claude Code の OpenTelemetry を有効にして設定する方法を学びます。
OpenTelemetry (OTel) を通じてテレメトリデータをエクスポートすることで、組織全体で Claude Code の使用状況、コスト、ツールアクティビティを追跡します。Claude Code はメトリクスを標準メトリクスプロトコル経由で時系列データとしてエクスポートし、イベントをログ/イベントプロトコル経由でエクスポートし、オプションで トレースプロトコル経由で分散トレースをエクスポートします。
クイックスタート
環境変数を使用して OpenTelemetry を設定します:
# 1. テレメトリを有効にする
export CLAUDE_CODE_ENABLE_TELEMETRY=1
# 2. エクスポーターを選択する (両方はオプション - 必要なものだけを設定してください)
export OTEL_METRICS_EXPORTER=otlp # オプション: otlp、prometheus、console、none
export OTEL_LOGS_EXPORTER=otlp # オプション: otlp、console、none
# 3. OTLP エンドポイントを設定する (OTLP エクスポーター用)
export OTEL_EXPORTER_OTLP_PROTOCOL=grpc
export OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
# 4. 認証を設定する (必要な場合)
export OTEL_EXPORTER_OTLP_HEADERS="Authorization=Bearer your-token"
# 5. デバッグ用: エクスポート間隔を短縮し、本番環境での使用に向けてリセットしてください
export OTEL_METRIC_EXPORT_INTERVAL=10000 # 10 秒 (デフォルト: 60000ms)
export OTEL_LOGS_EXPORT_INTERVAL=5000 # 5 秒 (デフォルト: 5000ms)
# 6. Claude Code を実行する
claude
メトリクスをエクスポートするセットアップを検証するには、バックエンドで claude_code.session.count メトリクスを確認してください。Claude Code はセッション開始時にこのメトリクスを出力します。ログのみのセットアップを検証するには、プロンプトを送信して claude_code.user_prompt イベントを確認してください。
何も到着しない場合は、claude --debug-file <path> を使用して Claude Code を起動し、そのパスに書き込まれるログを確認してください。Claude Code は、設定したエクスポーターからの失敗を [3P telemetry] エラーとして報告します。ここで 3P はサードパーティを意味します。[Anthropic telemetry] で始まる行は、Anthropic の個別の運用テレメトリについて説明しており、セットアップの問題を示していません。
完全な設定オプションについては、OpenTelemetry 仕様を参照してください。
管理者設定
管理者は、管理設定ファイルを通じてすべてのユーザーの 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"
}
}
Claude Desktop アプリでは、Code タブセッションは各種 Desktop セッションに到達するソースからこれらの管理設定を読み込みます。管理コンソールのデータとプライバシー設定の監視下にある Cowork の OpenTelemetry フォームは Cowork セッションのみに適用されるため、ターミナル CLI も Code タブも、そこで設定したコレクターにはエクスポートしません。
Claude Code は、リポジトリの .claude/settings.json と .claude/settings.local.json の OpenTelemetry エクスポーター変数を無視するため、リポジトリはそれらを使用してテレメトリをオンにしたり、送信先を選択したり、コンテンツをキャプチャしたりすることはできません。管理設定で設定するか、各開発者がシェルまたは ~/.claude/settings.json で設定してください。リポジトリは、OTEL_LOGS_EXPORTER などのエクスポーターセレクターを none に設定することでシグナルをオフにすることはできますが、管理設定、--settings ファイル、または Claude Code を起動する環境がその変数を設定している場合を除きます。
Claude Code は、Bash ツール、フック、MCP サーバー、言語サーバーを含む、生成するサブプロセスに OTEL_* 環境変数を渡しません。OpenTelemetry でインストルメント化されたアプリケーションを Bash ツール経由で実行する場合、Claude Code のエクスポーターエンドポイントまたはヘッダーを継承しないため、そのアプリケーションが独自のテレメトリをエクスポートする必要がある場合は、コマンド内でこれらの変数を直接設定してください。
管理設定が OTLP 宛先をロックする方法
管理設定で OTEL_EXPORTER_OTLP_* 変数を設定すると、Claude Code は起動時に競合する開発者設定の変数を削除し、デバッグログに警告をログに記録します。削除される内容は、設定する変数によって異なります:
-
エンドポイント:
OTEL_EXPORTER_OTLP_ENDPOINTを設定すると、Claude Code はすべての開発者設定のシグナル別エンドポイントを削除します。開発者は 1 つのシグナルを別のコレクターにポイントできないため、管理設定でシグナル別エンドポイント変数も設定する必要はありません。 -
プロトコル:
OTEL_EXPORTER_OTLP_PROTOCOLを設定すると、Claude Code はすべての開発者設定のシグナル別プロトコルを削除します。 -
認証情報:
OTEL_EXPORTER_OTLP_HEADERS、OTEL_EXPORTER_OTLP_CLIENT_KEY、またはOTEL_EXPORTER_OTLP_CLIENT_CERTIFICATEを設定すると、Claude Code はその変数の開発者設定のシグナル別バージョンと、すべての開発者設定のエンドポイント変数(汎用またはシグナル別)を削除します。これらの認証情報が管理設定で選択されていないコレクターに到達するのを防ぐためです。 -
エクスポーターセレクター:
OTEL_METRICS_EXPORTER、OTEL_LOGS_EXPORTER、およびベータ版のOTEL_TRACES_EXPORTERは通常のキーごとの優先順位に従います。開発者の設定はシグナルを無効にするか、コンソールエクスポーターに切り替えることができるため、ロックが必要な場合は管理設定でセレクターも設定してください。管理ソース全体で、OTEL_LOGS_EXPORTERはテレメトリユニットに従い、他の 2 つのセレクターはキーごとにマージされます。Claude Code v2.1.223 以降が必要です。 -
ベータ版トレーシングエンドポイント:詳細ベータ版トレーシングがアクティブな場合、Claude Code はログとトレースをログおよびトレースエクスポーターを通じてではなく
BETA_TRACING_ENDPOINTにエクスポートします。したがって、Claude Code は以下の管理設定のいずれかがシグナルの宛先を決定するたびに、開発者設定のBETA_TRACING_ENDPOINTを削除します:- 汎用またはログ/トレースエンドポイントまたは認証情報
otelHeadersHelpernone、console、または空に設定されたログまたはトレースエクスポーターセレクター。これらの値はシグナルをコレクターから外しますCLAUDE_CODE_ENABLE_TELEMETRYがオフ
メトリクスのみのエンドポイントまたは認証情報は削除しません。v2.1.251 より前では、開発者設定の
BETA_TRACING_ENDPOINTは、管理設定がコレクターをピン留めしている場合でも、詳細ベータ版トレーシングがエクスポートするログとトレースをリダイレクトしていました。
Claude Code は管理設定自体で設定したシグナル別変数を削除しないため、その変数をそこに設定することで 1 つのシグナルを別のコレクターにルーティングできます。SIEM の例がこれを行っています。そこでシグナル別認証情報を設定する場合、Claude Code はそのシグナルの開発者設定エンドポイントを削除します。
この削除動作は、テレメトリが配信される場所を変更するもので、Claude Code が収集する内容ではありません。
v2.1.217 より前では、すべての変数は独立してキーごとの設定優先順位に従っていたため、ユーザー設定またはシェルで設定されたシグナル固有のエンドポイントがそのシグナルを管理コレクターから離れた場所にリダイレクトしていました。
デスクトップアプリまたはセルフホスト環境ランナーが Claude Code を起動し、提供する環境で OTLP エンドポイントを指定する場合、Claude Code は同じ方法で宛先をピン留めします。ランナーのテレメトリ変数は、管理設定と同じように開発者設定の変数を削除します。Claude Code はランナー自体が設定した変数を削除しません。Claude Code v2.1.251 以降が必要です。
設定の詳細
一般的な設定変数
これらの変数は、すべてのデプロイメント向けにエクスポーター、エンドポイント、およびエクスポート動作を設定します。
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT などのシグナルごとのエンドポイントまたはプロトコル変数を設定した場合、Claude Code はそのシグナルに対して汎用変数の代わりにそれを使用します。OTEL_EXPORTER_OTLP_METRICS_HEADERS などのシグナルごとのヘッダー変数を設定した場合、Claude Code はそれを汎用の OTEL_EXPORTER_OTLP_HEADERS とそのシグナル用にマージします。
管理設定を持つマシンでは、管理設定が OTLP 宛先をロックする方法を参照して、Claude Code が削除するものを確認してください。
| 環境変数 | 説明 | 例の値 |
|---|---|---|
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 エクスポーター用のプロトコル。すべてのシグナルに適用されます。Claude Code にはデフォルトプロトコルがないため、有効にする各 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 |
OTLP メトリクスエンドポイント。汎用設定をオーバーライド | http://localhost:4318/v1/metrics |
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL |
ログ用のプロトコル。汎用設定をオーバーライド | grpc、http/json、http/protobuf |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT |
OTLP ログエンドポイント。汎用設定をオーバーライド | 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 の値にフォールバックします。Claude Code v2.1.193 以降が必要 |
1 で有効、0 でマスク状態を保持 |
OTEL_LOG_TOOL_DETAILS |
ツールイベントおよびトレーススパン属性でのツールパラメーターおよび入力引数のログを有効にします:Bash コマンド、MCP サーバーおよびツール名、スキル名、ユーザー作成ワークフロー名、およびツール入力。また、user_prompt イベント上でカスタム、プラグイン、および MCP コマンド名を有効にし、コストおよびトークンカウンター上で実際のエージェント、スキル、プラグイン、および MCP サーバーおよびツール名を有効にします(デフォルト:無効)。Claude Desktop が所有するセッション内の Claude Desktop の組み込みサーバーの場合、フラグがオフでも mcp_server_name/mcp_tool_name は tool_decision/tool_result で出力されます。例外には Claude Code v2.1.214 以降が必要 |
1 で有効 |
OTEL_LOG_TOOL_CONTENT |
tool.output スパンイベントでのツールコンテンツのログを有効にします(デフォルト:無効)。スパン属性は独自のゲートの下でツールコンテンツを保持します。トレースが必要です。コンテンツはコンテンツ制限(デフォルト 60 KB)で切り詰められます |
1 で有効 |
OTEL_LOG_MANAGED_SETTINGS |
マスク済み管理設定と、マスク前の設定の SHA-256 ダイジェストを管理設定解決イベントに追加します(デフォルト:無効)。プロジェクトまたはローカル設定の値はそれをオンにしません。Claude Code 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 でコンテンツ制限(デフォルト 60 KB)で切り詰められたインラインボディ、または 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 またはそのログレコードおよびスパン変数がより低い値に設定されている場合、Claude Code はその小さい値で切り詰めるため、[TRUNCATED ...] マーカーは SDK 制限内に留まります。Claude Code v2.1.214 以降が必要 |
262144 |
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE |
メトリクス時間性の設定(デフォルト:delta)。バックエンドが累積時間性を期待する場合は cumulative に設定 |
delta、cumulative |
CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS |
動的ヘッダーをリフレッシュする間隔(デフォルト:1740000ms / 29 分) | 900000 |
http/protobuf および http/json プロトコルの場合、Claude Code は各エクスポートリクエストを Content-Length ヘッダーで送信します。v2.1.212 より前では、v2.1.191 以降の Claude Code バージョンはこれらのリクエストをチャンク転送エンコーディングで送信していました。Azure Monitor およびその他の宣言された長さを必要とするエンドポイントは、411 Length Required または 400 エラーでそれらを拒否しました。
mTLS 認証
OTLP エクスポーター用のクライアント証明書を設定する方法は、そのシグナル用に使用されている OTLP プロトコルに依存し、OTEL_EXPORTER_OTLP_PROTOCOL またはシグナル固有のオーバーライドで設定されます。同じ設定がメトリクス、ログ、およびトレースに適用されます。
| プロトコル | クライアント証明書変数 | コレクターの CA を信頼する方法 |
|---|---|---|
http/protobuf、http/json |
CLAUDE_CODE_CLIENT_CERT、CLAUDE_CODE_CLIENT_KEY、およびオプションで CLAUDE_CODE_CLIENT_KEY_PASSPHRASE。ネットワーク設定を参照 |
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 変数を直接読み取るため、シグナルごとのメトリクス変数を設定する既存の設定は引き続き機能します。管理設定を持つマシンでは、Claude Code は起動時に開発者が設定したシグナルごとの認証情報とエンドポイントを削除する可能性があります。
メトリクスカーディナリティ制御
次の環境変数は、カーディナリティを管理するためにメトリクスに含まれる属性を制御します:
| 環境変数 | 説明 | デフォルト値 | 無効にする例 |
|---|---|---|---|
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.* リポジトリ識別属性を含める。Claude Code v2.1.269 以降が必要 |
false |
true |
カーディナリティが低いほど、一般的にパフォーマンスが向上し、ストレージコストが低下しますが、分析用のデータの粒度が低くなります。
トレース(ベータ)
分散トレースは、各ユーザープロンプトをそれがトリガーする API リクエストおよびツール実行にリンクするスパンをエクスポートするため、トレーシングバックエンドで完全なリクエストを単一のトレースとして表示できます。
トレースはデフォルトでオフです。有効にするには、CLAUDE_CODE_ENABLE_TELEMETRY=1 と CLAUDE_CODE_ENHANCED_TELEMETRY_BETA=1 の両方を設定してから、OTEL_TRACES_EXPORTER を設定してスパンの送信先を選択します。トレースは、エンドポイント、プロトコル、ヘッダー、およびmTLS用の一般的な OTLP 設定を再利用します。管理設定を持つマシンでは、Claude Code は起動時に開発者が設定したシグナルごとの認証情報とエンドポイントを削除する可能性があります。
| 環境変数 | 説明 | 例の値 |
|---|---|---|
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 |
OTLP トレースエンドポイント。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 環境変数を自動的に継承します。これにより、TRACEPARENT を読み取るサブプロセスは、同じトレースの下で独自のスパンを親にすることができ、Claude が実行するスクリプトおよびコマンドを通じたエンドツーエンドの分散トレースが可能になります。
トレースがアクティブで Claude Code が Anthropic API に直接接続されている場合、各モデルリクエストは、claude_code.llm_request スパンのコンテキストに設定された W3C traceparent ヘッダーを含み、API の traceresponse ヘッダーはスパンリンクとして記録されます。これらは、Claude Code のクライアント側スパンをサーバー側トレースに接続し、準拠した仲介者を通じます。アウトバウンド HTTP MCP リクエストは同じ方法で traceparent を含みます。ヘッダーはサードパーティプロバイダーに送信されません。
デフォルトでは、モデルおよび HTTP MCP リクエスト上の traceparent ヘッダーは、ANTHROPIC_BASE_URL が設定されていないか Anthropic API を指している場合にのみ送信されます。一部のプロキシは認識されないヘッダーを拒否するためです。サブプロセス TRACEPARENT 変数は一貫性のために同じスイッチで制御されます。カスタム ANTHROPIC_BASE_URL プロキシを通じて Claude Code を実行し、トレースコンテキストを伝播させたい場合は、CLAUDE_CODE_PROPAGATE_TRACEPARENT=1 を設定します。
Agent SDK および -p で開始された非対話型セッションでは、Claude Code は各インタラクションスパンを開始するときに独自の環境から TRACEPARENT および TRACESTATE も読み取ります。これにより、埋め込みプロセスはアクティブな W3C トレースコンテキストをサブプロセスに渡すことができ、Claude Code のスパンは呼び出し元の分散トレースの子として表示されます。対話型セッションは、CI またはコンテナ環境からの環境値を誤って継承することを避けるため、インバウンド TRACEPARENT を無視します。
インバウンドトレースコンテキストはイベントにも適用されます。TRACEPARENT が設定された Agent SDK および -p セッションでは、各 OTLP イベントログレコードは trace_id および span_id 値を含み、トレースエクスポーターが設定されていない場合でも、ログバックエンドがイベントをトレースの残りの部分と相関させることができるため、アプリケーションのトレースに参加します。
アクティブなインタラクション中に出力されたレコードは、インタラクションスパンの非同期コンテキスト外で出力される場合(許可プロンプトコールバックなど)でも、またはスタートアップ中にバッファリングされ後で出力されるレコードの場合でも、インタラクションスパンの ID を含みます。アクティブなインタラクションスパンなしで出力されたレコードは、インバウンド TRACEPARENT ID を直接含みます。v2.1.214 より前では、スパンの非同期コンテキスト外で出力されたレコードはインバウンド TRACEPARENT ID の代わりにスパンの ID を含みました。v2.1.212 より前では、アクティブなスパン外で出力されたイベントレコードは trace_id または span_id を含みませんでした。
スパン階層
各ユーザープロンプトは claude_code.interaction ルートスパンを開始します。API 呼び出し、ツール呼び出し、およびフック実行はその子として記録されます。ツールスパンは 2 つの子スパンを持ちます:1 つは許可決定を待つ時間用で、もう 1 つは実行自体用です。Agent ツール、またはレガシー Task ツールがサブエージェントを生成する場合、サブエージェントの API およびツールスパンは親の claude_code.tool スパンの下にネストされます。
claude_code.interaction
├── claude_code.llm_request
├── claude_code.hook (詳細なベータトレースが必要)
└── claude_code.tool
├── claude_code.tool.blocked_on_user
├── claude_code.tool.execution
└── (Agent ツール) サブエージェント claude_code.llm_request / claude_code.tool スパン
Agent SDK および claude -p セッションでは、環境に TRACEPARENT が設定されている場合、claude_code.interaction 自体が呼び出し元のスパンの子になります。
PreToolUse フックがツール呼び出しを延期する場合、Claude Code はそれを延期したターンのトレースコンテキストを保存します。セッションを再開してツールが再実行される場合、ツールのスパンはそれより前のターンのトレースに参加し、ターンの claude_code.interaction スパンの子になります。
スパン属性
すべてのスパンは標準属性と、その名前に一致する span.type 属性を含みます。以下の表は、各スパンに設定される追加属性をリストします。llm_request、tool.execution、および hook スパンは失敗を記録するときに OpenTelemetry ステータス 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。Claude Code v2.1.268 以降が必要 |
|
interaction.duration_ms |
ターンの壁時計期間 |
claude_code.llm_request
| 属性 | 説明 | ゲート対象 |
|---|---|---|
model |
モデル識別子 | |
gen_ai.system |
常に anthropic。OpenTelemetry GenAI セマンティック規約 |
|
gen_ai.request.model |
model と同じ値。OpenTelemetry GenAI セマンティック規約 |
|
query_source |
リクエストを発行したサブシステム(repl_main_thread またはサブエージェント名など) |
ENABLE_BETA_TRACING_DETAILED |
query_source_safe |
query_source の制限された形式。詳細なベータトレースがアクティブかどうかに関わらず出力され、repl_main_thread または agent.builtin.general-purpose などの値を持ちます。: は . になり、ユーザー名のエージェントは agent.custom として表示されます。Claude Code v2.1.268 以降が必要 |
|
agent_id |
リクエストを発行したサブエージェントまたはチームメイトの識別子。メインセッションでは不在 | |
parent_agent_id |
このエージェントを生成したエージェントの識別子。メインセッションおよび直接生成されたエージェントでは不在 | |
workflow.run_id |
このエージェントを生成したワークフローツール実行の実行識別子。wf_ で始まります。ワークフローで生成されていないエージェントでは不在 |
|
workflow.name |
このエージェントを生成したワークフローの名前。ユーザー作成の名前は、ゲートが設定されていない限り custom に置き換えられます |
OTEL_LOG_TOOL_DETAILS |
speed |
fast または normal |
|
effort |
リクエストに適用される努力レベル:low、medium、high、xhigh、または max。Claude Code が努力レベルを送信しない場合(例えば、努力をサポートしないモデル)は不在。Claude Code v2.1.274 以降が必要 |
|
llm_request.context |
親スパンに応じて interaction、tool、または standalone |
|
duration_ms |
再試行を含む壁時計期間 | |
ttft_ms |
最初のトークンまでの時間(ミリ秒単位) | |
first_content_ms |
リクエスト開始から成功した試行の最初のコンテンツブロックまでの時間(ミリ秒単位)。ストリーミングパスにフォールバックしたリクエストでは不在。Claude Code v2.1.268 以降が必要 | |
input_tokens |
API 使用ブロックからの入力トークン数。プロンプトキャッシュから読み取られた、またはプロンプトキャッシュに書き込まれたトークンは含まれず、それらは 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 と同じ値。OpenTelemetry GenAI セマンティック規約 |
|
client_request_id |
最終試行のクライアント生成 x-client-request-id |
|
attempt |
このリクエストに対して行われた試行の総数 | |
success |
true または false |
|
status_code |
リクエストが失敗した場合の HTTP ステータスコード | |
error |
リクエストが失敗した場合のエラーメッセージ | |
error_class |
リクエストが失敗した場合の短いエラークラストークン(api_timeout または server_overload など)。Claude Code v2.1.268 以降が必要 |
|
response.has_tool_call |
レスポンスにツール使用ブロックが含まれている場合は true |
|
stop_reason |
API レスポンス stop_reason(end_turn、tool_use、max_tokens、stop_sequence、pause_turn、または refusal など) |
|
gen_ai.response.finish_reasons |
stop_reason と同じ値。文字列配列でラップされています。OpenTelemetry GenAI セマンティック規約 |
各再試行試行は、attempt および client_request_id 属性を持つ gen_ai.request.attempt スパンイベントとしても記録されます。
claude_code.tool
| 属性 | 説明 | ゲート対象 |
|---|---|---|
tool_name |
ツール名 | |
tool_name_safe |
ユーザー選択の名前を含まない tool_name の形式。組み込みツール名はそのまま渡されます。MCP ツール名は mcp_other として表示されます。ただし、playwright ツール(browser_* という名前)など、固定の形状に一致するツール名は例外です。Claude Code v2.1.268 以降が必要 |
|
bash_command_class |
Bash ツール用:固定リストからのコマンドの最初のプログラムのカテゴリ(vcs または package_manager など)。リスト外のプログラムの場合は other、行を解析できない場合は unparsed。Claude Code v2.1.268 以降が必要 |
|
bash_argv0 |
Bash ツール用:同じ固定リスト上にあるコマンドの最初のプログラム(git または npm など)。リスト外のプログラムの場合は other。Claude Code v2.1.268 以降が必要 |
|
duration_ms |
許可待機と実行を含む壁時計期間 | |
result_tokens |
ツール結果のおおよそのトークンサイズ | |
agent_id |
ツールを実行したサブエージェントまたはチームメイトの識別子。メインセッションでは不在 | |
parent_agent_id |
このエージェントを生成したエージェントの識別子。メインセッションおよび直接生成されたエージェントでは不在 | |
workflow.run_id |
このエージェントを生成したワークフロータイプ実行の実行識別子。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 と同じ値。OpenTelemetry 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 も設定した場合にのみ 1 つを記録します。その変数はそれら 2 つのツールにスコープされていないため、設定テーブルのその行で追加される引数を確認してください。
MCP ツール、WebFetch、および WebSearch も Claude Code v2.1.283 以降でこのイベントを記録します。
Claude Code はツール呼び出しの成功した戻りからこのイベントを書き込むため、エラーを発生させる呼び出しは何も記録しません。戻りを行う呼び出しの中で、以下の場合は tool.output イベントを記録しません:
- Read、Edit、Write、Bash、WebFetch、WebSearch、および MCP ツール以外のツールへの呼び出し
- ファイルテキスト以外を返す Read(画像、PDF、または内容が変更されていないファイルの再読み込みなど)
OTEL_LOG_TOOL_DETAILS=1も設定していない限り、Edit または Write 呼び出し- Claude Code がターンを中断してキューに入れたメッセージをすぐに送信している間に実行していた WebFetch または WebSearch 呼び出し。Claude はその結果をツールスパンが終了した後に受け取ります
イベントはこれらの属性を含み、各属性はコンテンツ制限(デフォルト 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 属性は、イベントがどのツールから来たかを示します。コンテンツ制限で切り詰められた属性には、<attribute>_truncated および <attribute>_original_length が付属しています。
claude_code.tool.blocked_on_user
| 属性 | 説明 | ゲート対象 |
|---|---|---|
duration_ms |
許可決定を待つのに費やされた時間 | |
decision |
accept または reject |
|
source |
ツール決定イベントと一致する決定ソース |
claude_code.tool.execution
| 属性 | 説明 | ゲート対象 |
|---|---|---|
duration_ms |
ツール本体を実行するのに費やされた時間 | |
tool_use_id |
親 claude_code.tool スパン上と同じ値 |
|
gen_ai.tool.call.id |
tool_use_id と同じ値。OpenTelemetry GenAI セマンティック規約 |
|
success |
true または false |
|
error |
実行が失敗した場合のエラーカテゴリ文字列(Error:ENOENT または ShellError など)。ゲートが設定されている場合は完全なエラーメッセージを含みます |
OTEL_LOG_TOOL_DETAILS |
error_class |
識別子形式のエラーカテゴリ。文字、数字、アンダースコア以外の文字は _ に置き換えられます(Error_ENOENT または ShellError など)。error が完全なメッセージを含む場合でもカテゴリを含みます。Claude Code 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_prompt_preview、user_system_prompt、tool_input、および response.model_output などの追加のコンテンツを含む属性は、詳細なベータトレースがアクティブな場合にのみ出力されます。これらは安定したスパンスキーマの一部ではありません。
new_context 上のゲートは、それを含むスパンに依存し、各コピーはコンテンツ制限(デフォルト 60 KB)で切り詰められます。claude_code.tool スパン上では、ツールに関わらずそのツール呼び出しの結果を含み、OTEL_LOG_TOOL_CONTENT=1 が必要です。claude_code.interaction スパン上ではユーザープロンプトを含み、claude_code.llm_request スパン上ではそのリクエストの新しいユーザーメッセージとツール結果を含みます。どちらも OTEL_LOG_USER_PROMPTS=1 が必要です。
user_system_prompt はさらに OTEL_LOG_USER_PROMPTS=1 が必要です。systemPrompt SDK オプションまたは --system-prompt および --append-system-prompt フラグを通じて提供するシステムプロンプトテキストのみを含み、コンテンツ制限(デフォルト 60 KB)で切り詰められ、リクエストごとではなくセッションごとに 1 回出力されます。
動的ヘッダー
動的認証を必要とするエンタープライズ環境の場合、ヘッダーを動的に生成するスクリプトを設定できます。動的ヘッダーは http/protobuf および http/json プロトコルにのみ適用されます。grpc プロトコルでは、Claude Code は静的ヘッダー変数 OTEL_EXPORTER_OTLP_HEADERS およびそのシグナル固有の変数のみを使用します。
設定の設定
.claude/settings.json に追加します。パスを独自のスクリプトに置き換えます:
{
"otelHeadersHelper": "/path/to/generate-otel-headers.sh"
}
値は、スペースを含むパスを含む実行可能ファイルへのパス、またはコマンドライン引数を含むシェルコマンドラインです。Windows では、値は常にシェルを通じて実行されるため、スペースを含むパスを JSON 値内で引用符で囲みます。
スクリプト要件
スクリプトは、HTTP ヘッダーを表す文字列キーと値のペアを持つ有効な JSON を出力する必要があります:
#!/bin/bash
# 例:複数のヘッダー
echo "{\"Authorization\": \"Bearer $(get-token.sh)\", \"X-API-Key\": \"$(get-api-key.sh)\"}"
ヘルパーが失敗するか、これらの要件を満たさない出力を出力する場合、エクスポートは失敗し、テレメトリバックエンドはヘルパーが再び機能するまでセッションから何も受け取りません。Claude Code は以下で失敗を報告します:
- 対話型セッションの警告通知。
otelHeadersHelper failed; telemetry is not being exported。ヘルパーが最初に失敗したときにセッションごとに 1 回表示されます /status出力--debugで実行するか、セッション内で/debugを実行した後のデバッグログ-pで開始された非対話型セッションの stderr
リフレッシュ動作
ヘッダーヘルパースクリプトはスタートアップ時に実行され、その後定期的に実行されてトークンリフレッシュをサポートします。デフォルトでは、スクリプトは 29 分ごとに実行されます。CLAUDE_CODE_OTEL_HEADERS_HELPER_DEBOUNCE_MS 環境変数で間隔をカスタマイズします。
マルチチーム組織サポート
複数のチームまたは部門を持つ組織は、OTEL_RESOURCE_ATTRIBUTES 環境変数を使用してカスタム属性を追加し、異なるグループを区別できます:
# チーム識別用のカスタム属性を追加
export OTEL_RESOURCE_ATTRIBUTES="department=engineering,team.id=platform,cost_center=eng-123"
これらのカスタム属性はすべてのメトリクスおよびイベントに含まれ、以下を可能にします:
- チームまたは部門別にメトリクスをフィルタリング
- コストセンターごとのコストを追跡
- チーム固有のダッシュボードを作成
- 特定のチーム向けのアラートを設定
Claude Code はこれらの値をすべてのメトリクスデータポイントおよびイベントレコード上の属性として、OTLP リソースブロックで送信することに加えて、属性として付加します。ほとんどのメトリクスバックエンドはデータポイント属性をクエリ可能なラベルとして公開するため、カスタムキーで直接メトリクスをグループ化およびフィルタリングできます。vcs.* リポジトリ属性を除き、カスタムキーは user.id または session.id などの標準属性をオーバーライドしません:キーが衝突する場合、Claude Code は組み込み値を保持します。
各カスタムキーはすべてのメトリクスシリーズ上のラベルになるため、高カーディナリティ値はメトリクスバックエンドのストレージコストを増加させます。カスタム属性をリソースブロックのみで送信し、データポイントラベルから省略するには、OTEL_METRICS_INCLUDE_RESOURCE_ATTRIBUTES=false を設定します。メトリクスカーディナリティ制御を参照してください。
OTEL_RESOURCE_ATTRIBUTES 環境変数は、厳密なフォーマット要件を持つカンマ区切りのキー=値ペアを使用します:
- スペースは許可されません:値にはスペースを含めることはできません。例えば、
user.organizationName=My Companyは無効です - 形式:カンマ区切りのキー=値ペアである必要があります:
key1=value1,key2=value2 - 許可される文字:制御文字、空白、二重引用符、カンマ、セミコロン、およびバックスラッシュを除く US-ASCII 文字のみ
- 特殊文字:許可された範囲外の文字は、パーセントエンコードされる必要があります
スペースが必要な値の場合は、アンダースコアまたは camelCase を代わりに使用します。次の例は、各形式で 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 ではなく、引用符を含む "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 over 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 からのテレメトリ
クラウドセッション(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 つだからです。コレクターが認証情報を必要とする場合は、代わりにサーバー管理設定を通じてエクスポート全体を設定してください。認証情報をそこに設定すると、Claude Code は管理設定外で設定されたエンドポイント変数を削除します。
クラウドセッションのテレメトリを設定する際は、これらの制約を念頭に置いてください。
- セッションがコレクターに到達できるようにする: Claude Code はセッションのネットワークを通じてエクスポートを送信するため、
OTEL_EXPORTER_OTLP_ENDPOINTのホストに到達できるかどうかは、環境の ネットワークアクセスレベル によって異なります。セッションが選択したレベルでコレクターのドメインに到達できない場合は、ドメインを環境のアローリストに追加してください。サーバー管理設定はドメインを環境のネットワークアローリストに追加しないためです。 - Claude Tag チャネルは組織レベルの環境を使用します: チャネルセッションはメンバーの個人環境ではなく組織レベルの環境で実行されるため、共有環境 でアローリストと環境変数の変更を行い、組織のデフォルトとして設定するか、チャネルにピン留めしてください。
- Cowork は個別に設定されます: サーフェスカバレッジテーブル に示されているように、Cowork セッションはサーバー管理設定を受け取らないため、サーバー管理
envブロックはそれらのテレメトリを設定しません。
クラウドセッションにテレメトリを属性付けする
デフォルトでは、クラウドセッションからのメトリクスとイベントは、session.id、ccr.session.id、organization.id を含む 標準属性 を含むため、追加の設定なしでセッションまたは組織でフィルタリングできます。ccr.session.id の値はセッションの CLAUDE_CODE_REMOTE_SESSION_ID です。これをセッションのトランスクリプト URL に変換するには、出力をセッションにリンク戻す を参照してください。
テレメトリをより詳細に属性付けするには、これらのオプションを使用します。
- Claude Tag セッションを識別する: メトリクスカーディナリティ制御 で説明されているように、
OTEL_METRICS_INCLUDE_ENTRYPOINT=trueを設定します。メトリクスはapp.entrypointを含むようになり、Claude Tag セッションの値はclaude-in-slackです。 - カスタム属性を追加する: これらのセッションの他の
OTEL_*変数を設定する場所と同じ場所にOTEL_RESOURCE_ATTRIBUTESを設定します。代わりに環境の セットアップスクリプト でそれをexportする場合、値は Claude Code に到達しません。セットアップスクリプトは Claude Code が起動する前に実行される別の Bash スクリプトであり、それがエクスポートする変数はそれで終わります。
Claude Tag チャネルセッションでは、Claude はメンバーではなく組織の 共有 ID として機能するため、user.* 属性に依存して Claude にタグを付けたユーザーを識別しないでください。
利用可能なメトリクスとイベント
標準属性
すべてのメトリクスとイベントは、以下の標準属性を共有します。
| 属性 | 説明 | 制御方法 |
|---|---|---|
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)。Claude Code v2.1.269 以降が必要 |
/login を通じて Claude apps gateway にサインインしたセッションでは、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:wf_をプレフィックスとする実行識別子。Workflow ツールの実行に属するエージェントが発行する API イベントとツールイベントに付与されます。1 つのworkflow.run_idでイベントをフィルタリングすると、その実行の API リクエストとツール結果を再構成できます。この識別子は、ワークフロースクリプトが起動するエージェントと、それらがさらに起動するエージェント(スキルの呼び出しなど)を対象とします。Workflow ツールの結果で報告される実行識別子と一致します。その他のすべてのイベントには含まれません。Claude Code v2.1.202 以降が必要ですworkflow.name: ワークフローの名前(スクリプトのmeta.name)。workflow.run_idと一緒に出力されます。組み込みワークフローの名前は、未変更の組み込みスクリプトが実行された場合にそのまま表示されます。ユーザーが作成した名前(組み込みスクリプトを編集したコピーを含む)は、OTEL_LOG_TOOL_DETAILS=1が設定されていない限りcustomに置き換えられます。Claude Code v2.1.202 以降が必要です
リポジトリ属性
OTEL_METRICS_INCLUDE_REPOSITORY=true を設定すると、メトリクスとイベントにセッションのリポジトリの識別情報がタグ付けされ、共有コレクターで使用量をリポジトリごとに集計できるようになります。Claude Code v2.1.269 以降が必要です。
Claude Code は、これらの属性をセッションごとに 1 回、リポジトリの origin リモートから導出します。GitHub、GitLab、Bitbucket Cloud のように、リポジトリの HTTPS リモートと SSH リモートが同じホストと同じパスを指している場合、どちらからも同一の値が生成されます。
| 属性 | 値 |
|---|---|
vcs.repository.url.full |
.git を除いたリポジトリのブラウザ URL。例: https://github.com/example-org/example-repo |
vcs.owner.name |
オーナーまたはグループのパス。例: example-org。リモートのパスが単一のセグメントの場合は省略されます |
vcs.repository.name |
リポジトリ名のみ。例: example-repo |
vcs.provider.name |
Claude Code がリモートのホストまたは 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 に SSH の URL にはないパスプレフィックスが含まれるセルフホスト環境など)、OTEL_RESOURCE_ATTRIBUTES で vcs.repository.url.full を、報告させたい他のすべての vcs.* キーとともに宣言してください。これにより、すべてのクローンが宣言した識別情報を報告するようになります。
これらの属性は独自のエクスポーターにのみ送信されます。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 テキスト形式となるよう、Claude Code はエクスポートするメトリクスから USD、tokens、s の単位を省略します。メトリクス名は変わりません。また、otlp,prometheus のようにエクスポーターを組み合わせた設定では単位が維持されます。v2.1.216 より前は、Prometheus のスクレイプ結果に 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 より前は、OTEL_LOG_TOOL_DETAILS=1 を設定していても、コストカウンターとトークンカウンター、および api_request、api_error、api_refusal イベントには秘匿化された値が含まれていました。
属性:
- すべての標準属性
model: モデル識別子(例: "claude-sonnet-5")query_source: リクエストを発行したサブシステムのカテゴリ。"main"、"subagent"、"auxiliary"のいずれかspeed: リクエストが fast mode を使用した場合は"fast"。それ以外の場合は含まれませんeffort: リクエストに適用された effort レベル。"low"、"medium"、"high"、"xhigh"、"max"のいずれか。Claude Code が effort レベルを送信しない場合(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 より前は、Claude Code はツール結果を消費したリクエストだけでなく、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"のいずれかです。各値の意味についてはツール決定イベントを参照してください。language: 編集されたファイルのプログラミング言語。"TypeScript"、"Python"、"JavaScript"、"Markdown"など。認識されないファイル拡張子の場合は"unknown"を返します。
アクティブ時間カウンター
アイドル時間を除き、Claude Code をアクティブに使用した実際の時間を記録します。このメトリクスは、ユーザーの操作中(入力や応答の閲覧など)と、CLI の処理中(ツールの実行や AI の応答生成など)にインクリメントされます。
属性:
- すべての標準属性
type: キーボード操作の場合は"user"、ツールの実行と AI の応答の場合は"cli"
イベント
Claude Code は、OpenTelemetry のログ/イベントを通じて以下のイベントをエクスポートします(OTEL_LOGS_EXPORTER が設定されている場合)。
イベント相関属性
ユーザーがプロンプトを送信すると、Claude Code は複数の API 呼び出しを行い、いくつかのツールを実行することがあります。prompt.id 属性を使用すると、それらのイベントすべてを、それらをトリガーした単一のプロンプトに結び付けることができます。
| 属性 | 説明 |
|---|---|
prompt.id |
単一のユーザープロンプトの処理中に生成されたすべてのイベントを関連付ける UUID v4 識別子 |
event.sequence |
イベントを順序付けるための 0 始まりのカウンター。セッションごとではなく Claude Code プロセスごとにカウントされます |
message.uuid |
セッションのトランスクリプト(~/.claude/projects/*/*.jsonl ファイル)に保存されたメッセージの UUID。assistant_response、api_response_body、および user_prompt に含まれます。ただし、0 個または複数のメッセージを生成する可能性があるコマンドのディスパッチは除きます。assistant_response と api_response_body では、これはレスポンスの最後のトランスクリプトエントリであり、次のターンの parentUuid がこれにチェーンされます。Claude Code v2.1.214 以降が必要です。api_response_body では v2.1.274 以降が必要です |
request_id |
サーバーが割り当てた API リクエストの ID。request-id レスポンスヘッダーから読み取られます(例: req_011...)。Amazon Bedrock のように request-id ヘッダーのないレスポンスでは、代わりに x-amzn-requestid ヘッダーから値を取得します。レスポンスにいずれかのヘッダーが含まれる場合、api_request、api_error、api_refusal、assistant_response、api_response_body に含まれます。llm_request トレーススパンの同名の属性と一致します。x-amzn-requestid からの取得には Claude Code v2.1.282 以降が必要です |
client_request_id |
x-client-request-id リクエストヘッダーとして送信される、クライアントが生成した UUID。ファーストパーティの API 接続では api_request と api_error に含まれます。サードパーティのプロバイダーのバックエンドや、非ストリーミングのフォールバックを通じてリクエストが再試行された場合には含まれません。リクエストとそのレスポンスを対応付けるもので、タイムアウトなどサーバーの request_id が生成されなかった失敗の場合にも利用できます。llm_request トレーススパンの同名の属性と一致します。Claude Code v2.1.214 以降が必要です |
単一のプロンプトによってトリガーされたすべてのアクティビティを追跡するには、特定の 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 の内部仕様であり、バージョン間で変更されるため、これらのフィールドで結合するパイプラインはどのリリースでも壊れる可能性があります。結合は安定した契約ではなく、バージョン固有のものとして扱ってください。
user_prompt、assistant_response、api_response_bodyのmessage.uuid- API イベントの
request_id。トランスクリプトのアシスタントエントリにはrequestIdとして保存されます tool_resultおよびtool_decisionイベントのtool_use_id
ユーザープロンプトイベント
ユーザーがプロンプトを送信したときにログに記録されます。
イベント名: claude_code.user_prompt
属性:
- すべての標準属性
event.name:"user_prompt"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますprompt_length: プロンプトの長さprompt: プロンプトの内容。デフォルトでは秘匿化されます。含めるにはOTEL_LOG_USER_PROMPTS=1を設定してくださいmessage.uuid: 結果として生成されたユーザーメッセージの UUID。保存されたトランスクリプトのエントリと一致します。0 個または複数のメッセージを生成する可能性があるコマンドのディスパッチには含まれません。Claude Code v2.1.214 以降が必要ですcommand_name: プロンプトがコマンドを呼び出す場合のコマンド名。compactやdebugなどの組み込みおよびバンドルのコマンド名はそのまま出力されます。resetなどのエイリアスは正規の名前ではなく入力されたとおりに出力されます。カスタム、プラグイン、MCP のコマンド名は、OTEL_LOG_TOOL_DETAILS=1が設定されていない限りcustomまたはmcpにまとめられますcommand_source: コマンドが存在する場合のコマンドの出どころ。builtin、custom、mcpのいずれかです。プラグインが提供するコマンドはcustomとして報告されます
アシスタント応答イベント
モデルからテキストコンテンツを返す各 API リクエストの後にログに記録されます。応答のテキストブロックのみが含まれ、思考ブロックとツール使用ブロックは除外されます。Claude Code v2.1.193 以降が必要です。
イベント名: claude_code.assistant_response
属性:
- すべての標準属性
event.name:"assistant_response"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明しています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がこれにチェーンされます。Claude Code v2.1.214 以降が必要ですquery_source: リクエストを発行したサブシステム。"repl_main_thread"、"compact"、またはサブエージェント名など
ツール結果イベント
ツールの実行が完了したときにログに記録されます。ツール呼び出しが拒否された場合は出力されません。拒否についてはツール決定イベントを参照してください。
イベント名: claude_code.tool_result
属性:
- すべての標準属性
event.name:"tool_result"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明しています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"。このイベントはツールの実行後にのみ出力されるためです。拒否された呼び出しはツール結果を生成しませんdecision_source: 権限決定の出どころ。"config"、"hook"、"user_permanent"、"user_temporary"のいずれかです。各値の意味についてはツール決定イベントを参照してください。拒否専用のソースである"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(OTEL_LOG_TOOL_DETAILS=1の場合): Bash または PowerShell ツールによって実行され成功したgit commitのコミットの識別情報。vcs.ref.head.revisionはコミット SHA、vcs.ref.head.nameはコミットされたブランチ、vcs.ref.head.typeはbranchです。detached HEAD 上でコミットされた場合、名前と種類は省略されます。Claude Code v2.1.269 以降が必要ですtool_parameters(OTEL_LOG_TOOL_DETAILS=1の場合): ツール固有のパラメーターを含む JSON 文字列。Claude Desktop の組み込みサーバーについては、Claude Desktop が所有するセッションでは、フラグがオフでもmcp_server_name/mcp_tool_nameのペアが含まれます。これはツール決定イベントと同じ、ホストが作成した名前に対する例外であり、Claude Code v2.1.214 以降が必要です。パラメーターはツールによって異なります。- Bash ツールの場合:
bash_command、full_command、timeout、description、dangerouslyDisableSandboxを含みます。さらにgit commitコマンドが成功した場合はgit_commit_idとgit_branchを含みます。git_commit_idは、コミットがセッションの作業ディレクトリの HEAD である場合は完全なコミット SHA、それ以外の場合は Git の短縮 SHA です。git_branchはコミットされたブランチで、detached HEAD の場合は省略されます - デスクトップアプリのワークスペース Bash ツール(
tool_nameもBashとして報告されます)の場合:bash_command、full_command、timeoutのみを含みます - MCP ツールの場合:
mcp_server_name、mcp_tool_nameを含みます - Skill ツールの場合:
skill_nameを含みます - Agent ツールまたは従来の Task ツールの場合:
subagent_typeを含みます
- Bash ツールの場合:
tool_input(OTEL_LOG_TOOL_DETAILS=1の場合): JSON シリアライズされたツールの引数。512 文字を超える個々の値は切り詰められ、ペイロード全体は約 4 K 文字に制限されます。MCP ツールを含むすべてのツールに適用されます。
API リクエストイベント
Claude への各 API リクエストについてログに記録されます。
イベント名: claude_code.api_request
属性:
- すべての標準属性
event.name:"api_request"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明しています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。含まれる条件についてはイベント相関属性の表を参照してください。Claude Code v2.1.214 以降が必要ですspeed:"fast"または"normal"。fast mode が有効だったかどうかを示しますquery_source: リクエストを発行したサブシステム。"repl_main_thread"、"compact"、またはサブエージェント名などeffort: リクエストに適用された effort レベル。"low"、"medium"、"high"、"xhigh"、"max"のいずれか。Claude Code が effort レベルを送信しない場合(effort をサポートしていないモデルなど)は含まれません。agent.name、skill.name、plugin.name、marketplace.name、mcp_server.name、mcp_tool.name: リクエストのスキル、プラグイン、エージェント、MCP の帰属情報。定義と秘匿化の挙動についてはコストカウンターを参照してください。
API エラーイベント
Claude への API リクエストが失敗したときにログに記録されます。
イベント名: claude_code.api_error
属性:
- すべての標準属性
event.name:"api_error"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明しています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が生成されなかった場合でも利用できます。含まれる条件についてはイベント相関属性の表を参照してください。Claude Code v2.1.214 以降が必要ですspeed:"fast"または"normal"。fast mode が有効だったかどうかを示しますquery_source: リクエストを発行したサブシステム。"repl_main_thread"、"compact"、またはサブエージェント名などeffort: リクエストに適用された effort レベル。Claude Code が effort レベルを送信しない場合(effort をサポートしていないモデルなど)は含まれません。agent.name、skill.name、plugin.name、marketplace.name、mcp_server.name、mcp_tool.name: リクエストのスキル、プラグイン、エージェント、MCP の帰属情報。定義と秘匿化の挙動についてはコストカウンターを参照してください。
API 拒否イベント
API リクエストが stop_reason: "refusal" を返したときにログに記録されます。拒否は HTTP エラーとしてではなく成功したレスポンスストリーム上で届くため、api_error イベントは発生しません。このイベントを使用すると、拒否の頻度を追跡し、api_request や api_error と同じ属性で拒否をグループ化できます。
イベント名: claude_code.api_refusal
属性:
- すべての標準属性
event.name:"api_refusal"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますmodel: リクエストのモデル識別子request_id: API リクエスト ID(例:"req_011...")。イベント相関属性で説明しています。query_source: リクエストを発行したサブシステム。"repl_main_thread"、"compact"、またはサブエージェント名など。定義についてはapi_requestを参照してください。speed: Fast mode が有効な場合は"fast"、それ以外は"normal"attempt: 再試行の試行番号。最初の試行は1です。effort: リクエストに適用された effort レベル。Claude Code が effort レベルを送信しない場合(effort をサポートしていないモデルなど)は含まれません。server_fallback_hop: API のサーバー側のモデルフォールバックがこの拒否をすでに別のモデルで再試行したため、ユーザーにはこの拒否が表示されなかった場合はtrue。リクエストが拒否で終了した場合はfalse。フォールバック先のモデルも拒否した場合、1 つのターンでtrueのホップイベントと、その後のfalseの最終イベントの両方が出力されることがあります。has_category: API レスポンスに"cyber"、"bio"、"frontier_llm"、"reasoning_extraction"のいずれかのstop_details.categoryが含まれていた場合はtrue。レスポンスにカテゴリが含まれていなかった場合、またはその集合以外の値だった場合はfalse。ホップのブロックにはstop_detailsが含まれないため、server_fallback_hopがtrueの場合は含まれません。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 リクエストボディイベント
OTEL_LOG_RAW_API_BODIES が設定されている場合、各 API リクエストの試行についてログに記録されます。試行ごとに 1 つのイベントが出力されるため、パラメーターを調整した再試行はそれぞれ独自のイベントを生成します。
イベント名: claude_code.api_request_body
属性:
- すべての標準属性
event.name:"api_request_body"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますbody: システムプロンプト、メッセージ、ツールなどを含む、JSON シリアライズされた Messages API のリクエストパラメーター。コンテンツの上限(デフォルトは 60 KB)で切り詰められます。過去のアシスタントのターンに含まれる拡張思考のコンテンツは秘匿化されます。インラインモード(OTEL_LOG_RAW_API_BODIES=1)でのみ出力されます。body_ref: 切り詰められていないボディを含む<dir>/<uuid>.request.jsonファイルへの絶対パス。ファイルモード(OTEL_LOG_RAW_API_BODIES=file:<dir>)でのみ出力されます。body_length: 切り詰め前のボディの長さ。OTEL_LOG_RAW_API_BODIES=file:<dir>の場合は UTF-8 バイト、=1の場合は UTF-16 コード単位ですbody_truncated: インラインでの切り詰めが発生した場合は"true"。ファイルモードの場合、および切り詰めが発生しなかった場合は含まれません。model: リクエストパラメーターのモデル識別子query_source: リクエストを発行したサブシステム(例:"compact")request_body_id: この試行のリクエストボディを識別する UUID。成功した試行のapi_response_bodyイベントにも同じ値が含まれるため、レスポンスとそれを生成した正確なリクエストを対応付けることができます。Claude Code v2.1.274 以降が必要です
API レスポンスボディイベント
OTEL_LOG_RAW_API_BODIES が設定されている場合、成功した各 API レスポンスについてログに記録されます。
ファイルモード(OTEL_LOG_RAW_API_BODIES=file:<dir>)では、Claude Code は成功したレスポンスごとに <dir>/index.jsonl にも 1 行の JSON を追記します。この行には timestamp、session_id、query_source、model、request_id、message_id、message_uuid、request_file、response_file のフィールドが含まれます。これを読むと、テレメトリバックエンドにクエリを実行することなく、特定のトランスクリプトメッセージの背後にあるリクエストファイルとレスポンスファイルを見つけることができます。インデックスファイルには Claude Code v2.1.274 以降が必要です。
イベント名: claude_code.api_response_body
属性:
- すべての標準属性
event.name:"api_response_body"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますbody: ID、コンテンツブロック、使用量、停止理由を含む、JSON シリアライズされた Messages API のレスポンス。コンテンツの上限(デフォルトは 60 KB)で切り詰められます。拡張思考のコンテンツは秘匿化されます。インラインモード(OTEL_LOG_RAW_API_BODIES=1)でのみ出力されます。body_ref: 切り詰められていないボディを含む<dir>/<request_id>.response.jsonファイルへの絶対パス。ファイルモード(OTEL_LOG_RAW_API_BODIES=file:<dir>)でのみ出力されます。body_length: 切り詰め前のボディの長さ。OTEL_LOG_RAW_API_BODIES=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。Claude Code v2.1.274 以降が必要ですmessage.id: API がレスポンスに割り当てたメッセージ ID(レスポンスボディのidフィールド)。Claude Code v2.1.274 以降が必要ですmessage.uuid: レスポンスの最後のトランスクリプトエントリの UUID。request_body_idと組み合わせることで、トランスクリプトのメッセージをその背後にあるリクエストボディとレスポンスボディに結び付けます。Claude Code v2.1.274 以降が必要です
ツール決定イベント
ツールの権限決定(承認/拒否)が行われたときにログに記録されます。
イベント名: claude_code.tool_decision
属性:
- すべての標準属性
event.name:"tool_decision"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますtool_name: ツールの名前(例: "Read"、"Edit"、"Write"、"NotebookEdit")tool_use_id: このツール呼び出しの一意の識別子。フックに渡されるtool_use_idと一致するため、OTel イベントとフックで取得したデータを関連付けることができます。decision:"accept"または"reject"tool_source: 常に含まれます。ツールの出自を示す、CLI が定める閉じた集合の値です。Claude Code v2.1.214 以降が必要です"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": プロンプトを表示せずに自動的に決定されたもの。プロジェクト設定、ユーザーの個人設定の許可ルールまたは拒否ルール、エンタープライズの管理ポリシー、--allowedToolsまたは--disallowedToolsフラグ、アクティブな権限モード、同じ対話型 CLI セッション内の以前のプロンプトで付与されたセッションスコープの権限、またはツールが本質的に安全であることに基づきます。イベントには、これらのうちどのソースが一致したかは示されません。Claude Code は、権限プロンプトのリクエスト自体が失敗した場合にも"config"を報告します。たとえば、Agent SDK のcanUseToolコールバックや--permission-prompt-toolツールが無効な結果を返した場合や、リクエストの保留中に入力ストリームが閉じられた場合です。v2.1.216 より前は、Claude Code はこれらの失敗を"user_reject"として報告していました。"hook":PreToolUseまたはPermissionRequestフックが決定を返したもの。"user_permanent": ユーザーが権限プロンプトで「Yes, and don't ask again for ...」を選択したときに出力されます。この選択により、ユーザーの個人設定に許可ルールが保存されます。対話型 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 より前は、Claude Code はその中断を"user_reject"として報告していました。拒否として扱われます。"user_reject": プロンプトが表示されたときにユーザーが「No」を選択したときに出力されます。対話型 CLI では、その選択自体に対してのみ出力され、ユーザーの個人設定の拒否ルールに一致する呼び出しでは代わりに"config"が出力されます。Agent SDK または非対話型の-pセッションでは、個人設定の拒否ルールに一致する呼び出しで"user_reject"が出力されます。拒否として扱われます。
tool_parameters(OTEL_LOG_TOOL_DETAILS=1の場合): ツール固有のパラメーターを含む JSON 文字列。ツール結果イベントと同じ形式ですが、git_commit_idなどの実行後のフィールドは含まれません。権限決定がupdatedInputを介してツール入力を書き換えた場合、承認された呼び出しでは値がtool_resultと異なることがあります。decisionが"reject"の場合にどのコマンドが拒否されたかを確認するには、この属性を使用してください。"sdk_host_builtin_mcp"ツールの場合: ホストアプリケーションがこれらの名前を定義しているため、OTEL_LOG_TOOL_DETAILSがオフの場合でもmcp_server_nameとmcp_tool_nameが含まれます。これらがなければ、これらの組み込みサーバーへの拒否された呼び出しをデフォルトのストリームで特定できなくなります。ユーザーが設定した MCP サーバーの場合、イベントのtool_nameは常にリテラルの"mcp_tool"であり、サーバー名とツール名はフラグがオンの場合にのみtool_parametersに表示されます。引数の内容はどの場合もフラグが必要です。Claude Code 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を含みます
権限モード変更イベント
権限モードが変更されたときにログに記録されます。たとえば、Shift+Tab による切り替え、plan モードの終了、auto モードのゲートチェックなどです。
イベント名: claude_code.permission_mode_changed
属性:
- すべての標準属性
event.name:"permission_mode_changed"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますfrom_mode: 以前の権限モード。例:"default"、"plan"、"acceptEdits"、"auto"、"bypassPermissions"to_mode: 新しい権限モードtrigger: 変更の原因。"shift_tab"、"exit_plan_mode"、"auto_gate_denied"、"auto_opt_in"のいずれかです。遷移が SDK またはブリッジから発生した場合は含まれません
認証イベント
/login または /logout が完了したときにログに記録されます。
イベント名: claude_code.auth
属性:
- すべての標準属性
event.name:"auth"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますaction:"login"または"logout"success:"true"または"false"auth_method: 認証方法。"oauth"などerror_category: アクションが失敗した場合のエラーの種類のカテゴリ。生のエラーメッセージが含まれることはありませんstatus_code: アクションが HTTP エラーで失敗した場合の、文字列としての HTTP ステータスコード
MCP サーバー接続イベント
MCP サーバーが接続、切断、または接続に失敗したときにログに記録されます。
イベント名: claude_code.mcp_server_connection
属性:
- すべての標準属性
event.name:"mcp_server_connection"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますstatus:"connected"、"failed"、"disconnected"のいずれかtransport_type: サーバーのトランスポート。"stdio"、"sse"、"http"などserver_scope: サーバーが設定されているスコープ。"user"、"project"、"local"などduration_ms: 接続試行の所要時間(ミリ秒)error_code: 接続が失敗した場合のエラーコードis_plugin: サーバーがプラグインによって提供されている場合はtrue、それ以外はfalseplugin_id_hash(is_pluginがtrueの場合): プラグイン名とマーケットプレイスの安定したハッシュ。名前を公開せずにプラグインごとにイベントをグループ化するために使用します。Claude Code はプラグイン読み込みイベントで説明している方法でこれを計算します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の場合): 接続が失敗した場合の完全なエラーメッセージ
内部エラーイベント
Claude Code が予期しない内部エラーを捕捉したときにログに記録されます。エラークラス名と errno 形式のコードのみが記録されます。エラーメッセージとスタックトレースが含まれることはありません。このイベントは、Amazon Bedrock、Google Cloud の Agent Platform、Microsoft Foundry に対して実行している場合、または DISABLE_ERROR_REPORTING が設定されている場合は出力されません。
イベント名: claude_code.internal_error
属性:
- すべての標準属性
event.name:"internal_error"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますerror_name: エラークラス名。"TypeError"や"SyntaxError"などerror_code: エラーに存在する場合の Node.js の errno コード("ENOENT"など)
プラグインインストールイベント
プラグインのインストールが完了したときにログに記録されます。claude plugin install CLI コマンドと対話型の /plugin UI の両方が対象です。
イベント名: claude_code.plugin_installed
属性:
- すべての標準属性
event.name:"plugin_installed"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明しています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の場合にのみ含まれます
プラグイン読み込みイベント
セッションの開始時に、有効化されているプラグインごとに 1 回ログに記録されます。インストール操作自体を記録する plugin_installed を補完するものとして、このイベントを使用してフリート全体でどのプラグインがアクティブかを把握できます。
イベント名: claude_code.plugin_loaded
属性:
- すべての標準属性
event.name:"plugin_loaded"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明しています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 より前は、Claude Code はこれらのプラグインを"user-install"または"seed-mount"として報告していましたplugin_id_hash: プラグイン名とマーケットプレイスの決定論的なハッシュ。設定したエクスポーターにのみ送信されます。名前を記録せずに、フリート全体で読み込まれた個別のサードパーティプラグインの数をカウントできます。claude.ai から同期されたプラグインの場合、Claude Code は、claude.ai がそのプラグインについて報告するマーケットプレイス名、それがない場合はsyncedとプラグイン名を組み合わせてハッシュします。v2.1.246 より前は、Claude Code は claude.ai が報告するマーケットプレイス名をハッシュに使用していませんでしたhas_hooks: プラグインがフックを提供するかどうかhas_mcp: プラグインが MCP サーバーを提供するかどうかhost_owned_mcp: SDK ホストがこのプラグインの MCP 接続を管理しており、Claude Code がプラグインの MCP サーバー設定の読み取りをスキップした場合はtrue、それ以外はfalse。Claude Code v2.1.172 以降が必要ですskill_path_count: プラグインが宣言するスキルディレクトリの数command_path_count: プラグインが宣言するコマンドディレクトリの数agent_path_count: プラグインが宣言するエージェントディレクトリの数safe_mode: セッションが--safe-modeで開始された場合は"true"、それ以外は"false"。safe モードでは、このイベントは設定されたインベントリのみを報告し、プラグインのコマンド、スキル、フック、MCP サーバーは読み込まれません。Claude Code v2.1.169 以降が必要です
スキル有効化イベント
スキルが呼び出されたときにログに記録されます。Claude が Skill ツールを通じて呼び出した場合と、ユーザーが / コマンドとして実行した場合の両方が対象です。
イベント名: claude_code.skill_activated
属性:
- すべての標準属性
event.name:"skill_activated"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明しています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の場合、またはプラグインが公式マーケットプレイスのものの場合): スキルがプラグインによって提供されている場合の、所有元のプラグインのインストール元のマーケットプレイス
@ メンションイベント
Claude Code がプロンプト内の @ メンションを解決したときにログに記録されます。すべてのメンションでイベントが出力されるわけではありません。権限の拒否、サイズが大きすぎるファイル、PDF の参照添付、ディレクトリ一覧の取得失敗などの早期終了パスでは、ログに記録せずに戻ります。
イベント名: claude_code.at_mention
属性:
- すべての標準属性
event.name:"at_mention"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますmention_type: メンションの種類("file"、"directory"、"agent"、"mcp_resource"、"peer")。"peer"の値は、ユーザーの他の Claude Code セッションのいずれかをメンションしたことを意味します。Claude Code v2.1.232 以降が必要ですsuccess: メンションが正常に解決されたかどうか("true"または"false")
API 再試行上限到達イベント
API リクエストが複数回の試行の後に失敗したときに 1 回ログに記録されます。最後の api_error イベントと一緒に出力されます。
イベント名: claude_code.api_retries_exhausted
属性:
- すべての標準属性
event.name:"api_retries_exhausted"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますmodel: 使用されたモデルerror: 最終的なエラーメッセージstatus_code: 数値としての HTTP ステータスコード。HTTP 以外のエラーの場合は含まれません。total_attempts: 試行の合計回数total_retry_duration_ms: すべての試行にわたる合計の実経過時間speed:"fast"または"normal"
フック登録イベント
セッションの開始時に、設定されたフックごとに 1 回ログに記録されます。実行ごとの hook_execution_start および hook_execution_complete イベントを補完するものとして、このイベントを使用してフリート全体でどのフックがアクティブかを把握できます。
イベント名: claude_code.hook_registered
属性:
- すべての標準属性
event.name:"hook_registered"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明しています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"。Claude Code v2.1.169 以降が必要ですhook_matcher(OTEL_LOG_TOOL_DETAILS=1の場合): フック設定で matcher が設定されている場合の matcher 文字列plugin.name(hook_sourceが"pluginHook"の場合): フックを提供するプラグインの名前。公式マーケットプレイスおよび組み込みバンドル以外のプラグインの場合、OTEL_LOG_TOOL_DETAILS=1でない限り値は"third-party"になりますplugin_id_hash(hook_sourceが"pluginHook"の場合): プラグイン名とマーケットプレイスの決定論的なハッシュ。設定したエクスポーターにのみ送信されます。名前を記録せずに、フックを提供する個別のプラグインの数をカウントできます。Claude Code はプラグイン読み込みイベントで説明している方法でこれを計算します
フック実行開始イベント
フックイベントに対して 1 つ以上のフックの実行が開始されたときにログに記録されます。
イベント名: claude_code.hook_execution_start
属性:
- すべての標準属性
event.name:"hook_execution_start"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますhook_event: フックイベントの種類。"PreToolUse"や"PostToolUse"などhook_name: matcher を含む完全なフック名。"PreToolUse:Write"などnum_hooks: 一致したフックコマンドの数managed_only: 管理ポリシーのフックのみが許可されている場合は"true"hook_source:"policySettings"または"merged"safe_mode: セッションが--safe-modeで開始された場合は"true"、それ以外は"false"。Claude Code v2.1.169 以降が必要ですhook_definitions: JSON シリアライズされたフック設定。詳細なベータトレースとOTEL_LOG_TOOL_DETAILS=1の両方が有効な場合にのみ含まれます
フック実行完了イベント
フックイベントに対するすべてのフックが完了したときにログに記録されます。
イベント名: claude_code.hook_execution_complete
属性:
- すべての標準属性
event.name:"hook_execution_complete"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますhook_event: フックイベントの種類hook_name: matcher を含む完全なフック名num_hooks: 一致したフックコマンドの数num_success: 正常に完了した数num_blocking: ブロッキングの決定を返した数num_non_blocking_error: ブロックせずに失敗した数num_cancelled: 完了前にキャンセルされた数total_duration_ms: 一致したすべてのフックの実経過時間stdout_chars: 成功した一致フック全体の stdout の合計文字数。Claude Code v2.1.280 以降が必要ですadditional_context_chars: 一致したフックが返したadditionalContextの合計文字数。Claude Code v2.1.280 以降が必要ですsystem_message_chars: 一致したフックが返したsystemMessageの合計文字数。Claude Code v2.1.280 以降が必要ですinitial_user_message_chars: 一致したフックが返したinitialUserMessageの合計文字数。Claude Code v2.1.280 以降が必要ですnum_outputs_persisted: 10,000 文字の上限を超えたために Claude Code がファイルに保存したフック出力の数。Claude Code v2.1.280 以降が必要ですmanaged_only: 管理ポリシーのフックのみが許可されている場合は"true"hook_source:"policySettings"または"merged"safe_mode: セッションが--safe-modeで開始された場合は"true"、それ以外は"false"。Claude Code v2.1.169 以降が必要ですhook_definitions: JSON シリアライズされたフック設定。詳細なベータトレースとOTEL_LOG_TOOL_DETAILS=1の両方が有効な場合にのみ含まれます
フックプラグインメトリクスイベント
公式マーケットプレイスのプラグインのフックが呼び出しごとのメトリクスを出力したときにログに記録されます。これを出力できるのは、Anthropic の公式マーケットプレイスからインストールされたプラグインのみです。サードパーティのマーケットプレイスのプラグインやユーザーが設定したフックは、このイベントに出力しません。このイベントを使用すると、検出率、コスト、所要時間などのプラグインの挙動を独自のオブザーバビリティスタックから監視できます。
イベント名: claude_code.hook_plugin_metrics
属性:
- すべての標準属性
event.name:"hook_plugin_metrics"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますplugin_id:<name>@<marketplace>形式のプラグイン識別子hook_event: メトリクスを出力したフックイベントの種類- プラグインが出力する最大 20 個のメトリクスキー。名前は
^[a-z][a-z0-9_]{0,39}$に一致します。値はブール値または数値です。
コンテキスト圧縮イベント
会話のコンテキスト圧縮が完了したときにログに記録されます。
イベント名: claude_code.compaction
属性:
- すべての標準属性
event.name:"compaction"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明しています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"は代わりに新しい要約が計算された理由を示します。Claude Code v2.1.153 以降が必要です
サブエージェント完了イベント
サブエージェントが終了し、その結果を起動元の会話に返したときに記録されます。サブエージェントの種類ごとにツール使用と実行時間を集計する用途に使用します。トークンやコストを集計する場合は、query_source を "subagent" でフィルタリングした トークンカウンターとコストカウンターを使用してください。このイベントの total_tokens は最後のリクエストのみを対象とするためです。"subagent" カテゴリには、エージェントベースのフックからのリクエストも含まれますが、これらはサブエージェントイベントを出力しません。
イベント名: claude_code.subagent_completed
属性:
- すべての標準属性
event.name:"subagent_completed"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明しています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と異なります。Claude Code v2.1.212 以降が必要ですmodel_swapped: サブエージェントのリクエストを複数のモデルが処理したかどうか。Claude Code v2.1.212 以降が必要ですplugin_id_hash、plugin.name: プラグインが提供するエージェントの場合に存在します。公式マーケットプレイスのプラグイン名はそのまま表示されます。その他のプラグイン名は、OTEL_LOG_TOOL_DETAILS=1が設定されていない限り"third-party"に置き換えられます
フィードバックアンケートイベント
セッション品質アンケートが表示されたとき、または回答されたときに記録されます。アンケートで収集される内容とその制御方法については、セッション品質アンケートを参照してください。
イベント名: claude_code.feedback_survey
属性:
- すべての標準属性
event.name:"feedback_survey"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますevent_type: アンケートのライフサイクルイベント。例:"appeared"、"responded"、"transcript_prompt_appeared"appearance_id: 1 つのアンケートインスタンスに対して出力されたイベントを結び付ける一意の IDsurvey_type: イベントを生成したアンケート。"session"は「Claude の調子はどうですか?」という評価プロンプトですresponse:respondedイベントにおけるユーザーの選択enabled_via_override:CLAUDE_CODE_ENABLE_FEEDBACK_SURVEY_FOR_OTELが設定されている場合はtrue。文字列ではなくブール値として出力されます。sessionアンケートイベントに存在します。この属性でフィルタリングすると、上書きがフリート全体に適用されていることを確認できます
保持期間スイープイベント
保持期間クリーンアップスイープの実行ごとに 1 回記録されます。このスイープは、cleanupPeriodDays 設定よりも古いセッショントランスクリプトやその他のアプリケーションデータを削除します。Claude Code はセッションごとに最大 1 回、バックグラウンドでスイープを実行し、何も削除しなかった実行でもイベントを出力します。同じマシン上のいずれかのセッションで過去 24 時間以内に Claude Code がスイープを実行していた場合、このセッションのスイープは少なくとも 10 分遅延されるため、それより早く終了したセッションは何も出力しません。claude -p を --bare とともに実行した場合、Claude Code はスイープを実行せず、何も出力しません。
このページのすべての OTel イベントと同様に、このイベントは設定したテレメトリバックエンドにのみ送信されます。Claude Code v2.1.227 以降が必要です。
Claude Code が保持期間を安全に判断できない場合、スイープを一時停止し、result を "skipped" に設定し、skip_reason を付けてイベントを出力します。管理設定で cleanupPeriodDays が設定されている場合は、管理設定の値によって保持期間が固定され、より優先度の低いスコープの設定ファイルが壊れていたり無効であったりしてもスイープは実行されます。managed-settings.json 自体を読み取れない場合、管理層がサーバー管理設定や壊れたファイルの隣にある managed-settings.d/ ドロップインなど、他の場所から cleanupPeriodDays を提供しない限り、Claude Code はスイープを一時停止します。削除カウンター属性は、result が "complete" の場合にのみ存在します。
イベント名: claude_code.retention_sweep
属性:
- すべての標準属性
event.name:"retention_sweep"event.timestamp: ISO 8601 タイムスタンプevent.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明していますresult: スイープが実行された場合は"complete"、Claude Code が一時停止した場合は"skipped"period_days: マージされた設定のcleanupPeriodDaysの値(日数)。どのソースでも設定されていない場合は30。skipped イベントでは、Claude Code が読み取れた設定ソースから算出した、スイープが使用するはずだった値used_default: 読み取り可能な設定ソースのいずれでもcleanupPeriodDaysが設定されていない場合は"true"、それ以外は"false"。complete イベントでは、"true"は 30 日のデフォルトが適用されたことを意味しますskip_reason: Claude Code がスイープを一時停止した理由。resultが"skipped"の場合にのみ存在します:"user_source_disabled":--setting-sourcesフラグや SDK のsettingSourcesオプションなどによってユーザー設定が除外されており、有効なソースのいずれもcleanupPeriodDaysを提供していない"settings_unknowable": 設定ファイルを読み取りまたは解析できなかったため、cleanupPeriodDaysまたはdesktopSessionCleanupPeriodDaysが Claude Code から見えない値に設定されている可能性がある"settings_invalid_key_set": 設定に検証エラーがあり、かつcleanupPeriodDaysまたはdesktopSessionCleanupPeriodDaysが明示的に設定されているため、デフォルトにフォールバックするとその設定に反してファイルを削除または保持してしまう可能性がある
transcripts_deleted: スイープが削除したセッショントランスクリプト(最上位の~/.claude/projects/*/*.jsonlファイル)の数transcripts_exempted_desktop: 保持期間を過ぎているものの、Claude Desktop と Cowork のルールによりスイープが保持したトランスクリプトの数。これらはfiles_past_cutoffにはカウントされません。Claude Code v2.1.248 以降が必要ですsession_files_deleted: セッションファイルスイープが削除したアーティファクトの数。トランスクリプトに加え、サイドカー、録画、ツール結果などのセッションごとの付随ファイルを含みますartifacts_deleted: スイープが対象とするデータディレクトリ全体で削除した項目の合計(セッションファイルを含む)。一部のスイープは削除したディレクトリツリー全体を 1 項目としてカウントし、いくつかのクリーンアップパスはカウンターに加算されないため、この値は正確なファイル数ではなく下限値として扱ってくださいfiles_retained_fresh: 検査されたものの、まだ保持期間内であるためそのまま残されたファイル。ファイル単位のスイープのみがこれらをカウントするため、この値は下限値です。ゼロ以外の値は通常の定常状態ですfiles_past_cutoff: 保持期間より古いものの、権限エラーやファイルが開かれたままであることなどが原因でスイープが削除に失敗したファイル。ゼロより大きい値は、設定された保持期間を超えてファイルが残ったことを意味します。ただし、ディレクトリ全体の削除に失敗した場合は代わりにerror_countにカウントされるため、ゼロであってもそのようなファイルがないことの証明にはなりませんerror_count: ファイルの一覧取得または削除中にスイープが遭遇したエラーの数
管理設定解決イベント
セッションが解決した管理設定とともに記録されます。セッション開始時に 1 回、セッション中に管理設定またはポリシーヘルパーの状態が変化したときに再度、そして error.type 属性に列挙されている理由のいずれかにより Claude Code が起動を拒否するかセッションを終了したときに記録されます。
このイベントを使用して、予期しない管理ソースで実行されているマシン、ポリシーヘルパーが失敗しているマシン、およびマシンが起動を拒否した理由を特定できます。
Claude Code v2.1.274 以降が必要です。
デフォルトでは、このイベントには管理ソースとポリシーヘルパーの状態が含まれますが、設定自体は含まれません。編集済みの managed_settings.settings 属性と managed_settings.resolved_sha256 ダイジェストを追加するには、OTEL_LOG_MANAGED_SETTINGS=1 を設定します:
- 管理設定、ユーザー設定、または
--settingsのenvブロック、あるいは Claude Code を起動する環境で設定してください。プロジェクト設定やローカル設定の値では有効になりません。クローンしたリポジトリがこれらを書き込めるためです。 - サーバー管理設定では、セキュリティ承認ダイアログを表示せずにこれを設定できます。この変数は、組織がすでに受け取っているイベントに、組織自身の編集済みポリシーを追加するだけだからです。
信頼していないフォルダーでの対話型セッションでは、Claude Code は拒否イベントをエクスポートしません。
イベント名: claude_code.managed_settings_resolved
属性:
-
すべての標準属性
-
event.name:"managed_settings_resolved" -
event.timestamp: ISO 8601 タイムスタンプ -
event.sequence: イベントを順序付けるためのプロセスごとのカウンター。イベント相関属性で説明しています -
managed_settings.trigger: セッション開始時のイベントの場合は"startup"、セッションの後半で管理設定またはポリシーヘルパーの状態が変化した場合は"change"、管理設定ポリシーによってセッションが停止された場合は"refused"。Claude Code は、最後に送信したイベントと属性が異なる場合にのみchangeイベントを送信します。設定値の変更は、OTEL_LOG_MANAGED_SETTINGSがオフの場合でもカウントされます -
error.type: Claude Code がセッションを停止した理由。refusedイベントにのみ存在します:"helper_failed": ポリシーヘルパーの実行が失敗した"policy_invalid": 管理設定に Claude Code の起動を妨げるエラーが含まれている、または管理ソースが読み取り拒否以外の理由で読み込みに失敗したため、Claude Code が組織ログインやプロバイダーの強制を確認できない"provider_not_allowed": セッションが、管理設定のallowedProvidersリストで許可されていない API プロバイダーを使用する、またはプロバイダーのトラフィックを許可されていないホストに送信しようとしている。Claude Code v2.1.285 以降が必要です"consent_rejected": ユーザーがサーバー管理設定のセキュリティ承認ダイアログを拒否した"force_refresh_failed":forceRemoteSettingsRefreshが必要とする設定の取得に失敗した"gateway_rejected": Claude apps ゲートウェイが管理設定の読み込みに HTTP 403 で応答した"version_below_minimum": この Claude Code のバージョンがrequiredMinimumVersionを下回っているか、requiredMaximumVersionを上回っている"_OTHER": Claude apps ゲートウェイの管理設定の読み込みがその他の理由で失敗した
-
managed_settings.sources: 少なくとも 1 つのポリシーキーを提供するすべての管理ソース。優先度の高い順に並び、first-winsの下でキーが有効にならないソースも含まれます。値は、MDM または OS レベルのポリシーの場合は"remote"、"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 またはファイルソースが設定するポリシーヘルパーの状態:"ok": ヘルパーの出力が管理設定として使用されている"bad_path"、"not_a_file"、"exit_nonzero"、"timed_out"、"oversize"、"parse_failed"、"envelope_invalid"、または"schema_rejected": ヘルパーの最後の実行が失敗した。各ケースについてはヘルパーの失敗で説明しています"none": ヘルパーが設定されていない、またはヘルパーを設定するソースが 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(OTEL_LOG_MANAGED_SETTINGS=1の場合): 編集前の解決済み管理設定の SHA-256。キーを再帰的にソートし、空白なしの JSON としてシリアル化したものです。同じダイジェストを持つマシンは同じポリシーで実行されています。短いポリシーは推測値をハッシュ化することで復元できてしまうため、Claude Code はオプトインした場合にのみダイジェストを送信します。管理設定が解決されなかった場合、およびrefusedイベントでは存在しません -
managed_settings.settings(OTEL_LOG_MANAGED_SETTINGS=1の場合): 解決済み管理設定の名前と構造を、値を編集した JSON 文字列として表したもの。refusedイベントでは存在しません。Claude Code は設定スキーマに基づいてこれを構築します:- スキーマで宣言されている設定名はエクスポートされ、宣言されていないキーは除外されます
- ブール値、数値、およびスキーマが固定の選択肢に制限している文字列値(
permissions.defaultModeなど)はそのままエクスポートされます。sandbox.network.httpProxyPortとsandbox.network.socksProxyPortは"[REDACTED]"としてエクスポートされます model、apiKeyHelper、すべてのenvの値、すべての URL、すべてのコマンドなど、その他のすべての文字列は"[REDACTED]"としてエクスポートされますenvの変数名やプラグイン ID など、マップのエントリ名はそのままエクスポートされます。vimInsertModeRemapsなど、スキーマがエントリの型を定義していない設定は単一の"[REDACTED]"としてエクスポートされ、sandbox.ignoreViolationsはコマンドパターンを除いたパスリストのリストとしてエクスポートされます- リストは長さを保持し、各エントリは同じルールで編集されます
permissions.allow、permissions.deny、またはpermissions.askのルールは、ツールがこのバージョンの Claude Code に組み込まれている場合、またはmcp__jira__create_issueのようなmcp__参照である場合、Read([REDACTED])のように内容を編集したツール名としてエクスポートされます。その他のルールは"[REDACTED]"としてエクスポートされます- フックも同じルールに従うため、
typeやtimeoutなどの固定選択肢のフィールドや数値フィールドは表示されますが、各コマンド、URL、matcher、if条件は"[REDACTED]"としてエクスポートされます
たとえば、
apiKeyHelper、2 つのenv変数、および拒否ルールを含む管理設定は、{"apiKeyHelper":"[REDACTED]","env":{"HTTPS_PROXY":"[REDACTED]","CLAUDE_CODE_ENABLE_TELEMETRY":"[REDACTED]"},"permissions":{"deny":["Read([REDACTED])"]}}としてエクスポートされます。Claude Code は値を UTF-8 で 8 KB に切り詰め、切り詰められた値は有効な JSON ではありません
-
managed_settings.settings_truncated(managed_settings.settingsが存在する場合): Claude Code がmanaged_settings.settingsを 8 KB で切り詰めた場合はtrue、それ以外はfalse。文字列ではなくブール値として出力されます
メトリクスとイベントデータの解釈
エクスポートされたメトリクスとイベントは、さまざまな分析をサポートします:
使用状況監視
| メトリクス | 分析の機会 |
|---|---|
claude_code.token.usage |
トークンの type、ユーザー、チーム、モデル、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 より前では、複数のフレームで使用状況を含むストリームは、claude_code.cost.usage と claude_code.token.usage を追加フレームごとにおよそ 1 つの追加フルリクエスト分だけ増加させました。
アラートとセグメンテーション
検討すべき一般的なアラート:
- コストスパイク
- 異常なトークン消費
- 特定のユーザーからの高いセッションボリューム
すべてのメトリクスは、標準属性 でセグメント化できます。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 イベントを出力するため、イベント自体がそのリクエストの終端信号です。中間再試行試行は個別のイベントとしてログされません。
イベントの attempt 属性は、試行の総数を記録します。CLAUDE_CODE_MAX_RETRIES はデフォルトで 10 で、15 で上限です。v2.1.199 以降では、CLAUDE_CODE_RETRY_WATCHDOG を設定してデフォルトを引き上げ、上限を削除できます。
リクエストが一時的なエラーのすべての再試行を枯渇させた場合、attempt はその有効な制限より 1 つ多くなります: デフォルトでは 11、ウォッチドッグが設定されていない限り 16 を超えることはありません。より低い値は、400 レスポンスなどの再試行不可能なエラー、または独自のより小さい再試行予算を持つ原因を示します。たとえば、Claude Code は AWS または Google Cloud 認証情報の読み込み失敗を最大 2 回再試行します。
セッションが回復したものと停止したものを区別するには、イベントを session.id でグループ化し、エラーの後に後続の api_request イベントが存在するかどうかを確認します。
イベント分析
イベントデータは Claude Code インタラクションに関する詳細な洞察を提供します:
ツール使用パターン: ツール結果イベントを分析して以下を特定します:
- 最も頻繁に使用されるツール
- ツール成功率
- 平均ツール実行時間
- ツールタイプ別のエラーパターン
パフォーマンス監視: API リクエスト期間とツール実行時間を追跡して、パフォーマンスボトルネックを特定します。
入力トークンを OpenTelemetry GenAI セマンティック規約にマッピングする
Claude Code は、入力トークン数を API レスポンスの usage ブロックに表示されるとおりにエクスポートするため、これらの値には プロンプトキャッシュ から読み取られたトークンやキャッシュに書き込まれたトークンは含まれません:
claude_code.llm_requestスパンとapi_requestイベントのinput_tokensclaude_code.token.usageメトリクスの"input"タイプ
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"タイプを合計します
規約では、キャッシュ読み取りとキャッシュ書き込みに対して個別の属性も定義されています:
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)プラットフォーム、または 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 コマンド、ファイル編集はその開発者に属性付けられます。Claude Code は個別のサービスアカウントの下では機能しません。各イベントに記録される ID は、開発者自身の Claude アカウント、または Claude apps gateway セッションでの開発者の IdP ID です。Claude Tag チャネルセッションでは、Claude はあなたの組織の 共有 ID として機能します。
Claude Code が直接 API キーで認証する場合、または Amazon Bedrock、Google Cloud の Agent Platform、または Microsoft Foundry に対して認証する場合、セッションに Claude アカウントはなく、user.id と session.id のみが入力されます。これらのデプロイメントでは、OTEL_RESOURCE_ATTRIBUTES を使用してユーザー ID を自分で添付し、管理設定 ファイルまたはローンチラッパーを通じてユーザーごとに設定します。Claude apps gateway セッションはこれを必要としません:標準属性 を参照して、それらのエクスポートが持つ ID を確認してください。
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 |
tool_name および mcp_server_scope を含む各 MCP ツール呼び出し、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と、ユーザー設定サーバーの場合はリテラル"mcp_tool"に編集されたtool_nameを保持し、引数コンテンツを省略します。Claude Desktop の組み込みサーバーの場合、Claude Desktop が所有するセッションでは、tool_parameters内のmcp_server_name/mcp_tool_nameペアも保持します。これはtool_decisionと同じホスト作成例外です。Claude Code v2.1.214 以降が必要ですtool_decision:tool_sourceと、ユーザー設定サーバーの場合はリテラル"mcp_tool"に編集されたtool_nameを保持し、引数コンテンツを省略します。Claude Desktop の組み込みサーバーの場合、Claude Desktop が所有するセッションでは、tool_parameters内のmcp_server_name/mcp_tool_nameペアも保持します。tool_sourceと名前ペアの両方に Claude Code 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;managed_settings.settings および managed_settings.resolved_sha256(OTEL_LOG_MANAGED_SETTINGS=1 の場合) |
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> で Claude Code を起動し、そのログで [3P telemetry] エクスポートエラーを確認します。
バックエンドに関する考慮事項
メトリクス、ログ、トレースバックエンドの選択により、実行できる分析のタイプが決まります:
メトリクスの場合
- 時系列データベース: レート計算、集約メトリクス
- カラムナーストア: 複雑なクエリ、一意のユーザー分析
- フル機能の可観測性プラットフォーム: 高度なクエリ、可視化、アラート
イベント/ログの場合
- ログ集約システム: 全文検索、ログ分析
- カラムナーストア: 構造化イベント分析
- フル機能の可観測性プラットフォーム: メトリクスとイベント間の相関
トレースの場合
分散トレースストレージとスパン相関をサポートするバックエンドを選択します:
- 分散トレースシステム: スパン可視化、リクエストウォーターフォール、レイテンシー分析
- フル機能の可観測性プラットフォーム: トレース検索とメトリクスおよびログとの相関
日次/週次/月次アクティブユーザー (DAU/WAU/MAU) メトリクスが必要な組織の場合は、効率的な一意値クエリをサポートするバックエンドを検討してください。
サービス情報
すべてのメトリクスとイベントは、以下のリソース属性でエクスポートされます:
service.name: ターミナルセッションの場合はclaude-code、Claude Desktop アプリのコードタブから開始されたセッションの場合はclaude-code-desktopservice.version: 現在の Claude Code バージョン、またはコードタブセッションの場合は Desktop アプリバージョンos.type: オペレーティングシステムタイプ (例:linux、darwin、windows)os.version: オペレーティングシステムバージョン文字列host.arch: ホストアーキテクチャ (例:amd64、arm64)wsl.version: WSL バージョン番号 (Windows Subsystem for Linux で実行している場合のみ存在)- メーター名:
com.anthropic.claude_code
service.name = claude-code でフィルタリングするコレクターパイプラインまたはダッシュボードがある場合は、コードタブセッションからのテレメトリもキャプチャするために、フィルターに claude-code-desktop を追加してください。
ROI 測定リソース
テレメトリセットアップ、コスト分析、生産性メトリクス、自動レポート生成を含む Claude Code の投資収益率(ROI)測定に関する包括的なガイドについては、Claude Code ROI 測定ガイドを参照してください。このリポジトリは、すぐに使用できる Docker Compose 設定、Prometheus と OpenTelemetry セットアップ、Linear などのツールと統合された生産性レポート生成テンプレートを提供します。
セキュリティとプライバシー
- OpenTelemetry エクスポートをバックエンドに送信することはオプトインであり、明示的な設定が必要です。Anthropic の個別の運用テレメトリと無効化方法については、データ使用を参照してください
- 生のファイルコンテンツとコードスニペットはメトリクスやイベントに含まれません。トレーススパンは別のデータパスです。以下の
OTEL_LOG_TOOL_CONTENTの項目を参照してください - OAuth 経由で認証されている場合、
user.emailはテレメトリ属性に含まれ、設定した OTel エンドポイントにのみ送信され、Anthropic には送信されません。これが組織にとって懸念事項である場合は、テレメトリバックエンドと協力してこのフィールドをフィルタリングまたは編集してください - ユーザープロンプトコンテンツはデフォルトでは収集されません。プロンプト長のみが記録されます。プロンプトコンテンツを含めるには、
OTEL_LOG_USER_PROMPTS=1を設定してください。詳細なベータトレースでは、この変数はプロンプトテキストよりも広い範囲に達します。これはnew_contextスパン属性もゲートします。これはclaude_code.llm_requestスパンのツール結果を含みます - アシスタント応答テキストはデフォルトでは収集されません。応答長のみが記録されます。応答テキストを含めるには、
OTEL_LOG_ASSISTANT_RESPONSES=1を設定してください。Claude Code からのすべての OpenTelemetry データと同様に、応答テキストは設定した OTel エンドポイントにのみ送信され、Anthropic には送信されません。この変数が設定されていない場合、OTEL_LOG_USER_PROMPTSがフォールバックとして使用されるため、プロンプトコンテンツなしで応答コンテンツが必要な場合はOTEL_LOG_ASSISTANT_RESPONSES=0を設定してください - ツール入力引数とパラメータはデフォルトではログに記録されません。これらを含めるには、
OTEL_LOG_TOOL_DETAILS=1を設定してください。Claude Desktop の組み込みサーバーの場合、Claude Desktop が所有するセッションでは、tool_decisionとtool_resultはmcp_server_name/mcp_tool_nameペアを含みます。これはホストが作成した名前であり、フラグがオフの場合でも引数コンテンツではありません。この例外には Claude Code v2.1.214 以降が必要です。このデータは設定した OTEL エンドポイントにのみ送信され、Anthropic には送信されません。引数には機密値が含まれる可能性があるため、テレメトリバックエンドを設定してこれらの属性をフィルタリングまたは編集してください。有効にすると:tool_resultとtool_decisionイベントには、Bash コマンド、MCP サーバーとツール名、およびスキル名を含むtool_parameters属性が含まれます。full_commandなどのフィールドは切り詰められずに出力されますtool_resultイベントには、ファイルパス、URL、検索パターン、およびその他の引数を含むtool_input属性も含まれます。512 文字を超える個別の値は切り詰められ、合計は約 4 K 文字に制限されますuser_promptイベントには、カスタム、プラグイン、および MCP コマンドの逐語的なcommand_nameが含まれます- コストとトークンカウンターおよび
api_request、api_error、およびapi_refusalイベントは、その属性の帰属に実際のエージェント、スキル、プラグイン、および MCP サーバーとツール名を含みます - トレーススパンには、同じ
tool_input属性とfile_pathなどの入力派生属性が含まれ、tool_inputと同じ切り詰めが行われます
- ツールコンテンツはデフォルトではトレーススパンにログに記録されません。これを含めるには、
OTEL_LOG_TOOL_CONTENT=1を設定してください。その後、claude_code.toolスパンは、生のファイルコンテンツ、Bash コマンド出力、および MCP ツール、WebFetch、WebSearch が返すものを含むtool.outputスパンイベントを含みます。コンテンツは属性ごとにコンテンツ制限(デフォルトでは 60 KB)で切り詰められます。MCP ツール、WebFetch、WebSearch からの結果には Claude Code v2.1.283 以降が必要です。ツールコンテンツはnew_contextを通じてスパンに到達します。このゲートはスパンごとに異なります。テレメトリバックエンドを設定してこれらの属性をフィルタリングまたは編集してください - 生の Anthropic Messages API リクエストおよびレスポンスボディはデフォルトではログに記録されません。これらを含めるには、シェル、ユーザー設定、または管理設定で
OTEL_LOG_RAW_API_BODIESを設定してください。プロジェクトおよびローカル設定では無視されます。ボディには、システムプロンプト、すべての以前のユーザーとアシスタントのターン、およびツール結果を含む完全な会話履歴が含まれるため、これを有効にすることは、他のOTEL_LOG_*コンテンツフラグが明かすすべてのことへの同意を意味します。Claude Code は、他の設定に関係なく、これらのボディから Claude の拡張思考コンテンツを常に編集します。設定する値は、Claude Code がボディを配信する方法を決定します:-
=1の場合、Claude Code は各 API 呼び出しに対してapi_request_bodyとapi_response_bodyログイベントを出力します。イベントのbody属性は JSON シリアル化されたペイロードを含み、コンテンツ制限(デフォルトでは 60 KB)で切り詰められます -
=file:<dir>の場合、Claude Code は切り詰められていないボディをそのディレクトリの.request.jsonと.response.jsonファイルに書き込み、イベントはインラインボディの代わりにbody_refパスを含みます。テレメトリストリームではなく、ログコレクターまたはサイドカーでディレクトリを送信してください。各成功したレスポンスについて、Claude Code はそのディレクトリの
index.jsonlに 1 行追加し、レスポンスファイルをそれを生成したリクエストファイルおよびそれが成為したトランスクリプトメッセージにリンクします。各行はメッセージコンテンツを含まず、API レスポンスボディイベントセクションがそのフィールドをリストします。インデックスファイルには Claude Code v2.1.274 以降が必要です
-
Amazon Bedrock での Claude Code の監視
Amazon Bedrock での Claude Code 使用状況監視ガイダンスの詳細については、Claude Code 監視実装(Amazon Bedrock)を参照してください。