原文(日本語に翻訳)
OpenTelemetry: tool_result および tool_decision イベントに tool_use_id が含まれるようになった。tool_result には tool_input_size_bytes も追加された
原文(英語)
OpenTelemetry: tool_result and tool_decision events now include tool_use_id; tool_result also includes tool_input_size_bytes
概要
Claude CodeのOpenTelemetryトレーシングで、tool_result と tool_decision イベントに tool_use_id が追加された。また tool_result には tool_input_size_bytes(ツール入力のバイトサイズ)も追加された。これによりツール呼び出しの追跡精度が向上し、パフォーマンス分析やデバッグが容易になる。
基本的な使い方
OpenTelemetryを設定している環境では、新しいフィールドが自動的にトレースデータに含まれる:
json
// tool_result イベントの例
{
"event": "tool_result",
"tool_name": "Bash",
"tool_use_id": "toolu_01XYZ...",
"tool_input_size_bytes": 156,
"duration_ms": 1234
}
// tool_decision イベントの例
{
"event": "tool_decision",
"tool_name": "Write",
"tool_use_id": "toolu_01ABC...",
"decision": "allow"
}実践例
ツール呼び出しの追跡
tool_use_id を使って、ツール呼び出しの開始から終了までを一意に追跡できる:
python
# Pythonでのトレース分析例
from opentelemetry import trace
# tool_use_idでツール呼び出しを関連付ける
def analyze_tool_call(spans):
tool_calls = {}
for span in spans:
if span.name in ["tool_result", "tool_decision"]:
tool_use_id = span.attributes.get("tool_use_id")
if tool_use_id:
tool_calls[tool_use_id] = span
return tool_calls大きなツール入力の検出
tool_input_size_bytes を使って、大きな入力を持つツール呼び出しを特定する:
bash
# OpenTelemetryコレクターでのフィルタリング例
# tool_input_size_bytes > 10000 のイベントのみ収集Jaegerなどのトレーシングツールでクエリ:
tool_input_size_bytes > 10000 AND event = "tool_result"Grafanaでのダッシュボード作成
promql
# ツール入力サイズの分布
histogram_quantile(0.95,
sum(rate(claude_code_tool_input_size_bytes_bucket[5m])) by (tool_name, le)
)OpenTelemetryの設定例
json
// .claude/settings.json
{
"env": {
"OTEL_EXPORTER_OTLP_ENDPOINT": "http://otel-collector:4318",
"OTEL_SERVICE_NAME": "claude-code",
"OTEL_TRACES_EXPORTER": "otlp"
}
}注意点
tool_use_idはClaude APIが生成する一意のIDで、ツール呼び出しの追跡に使用できるtool_input_size_bytesは入力データのバイト数を表し、大きなファイルを処理する際のパフォーマンス分析に有用- これらのフィールドはOpenTelemetryを設定している場合にのみ収集される
- OpenTelemetryを使用していない場合はこの変更の影響を受けない