Claude Code/CoworkのOpenTelemetryログをCloudWatch Logsにコレクター無しに送信してみた

Claude Code/CoworkのOpenTelemetryログをCloudWatch Logsにコレクター無しに送信してみた

OTel CollectorなしにサーバーレスにOTelログをCloudWatch Logsに直接送信
2026.04.17

Claude CodeとClaude Coworkはクライアント端末で実行され、OpenTelemetry(OTel)によるテレメトリデータの送信に対応し、Bearerトークン認証に制約されます。

CloudWatch Logs HTTP Endpoints for OTLPを用い、コレクターを使用せずに、OTelログを低コスト、かつ、サーバーレスにCloudWatch Logsに送信する方法を紹介します。

otel-cloudwatch.drawio

AWSにOTelテレメトリデータを送信したい!

CloudWatchにはOTLP(OpenTelemetry Protocol)を受け付けるエンドポイントがあり、コレクターを介さずにテレメトリデータを直接送信できます。

直近でも、以下のような大きなアップデートがありました

  • 2026/03/16 : OTelログがHTTPをサポート。SigV4認証だけでなく、Bearer Token認証にも対応
  • 2026/04/03 : OTelメトリクスがHTTPをプレビューサポート。OTelの階層的なデータ構造やPromQLのクエリにも対応

本記事で紹介するアプローチは、この3月のアップデートを活かしてコレクターレスにOTelログをBearer Token認証で送信するというものです。

やってみた:AWS側の準備

Claude Code/CoworkからCloudWatch OTLPエンドポイントにOTelログを実際に送信します。

AWS側では以下の2つの対応が必要です

  1. IAMユーザーにCloudWatch Logs向けのAPIキーを発行
  2. CloudWatch LogsのロググループにBearer Token認証を有効化

1. IAMユーザーにCloudWatch Logs向けのAPIキーを発行

IAM ユーザーを作成し、CloudWatch Logsへの書き込み権限を付与します。

このユーザーに対して、Security credentials→API keysからCloudWatch Logs向けのAPIキーを発行します。

iam-otel-api-key

2. CloudWatch LogsのロググループにBearer Token認証を有効化

CloudWatch Logs HTTP Endpoints for OTLP は 2026/04/17 時点で以下のリージョンで利用可能です。

米国東部 (バージニア北部)、米国西部 (北カリフォルニア)、米国西部 (オレゴン)、米国東部 (オハイオ)。特に、東京リージョンでは対応していません。

今回は、米国東部 (バージニア北部)リージョンを利用しました。

CloudWatch Logsのロググループ、及び、ログストリームを作成します。

次に、作成したロググループに対して、Actionsメニューから Bearer Tokenを有効化します。

otel-cw-logs

やってみた:Claude Coworkからの送信

OTel 設定

Claude CoworkのEnterprise/Teamプランでは、OTelの送信先を組織管理画面から設定できます。
セッション開始時に、この設定を取得します。

組織設定→Cowork→モニタリングと移動します。

以下の内容を入力します。

  • OTLP endpoint
    • 例: https://logs.リージョン.amazonaws.com
    • CloudWatch Logs のリージョンごとのエンドポイントです
    • URIパス(/v1/logs)は不要です。
  • OTLP protocol
    • 例: http/protobuf
    • プロトコルを選択します。
  • OTLP headers
    • 例: Authorization=Bearer xxx,x-aws-log-group=/claude/otel,x-aws-log-stream=code
    • 少し注意が必要です。トークンとCloudWatch Logsの情報を「,」区切りで「Key=Value」形式で入力します。
    • Authorization : Bearer <ServiceCredentialSecret> ※ ServiceCredentialSecret はIAMユーザーに発行したAPIキー
    • x-aws-log-group : CloudWatch Logsロググループ名
    • x-aws-log-stream : CloudWatch Logsログストリーム名

参考

ドメイン制御

CoworkからAWSへのAPI通信を許可します。

機能→追加の許可ドメインからOTelテレメトリー送信先の *.amazonaws.com への通信を許可します。

otel-endpoint-host-allow

CloudWatch Logsの確認

ログストリームには、以下のようなOTelログが記録されます。

{
    "resource": {
        "attributes": {
            "host.arch": "arm64",
            "os.type": "darwin",
            "service.name": "cowork",
            "service.version": "1.2581.0"
        }
    },
    "scope": {
        "name": "com.anthropic.claude_code.events"
    },
    "body": "claude_code.user_prompt",
    "attributes": {
        "user.email": "xxx@example.com",
        "prompt": "あなたの名前は?",
        "session.id": "xxxxxx-..."
    }
}

やってみた:Claude Codeからの送信

OTel 設定

Claude Code は設定情報(ポリシー)をクライアント端末で保持し、Claude Code CLI起動時に環境変数経由でOTel設定を渡します。

この設定ファイルは、MDMや組織管理(server-managed-settings)で中央管理することも、ユーザーが個別に設定する(~/.claude/settings.json等)こともできます。

参考

設定例

{
  "env": {
    "CLAUDE_CODE_ENABLE_TELEMETRY": "1",
    "OTEL_LOGS_EXPORTER": "otlp",
    "OTEL_EXPORTER_OTLP_PROTOCOL": "http/protobuf",
    "OTEL_EXPORTER_OTLP_ENDPOINT": "https://logs.リージョン.amazonaws.com",
    "OTEL_EXPORTER_OTLP_HEADERS": "Authorization=Bearer xxx,x-aws-log-group=/claude/otel,x-aws-log-stream=code"
  },
  ...

以下の内容を入力します。

  • CLAUDE_CODE_ENABLE_TELEMETRY
    • 例: 1
    • Claude Code のテレメトリ送信(ログ、メトリクス等)を有効化するためのフラグです。1 で有効になります。
  • OTEL_LOGS_EXPORTER
    • 例: otlp
  • OTEL_EXPORTER_OTLP_PROTOCOL
    • 例: http/protobuf
  • OTEL_EXPORTER_OTLP_ENDPOINT
    • 例: https://logs.リージョン.amazonaws.com
    • 送信先となる AWS CloudWatch Logs のリージョン別エンドポイントです。末尾のパス(/v1/logs)を含めないように注意してください。
  • OTEL_EXPORTER_OTLP_HEADERS
    • 例: Authorization=Bearer xxx,x-aws-log-group=/claude/otel,x-aws-log-stream=code
    • Coworkと同じ仕様です。

CloudWatch Logsの確認

{
    "resource": {
        "attributes": {
            "host.arch": "arm64",
            "os.type": "darwin",
            "service.name": "claude-code",
            "service.version": "2.1.92"
        }
    },
    "scope": {
        "name": "com.anthropic.claude_code.events"
    },
    "body": "claude_code.api_request",
    "attributes": {
        "cost_usd": "0.012381900000000001",
        "model": "claude-haiku-4-5-20251001",
        "input_tokens": "14",
        "output_tokens": "841",
        "cache_read_tokens": "75654",
        "duration_ms": "9390",
        "user.email": "xxx@example.com",
        "session.id": "786b88d7-..."
    }
}

CloudWatch OTLP Endpointの注意事項

リージョン制限

CloudWatch Logs HTTP Endpoints for OTLPのBearer認証は、2026年3月GA時点でUS 4リージョンのみ対応しています。

  • us-east-1 (N. Virginia)
  • us-east-2 (Ohio)
  • us-west-1 (N. California)
  • us-west-2 (Oregon)

東京リージョン(ap-northeast-1)では利用できません。

OTelメトリクスはBearer Token未対応

ログは Bearer Tokenに対応していますが、メトリクスはまだ対応していません。

メトリクス相当のデータが必要な場合、以下の様な対応が考えられます

  • OTelログを集計
  • Admin Analytics APIを利用

料金モデル

CloudWatch Logs OTLPエンドポイントの利用では、通常のCloudWatch Logsと同じく、取り込み(DataProcessing-)、保存(TimeStorage-)課金が適用されます。

クライアント端末向けデバッグ SKILL

以下のようなSKILLをクライアント環境にインストールします。

---
name: printenv-otel
description: 環境変数からOTEL_を含むものをダンプして一覧表示する。/printenv_otel で呼び出す。Claude Code/Cowork環境でOpenTelemetry関連の設定確認に使用。OTel環境変数の確認、OTEL設定の一覧、テレメトリ設定のチェックなどに対応。
---

# printenv_otel

現在のセッションの環境変数から `OTEL_` を含むものを抽出し、一覧表示する。

## 手順

1. Bashツールで `printenv | grep OTEL_` を実行する(大文字小文字を区別する)
2. 結果をマークダウンテーブルで表示する

| 変数名 | 値 |
|--------|-----|
| OTEL_EXPORTER_OTLP_ENDPOINT | http://localhost:4318 |
| OTEL_LOGS_EXPORTER | otlp |

3. `OTEL_` を含む環境変数が1つも見つからなかった場合は「OTEL_ を含む環境変数は設定されていません」と伝える

## 注意

- `printenv` の出力をそのまま使い、値の加工や省略はしない
- 値にトークンやキーが含まれる可能性があるため、マスキングはしないが、ユーザーが共有時に注意するよう一言添える

SKILLを明示的に実行しています

CLAUDE_SHELL > /printenv-otel

⏺ Bash(printenv | grep OTEL_)
  ⎿  OTEL_METRICS_EXPORTER=otlp
     OTEL_LOGS_EXPORTER=otlp
     OTEL_EXPORTER_OTLP_PROTOCOL=http/protobuf
     … +4 lines (ctrl+o to expand)

⏺ ┌─────────────────────────────────┬─────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
  │             変数名              │                                                     値                                                      │
  ├─────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ OTEL_METRICS_EXPORTER           │ otlp                                                                                                        │
  ├─────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ OTEL_LOGS_EXPORTER              │ otlp                                                                                                        │
  ├─────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ OTEL_EXPORTER_OTLP_PROTOCOL     │ http/protobuf                                                                                               │
  ├─────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ OTEL_EXPORTER_OTLP_ENDPOINT     │ https://logs.us-east-1.amazonaws.com                                                                        │
  ├─────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ OTEL_EXPORTER_OTLP_HEADERS      │ Authorization=Bearer XXXX,x-aws-log-group=/claude/otel,x-aws-log-stream=claude                             │
  ├─────────────────────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
  │ OTEL_EXPORTER_OTLP_METRICS_TEMP │ delta                                                                                                       │
  │ ORALITY_PREFERENCE              │                                                                                                             │
  └─────────────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

  OTEL_EXPORTER_OTLP_HEADERS にBearerトークンが含まれています。外部共有時はご注意ください。

最後に

CloudWatch Logs HTTP Endpoints for OTLPを用いて、Claude Code/CoworkのOpenTelemetryログをAWSに送信する方法を紹介しました。

Claude Code/CoworkはBearer Token認証のみ対応しているという制約に対して、ECS等でOTel Collectorを用意したり、Grafanaのような大掛かりなOTelソリューションを用意することなく、シンプルかつ低コストに運用できます。クライアントに対して、AWS CLIなどAWSを意識した追加のセットアップも不要です。

ただし、以下の制限にはご注意ください

  • CloudWatch Logs OTLPエンドポイントは、2026年4月時点でUSリージョンのみ対応。東京リージョンでは利用できない
  • OTelテレメトリーでログはBearer Token対応だが、メトリクスはBearer Token未対応

参考リンク

この記事をシェアする

関連記事