🗂️

チーム全体でAI活用の効率を上げるためにClaudeCodeのログを収集する

に公開

課題

  • プロンプトの変更やコンテクストの追加をした際にそれが正解だったのか感覚値以外に図る指数がない
  • AI駆動開発の上手/下手がよく分からない(上手な人に教えを乞いたい)
  • タスク単位で成功/失敗のパターンを分析したい(AIが苦手なタスクを理解しておきたい、たぶんプロジェクトによっても異なる)
  • 実感としてAI可読性が低いと思われるファイル(なんかこのモデル周りだと出力精度落ちるなーとか)があるが確信がもてない

解決案

受信サーバの用意

  • テレメトリーデータを受信するサーバを用意
  • 自前 or それ用のサービス
    1. 自分でOpenTelemetry対応のサーバを建てる
    2. OpenTelemetry対応のAPMサービスに繋げる
    • AWS Distro for OpenTelemetry
    • GCP Cloud Trace
    • Datadog とか
  • 既にDatadog使ってるならそれが早そう

claudeCodeの送信設定

  • settings.json でOpenTelemetryの送信先やフォーマットを変数で設定するだけ
  • あとはclaudeCodeがよしなに送信してくれる
  • チームで利用する場合はコミットしてる settings.json に設定

試してみる

一先ず個人開発プロジェクトのログを収集してみる

受信サーバはGrafanaLabsを利用

サーバの用意

  1. アカウントを作る
  2. "Manage your Grafana Cloud stack" のリストからデフォルトで作られているstackを選んでダッシュボードへ移動
  3. 左ナビ -> Connections -> Add new Connection -> 検索バーに OpenTelemetry を入力して出てきた OpenTelemetry を選択
  4. OpenTelemetry setup で設定
  5. Choose your programming language
    - Other
  6. Choose your infrastructure
    - Other
  7. Choose your method
    - OpenTelemetry Collector
  8. トーク生成して環境変数をコピー

claude codeの設定

  • プロジェクト内の settings.jsonenv を設定
  • OTEL_LOG_USER_PROMPTS1 にするとプロンプトの内容がログに含まれる
  • grafana の場合はプロトコルが http/protobuf なので注意
  • OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_HEADERS は grafana でコピーした変数の内容
{
  "env": {
    "CLAUDE_CODE_ENABLE_TELEMETRY": "1",
    "OTEL_METRICS_EXPORTER": "otlp",
    "OTEL_LOGS_EXPORTER": "otlp",
    "OTEL_LOG_USER_PROMPTS": "1",
    "OTEL_EXPORTER_OTLP_PROTOCOL": "http/protobuf",
    "OTEL_EXPORTER_OTLP_ENDPOINT": "https://otlp-gateway-prod-ap-northeast-0000.grafana.net/otlp",
    "OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Basic xxxxxxxxx"
  }
}

ログを確認

  1. Explore -> データソースとして Loki を選択
  2. 一先ず全部見る為に {service_name="claude-code"} でクエリを実行

こんな感じ、もちろんエクスポートも可能

分かった事

あくまでもメトリクスデータ

  • ローカルのログとは違う所謂メトリクスデータ
  • トークンの利用数や変更行数、利用されたツール、ユーザーが入力したプロンプトは取れる
  • 書き込み、読み込みなどに関しては tool_name: Read という形で何のツールが利用されたかは分かるが差分などはログに含まれない
  • Bashを使った場合は tool_parameters に実行したコマンドや引数が入ってくる

分析できる範囲

  • プロンプトの変更やコンテクストの追加をした際にそれが正解だったのか感覚値以外に図る指数がない

共通コマンド等のプロンプト変更、コンテクスト追加などの前後でメトリクスデータを比較してある程度見れる

  • AI駆動開発の上手/下手がよく分からない(上手な人に教えを乞いたい)

ユーザー情報を取れるので、分析可能(ユーザー情報を送らない設定もあり)

  • タスク単位で成功/失敗のパターンを分析したい(AIが苦手なタスクを理解しておきたい、たぶんプロジェクトによっても異なる)

Bashコマンドの tool_parameters を追うとclaudeCodeのセッションとPRを紐づけられるので頑張れば相関が見れる
claudeがPR作ってからの修正や手戻りが多いPR(とそのissue)を拾う

  • 実感としてAI可読性が低いと思われるファイル(なんかこのモデル周りだと出力精度落ちるなーとか)があるが確信がもてない

理屈としてはこれもPRから追ってどうにか出来るか難しい

まとめ

  • 完璧ではないが結構使える、収集に手間がないのが良い
  • 新しいモデルの登場で解析結果が無意味になる、みたいな事はありそうだけど、AI駆動のデータをどう解析するのかみたいな方法論は数年は役に立つかも

Discussion