Claude CodeのOpenTelemetryをPrometheusとGrafanaへ送る
公開 2026-04-25 更新 2026-09-12

関連テーマ:利用量・コスト・速度を把握する
この記事の目次
OpenTelemetryは、Claude Codeのセッション数、トークン、コスト推定、ツールやHookのイベントを社内の監視基盤へ送るための標準です。請求額の正本ではなく、利用傾向や異常の検知に使います。送信する属性にはユーザー、モデル、Skill、agentなどが含まれ得るため、保持とアクセス権を先に決めます。
構成
本文の構成でデータが通る場所です。各区間を別々に確認できます。
- 1Claude Code設定された宛先へ利用メトリクスを送る。
- 2OTel Collector受け取り、Prometheusから取得できる形にする。
- 3PrometheusCollectorから取得して蓄積する。
- 4GrafanaPrometheusをデータソースとして表示する。
矢印はデータの流れです。Prometheusは取得する側なので、通信を設定するときは各サービスから見た宛先を確認します。
Claude Code→OTel Collector→Prometheus→Grafanaの順に接続します。環境変数は公式のMonitoringページにある現行名を確認して設定し、例としてCollectorのHTTP endpoint、Prometheus scrape、Grafana datasourceを最小構成で用意します。WindowsではPowerShellで一時設定し、永続設定にする前に新しいClaude Codeプロセスで反映を確認します。プロバイダーによってテレメトリ既定値が異なるため、Bedrock・Vertex・FoundryはData usageの表を確認します。
メトリクスが届かない場合は、環境変数、Collectorログ、エンドポイントのポート、Prometheusのtargets、Grafanaの時刻範囲を順に調べます。claude_code.token.usageは入力・出力、モデル、ユーザー、Skillなどで分解できますが、claude_code.cost.usageは近似値です。API、AWS、GCPの公式請求と突合してください。
テレメトリを無効化する場合はDISABLE_TELEMETRY=1など現行の環境変数を確認し、組織管理の設定を上書きできると決めつけません。ログへプロンプトやコードを出さない構成にします。公式Monitoring、Data usage、Configurationを照合しました。実機検証はしていません。
2026年9月12日の公式資料には、v2.1.269以降で OTEL_METRICS_INCLUDE_REPOSITORY=true にすると、リポジトリの識別属性を自分の監視基盤へ送る選択肢が追加されています。既定はfalseです。組織名やリポジトリ名も運用上の情報になるため、下の最小例には追加していません。必要な場合だけ送信属性と閲覧権限を確認します。
最小構成の具体例
以下は、OpenTelemetry Collector Contrib、Prometheus、Grafanaを導入済みの環境に接続する設定例です。CollectorはPrometheus exporterを含む構成を使います。各ツールのインストールとコンテナの作成は前提作業です。CollectorのOTLP受信とPrometheus exporterを有効にし、Prometheusからメトリクスを取得します。
CLIだけで利用量を見る場合はプラン別の監視方法、組織の採用状況を読む場合はAnalyticsを先に確認してください。
未実機の最小例を示します。Claude CodeをWindowsホストで起動し、CollectorをDockerで起動する場合、PowerShellからホストの公開ポートへ送ります。
$env:OTEL_METRICS_EXPORTER = "otlp"
$env:OTEL_LOGS_EXPORTER = "none"
$env:OTEL_EXPORTER_OTLP_PROTOCOL = "grpc"
$env:OTEL_EXPORTER_OTLP_ENDPOINT = "http://localhost:4317"
$env:CLAUDE_CODE_ENABLE_TELEMETRY = "1"
claude
Collector側の例は、4317でOTLP gRPCを受け、9464でPrometheus形式を公開します。
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
exporters:
prometheus:
endpoint: 0.0.0.0:9464
service:
pipelines:
metrics:
receivers: [otlp]
exporters: [prometheus]
PrometheusコンテナからCollectorを参照する場合、localhostはPrometheus自身を指します。Docker Composeのサービス名をcollectorとしたなら、prometheus.ymlは次のようにcollector:9464を指定します。ホストでPrometheusを起動する構成ならlocalhost:9464です。
scrape_configs:
- job_name: claude-code
scrape_interval: 30s
static_configs:
- targets: ["collector:9464"]
Collectorコンテナの4317番ポートをWindowsホストの127.0.0.1:4317へ公開し、Prometheus・Grafanaを同じComposeネットワークへ接続します。Collectorの9464番ポートはPrometheusから到達できればよく、外部へ公開する必要はありません。
GrafanaのData source URLは、GrafanaとPrometheusが同じComposeネットワーク内ならhttp://prometheus:9090です。両方をホスト上で直接起動する構成ならhttp://127.0.0.1:9090にします。接続先はブラウザではなくGrafanaサーバーから見たアドレスです。PrometheusのTargetsがUPになった後、Exploreで受信した系列を選びます。Prometheusへの変換でドットがアンダースコアになったり接尾辞が付いたりするため、claude_code.*という元の名前だけで検索結果を判断しません。
設定形式の参照先はCollector、Prometheus、Grafanaの接続設定です。メトリクスにも利用者の属性が含まれ得るため、保持期間と閲覧権限を決めます。この例はログを送らない設定ですが、組織の管理設定や別の通信経路まで無効化するものではありません。
このテーマを続けて読む
料金の考え方からモデル選択、利用状況の見える化へ進みます。
利用量・コスト・速度を把握するの記事をまとめて見る