Skip to content
返回文章列表
Developer Tools9分

Claude Codeプラグインのオブザーバビリティ:OpenTelemetryとコスト按分

Observability for Claude Code Plugins: OpenTelemetry and Cost Attribution

久保田 光SRE / プラットフォーム
2026-04-249分
Claude CodeOpenTelemetryオブザーバビリティFinOpsトレーシング

本文以日语发表。中文摘要如下:

Observability for Claude Code Plugins: OpenTelemetry and Cost Attributiongen_ai セマンティック規約に沿ったトレーススパン、プラグイン単位のコスト按分、hookレイテンシの可視化。Datadogとgrafanaで組んだ実運用ダッシュボードの構成。

Claude Codeを30人以上で使い始めると、「誰がどのプラグインで月いくら使っているか」がFinOpsの最重要質問になる。Anthropicが公式にサポートしているOpenTelemetry出力は、v1.0.120あたりから`gen_ai.*`セマンティック規約に準拠していて、プラグイン単位の計測が現実的になった。今回はその構成を共有する。

環境変数`CLAUDE_CODE_ENABLE_TELEMETRY=1`と`OTEL_EXPORTER_OTLP_ENDPOINT=https://otel.internal:4317`をManaged settingsに入れるだけで、トレース・メトリクス・ログの三本が出始める。スパン属性として`gen_ai.request.model`、`gen_ai.usage.input_tokens`、`gen_ai.usage.output_tokens`、そしてカスタム属性の`claude_code.plugin.name`と`claude_code.command.name`が載る。後者2つがコスト按分の鍵になる。

Datadog側ではスパンメトリクスを`@claude_code.plugin.name`でgroup byし、`gen_ai.usage.input_tokens * input_price + gen_ai.usage.output_tokens * output_price`を式メトリクスで計算する。モデルによって単価が違うので、`@gen_ai.request.model`も分岐条件に入れる。これで「plugin=code-reviewer, model=opus-4-7, 月次$427」みたいな粒度の内訳が出る。

hookのレイテンシは別軸で見る。`PreToolUse`や`PostToolUse`はブロッキングなので、p95が500msを超えるとユーザー体験に直に響く。`claude_code.hook.duration_ms`ヒストグラムをgrafanaでプラグイン×hook種別に並べ、SLO 300ms/p95を敷いている。先月はある社内プラグインの`PreToolUse`でnpm auditを同期実行していて、p95が2.1秒まで悪化。非同期化してp95 180msに戻した。

ログ面ではhook失敗を`severity=error`で拾い、Slackに流す。hookがnon-zeroで終わるとツール実行自体がブロックされるので、プラグイン作者には「失敗ログと回復手順を必ず`stderr`に書く」ルールをADRで明文化した。

注意点はサンプリング。デフォルトで全スパン送ると量が爆発するので、`OTEL_TRACES_SAMPLER=parentbased_traceidratio`と`OTEL_TRACES_SAMPLER_ARG=0.2`で20%に絞り、メトリクスだけ100%維持する構成にした。コスト按分はメトリクスで足りる。個別のデバッグに必要なときだけtail samplingで全量取得に切り替える。

技術的な課題を一緒に解決しませんか?

KGA IT Solutionsは、AI・クラウド・DevOpsの専門チームがお客様の課題に最適なソリューションを提供します。

お問い合わせ