メインコンテンツへスキップ
OpenClaw は公式の diagnostics-otel plugin を通じて、 OTLP/HTTP (protobuf) で診断情報をエクスポートします。ログは、 コンテナおよびサンドボックスのログパイプライン向けに stdout JSONL として 書き込むこともできます。OTLP/HTTP を受け付けるコレクターやバックエンドなら、 コード変更なしで動作します。ローカルファイルログについては ログ記録を参照してください。
  • 診断イベントは、モデル実行、メッセージフロー、セッション、キュー、 exec のために Gateway とバンドル済み plugin が発行する、構造化された プロセス内レコードです。
  • diagnostics-otel はそれらのイベントを購読し、OTLP/HTTP 経由で OpenTelemetry のメトリクストレースログとしてエクスポートし、 ログレコードを stdout JSONL にミラーリングできます。
  • プロバイダー呼び出しは、プロバイダーのトランスポートがカスタムヘッダーを 受け付ける場合、OpenClaw の信頼済みモデル呼び出し span コンテキストから W3C traceparent ヘッダーを受け取ります。Plugin が発行したトレースコンテキストは 伝播されません。
  • エクスポーターは、診断サーフェスと plugin の両方が有効な場合にのみ接続されるため、 デフォルトではプロセス内コストはほぼゼロに保たれます。

クイックスタート

openclaw plugins install clawhub:@openclaw/diagnostics-otel
{
  plugins: {
    allow: ["diagnostics-otel"],
    entries: {
      "diagnostics-otel": { enabled: true },
    },
  },
  diagnostics: {
    enabled: true,
    otel: {
      enabled: true,
      endpoint: "http://otel-collector:4318",
      protocol: "http/protobuf",
      serviceName: "openclaw-gateway",
      traces: true,
      metrics: true,
      logs: true,
      sampleRate: 0.2,
      flushIntervalMs: 60000,
    },
  },
}
または、CLI から plugin を有効化します: openclaw plugins enable diagnostics-otel
protocolhttp/protobuf のみをサポートします。tracesmetrics はデフォルトで有効なため、その他の値(grpc を含む)は unsupported protocol 警告とともに diagnostics-otel サブスクリプション全体を中止します。これにより stdout ログエクスポートも停止します。非 OTLP の protocol 値で logsExporter: "stdout" のみを使いたい場合は、traces: falsemetrics: false を明示的に設定してください。

エクスポートされるシグナル

シグナル含まれる内容
メトリクストークン使用量、コスト、実行時間、フェイルオーバー、skill 使用、メッセージフロー、Talk イベント、キューレーン、セッション状態/リカバリー、ツール実行、exec、メモリ、liveness、エクスポーター健全性のカウンター/ヒストグラム。
トレースモデル使用、モデル呼び出し、ハーネスライフサイクル、skill 使用、ツール実行、exec、webhook/メッセージ処理、コンテキスト組み立て、ツールループの span。
ログdiagnostics.otel.logs が有効な場合に OTLP または stdout JSONL 経由でエクスポートされる、構造化された logging.file レコード。コンテンツキャプチャが明示的に有効化されていない限り、ログ本文は抑制されます。
tracesmetricslogs は個別に切り替えられます。トレースとメトリクスは、 diagnostics.otel.enabled が true の場合、デフォルトでオンになります。ログは デフォルトでオフで、diagnostics.otel.logs が明示的に true の場合にのみ エクスポートされます。ログエクスポートはデフォルトで OTLP です。stdout の JSONL には diagnostics.otel.logsExporterstdout に設定し、両方を使う場合は both に設定します。

設定リファレンス

{
  diagnostics: {
    enabled: true,
    otel: {
      enabled: true,
      endpoint: "http://otel-collector:4318",
      tracesEndpoint: "http://otel-collector:4318/v1/traces",
      metricsEndpoint: "http://otel-collector:4318/v1/metrics",
      logsEndpoint: "http://otel-collector:4318/v1/logs",
      protocol: "http/protobuf", // grpc disables OTLP export
      serviceName: "openclaw-gateway", // unset falls back to OTEL_SERVICE_NAME, then "openclaw"
      headers: { "x-collector-token": "..." },
      traces: true,
      metrics: true,
      logs: true,
      logsExporter: "otlp", // otlp | stdout | both
      sampleRate: 0.2, // root-span sampler, 0.0..1.0
      flushIntervalMs: 60000, // metric export interval (min 1000ms)
      captureContent: {
        enabled: false,
        inputMessages: false,
        outputMessages: false,
        toolInputs: false,
        toolOutputs: false,
        systemPrompt: false,
        toolDefinitions: false,
      },
    },
  },
}

環境変数

変数目的
OTEL_EXPORTER_OTLP_ENDPOINT設定キーが未設定の場合の diagnostics.otel.endpoint のフォールバック。
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT / OTEL_EXPORTER_OTLP_METRICS_ENDPOINT / OTEL_EXPORTER_OTLP_LOGS_ENDPOINT対応する diagnostics.otel.*Endpoint 設定キーが未設定の場合に使用される、シグナル固有のエンドポイントフォールバック。シグナル固有の設定はシグナル固有の環境変数より優先され、シグナル固有の環境変数は共有エンドポイントより優先されます。
OTEL_SERVICE_NAME設定キーが未設定の場合の diagnostics.otel.serviceName のフォールバック。デフォルトのサービス名は openclaw です。
OTEL_EXPORTER_OTLP_PROTOCOLdiagnostics.otel.protocol が未設定の場合のワイヤープロトコルのフォールバック。http/protobuf のみがエクスポートを有効にします。
OTEL_SEMCONV_STABILITY_OPT_IN最新の GenAI 推論 span 形状を発行するには gen_ai_latest_experimental に設定します: {gen_ai.operation.name} {gen_ai.request.model} span 名、CLIENT span 種別、レガシーの gen_ai.system の代わりの gen_ai.provider.name。GenAI メトリクスは常に、境界付けられた低カーディナリティ属性を使用します。
OPENCLAW_OTEL_PRELOADED別のプリロードまたはホストプロセスがすでにグローバル OpenTelemetry SDK を登録している場合に 1 に設定します。その場合 plugin は自身の NodeSDK ライフサイクルをスキップしますが、診断リスナーの接続と traces/metrics/logs の反映は引き続き行います。

プライバシーとコンテンツキャプチャ

生のモデル/ツールコンテンツはデフォルトではエクスポートされません。span は境界付けられた 識別子(channel、provider、model、error category、ハッシュのみの request id、 tool source、tool owner、skill name/source)を持ち、プロンプトテキスト、 応答テキスト、ツール入力、ツール出力、skill ファイルパス、セッションキーは 決して含みません。スコープ付きエージェントセッションキーのように見える値 (たとえば agent: で始まるもの)は、低カーディナリティ属性上では unknown に 置き換えられます。OTLP ログレコードはデフォルトで severity、logger、コード位置、 信頼済みトレースコンテキスト、サニタイズ済み属性を保持します。生のログメッセージ本文は、 diagnostics.otel.captureContent が boolean true の場合にのみエクスポートされます。 細分化された captureContent.* サブキーがログ本文を有効にすることはありません。 Talk メトリクスは、境界付けられたイベントメタデータ(mode、transport、provider、 event type)のみをエクスポートします。transcript、audio payload、session id、 turn id、call id、room id、handoff token は含みません。 外向きのモデルリクエストには、アクティブなモデル呼び出しについて OpenClaw 所有の 診断トレースコンテキストからのみ生成された W3C traceparent ヘッダーが含まれる場合があります。 既存の呼び出し元指定 traceparent ヘッダーは置き換えられるため、plugin や カスタムプロバイダーオプションがクロスサービスのトレース祖先を偽装することはできません。 プロンプト、応答、ツール、または system-prompt テキストについて、コレクターと保持ポリシーが 承認されている場合にのみ、diagnostics.otel.captureContent.*true に設定してください。 各サブキーは独立しています。
  • inputMessages - ユーザープロンプトコンテンツ。
  • outputMessages - モデル応答コンテンツ。
  • toolInputs - ツール引数ペイロード。
  • toolOutputs - ツール結果ペイロード。
  • systemPrompt - 組み立て済み system/developer プロンプト。
  • toolDefinitions - モデルツールの名前、説明、スキーマ。
いずれかのサブキーが有効な場合、そのクラスに限り、モデルとツールの span に 境界付けられ、リダクトされた openclaw.content.* 属性が付与されます。
Boolean の captureContent: true は、inputMessagesoutputMessagestoolInputstoolOutputstoolDefinitions、OTLP ログ本文をまとめて有効にしますが、systemPrompt は有効にしません。組み立て済みシステムプロンプトも必要な場合は、captureContent.systemPrompt: true を明示的に設定してください。
toolInputs/toolOutputs コンテンツは、組み込みエージェントランタイムの ツール実行についてキャプチャされます(completed/error span の openclaw.content.tool_input、completed span の openclaw.content.tool_output)。 外部ハーネスのツール呼び出し(Codex、Claude CLI)は、コンテンツペイロードなしで tool.execution.* span を発行します。キャプチャされたコンテンツは、信頼済みの リスナー専用 channel 上を流れ、公開診断イベントバスに置かれることはありません。

サンプリングとフラッシュ

  • トレース: diagnostics.otel.sampleRate はルートスパンにのみ TraceIdRatioBasedSampler を設定します(0.0 はすべて破棄、1.0 はすべて保持)。未設定の場合は OpenTelemetry SDK のデフォルト(常時オン)を使用します。
  • メトリクス: diagnostics.otel.flushIntervalMs(最小値 1000 にクランプ)。未設定の場合は SDK の定期エクスポートのデフォルトを使用します。
  • ログ: OTLP ログは logging.level(ファイルログレベル)に従い、 コンソール形式ではなく、診断ログレコードのリダクション経路を使用します。大量のログが発生する インストールでは、ローカル サンプリングよりも OTLP コレクター側のサンプリング/フィルタリングを優先してください。プラットフォームがすでに stdout/stderr をログプロセッサーに送っており、OTLP ログ コレクターがない場合は、diagnostics.otel.logsExporter: "stdout" を設定します。Stdout レコードは、1 行につき 1 つの JSON オブジェクトで、tssignalservice.name、重大度、本文、リダクト済み属性、利用可能な場合は信頼済みトレース フィールドを含みます。
  • ファイルログ相関: JSONL ファイルログには、ログ呼び出しが有効な 診断トレースコンテキストを持つ場合、トップレベルの traceIdspanIdparentSpanIdtraceFlags が含まれ、ログプロセッサーがローカルログ行を エクスポート済みスパンと結合できます。
  • リクエスト相関: Gateway HTTP リクエストと WebSocket フレームは 内部リクエストトレーススコープを作成します。その スコープ内のログと診断イベントはデフォルトでリクエストトレースを継承し、一方でエージェント実行とモデル呼び出し スパンは子として作成されるため、プロバイダーの traceparent ヘッダーは同じトレース上に維持されます。
  • モデル呼び出し相関: openclaw.model.call スパンには、デフォルトで安全なプロンプト コンポーネントサイズが含まれ、プロバイダー 結果が使用量を公開している場合は呼び出しごとのトークン属性も含まれます。openclaw.model.usage は、集計コスト、コンテキスト、チャンネルダッシュボード向けの実行レベル 会計スパンのままであり、 発行元ランタイムに信頼済みトレースコンテキストがある場合は同じ診断トレース上に残ります。

エクスポートされるメトリクス

モデル使用量

  • openclaw.tokens(カウンター、属性: openclaw.tokenopenclaw.channelopenclaw.provideropenclaw.modelopenclaw.agent
  • openclaw.cost.usd(カウンター、属性: openclaw.channelopenclaw.provideropenclaw.model
  • openclaw.run.duration_ms(ヒストグラム、属性: openclaw.channelopenclaw.provideropenclaw.model
  • openclaw.context.tokens(ヒストグラム、属性: openclaw.contextopenclaw.channelopenclaw.provideropenclaw.model
  • gen_ai.client.token.usage(ヒストグラム、GenAI セマンティック規約メトリクス、属性: gen_ai.token.type = input/outputgen_ai.provider.namegen_ai.operation.namegen_ai.request.model
  • gen_ai.client.operation.duration(ヒストグラム、秒、GenAI セマンティック規約メトリクス、属性: gen_ai.provider.namegen_ai.operation.namegen_ai.request.model、任意の error.type
  • openclaw.model_call.duration_ms(ヒストグラム、属性: openclaw.provideropenclaw.modelopenclaw.apiopenclaw.transport、分類済みエラーではさらに openclaw.errorCategoryopenclaw.failureKind
  • openclaw.model_call.request_bytes(ヒストグラム、最終モデルリクエストペイロードの UTF-8 バイトサイズ。生ペイロード内容は含まない)
  • openclaw.model_call.response_bytes(ヒストグラム、ストリーミングされたレスポンスチャンクペイロードの UTF-8 バイトサイズ。高頻度のテキスト、thinking、ツール呼び出しデルタは増分の delta バイトのみをカウント。生レスポンス内容は含まない)
  • openclaw.model_call.time_to_first_byte_ms(ヒストグラム、最初のストリーミングレスポンスイベントまでの経過時間)
  • openclaw.model.failover(カウンター、属性: openclaw.provideropenclaw.modelopenclaw.failover.to_provideropenclaw.failover.to_modelopenclaw.failover.reasonopenclaw.failover.suspendedopenclaw.lane
  • openclaw.skill.used(カウンター、属性: openclaw.skill.nameopenclaw.skill.sourceopenclaw.skill.activation、任意の openclaw.agent、任意の openclaw.toolName

メッセージフロー

  • openclaw.webhook.received(カウンター、属性: openclaw.channelopenclaw.webhook
  • openclaw.webhook.error(カウンター、属性: openclaw.channelopenclaw.webhook
  • openclaw.webhook.duration_ms(ヒストグラム、属性: openclaw.channelopenclaw.webhook
  • openclaw.message.queued(カウンター、属性: openclaw.channelopenclaw.source
  • openclaw.message.received(カウンター、属性: openclaw.channelopenclaw.source
  • openclaw.message.dispatch.started(カウンター、属性: openclaw.channelopenclaw.source
  • openclaw.message.dispatch.completed(カウンター、属性: openclaw.channelopenclaw.outcomeopenclaw.reasonopenclaw.source
  • openclaw.message.dispatch.duration_ms(ヒストグラム、属性: openclaw.channelopenclaw.outcomeopenclaw.reasonopenclaw.source
  • openclaw.message.processed(カウンター、属性: openclaw.channelopenclaw.outcome
  • openclaw.message.duration_ms(ヒストグラム、属性: openclaw.channelopenclaw.outcome
  • openclaw.message.delivery.started(カウンター、属性: openclaw.channelopenclaw.delivery.kind
  • openclaw.message.delivery.duration_ms(ヒストグラム、属性: openclaw.channelopenclaw.delivery.kindopenclaw.outcomeopenclaw.errorCategory

Talk

  • openclaw.talk.event(カウンター、属性: openclaw.talk.event_typeopenclaw.talk.modeopenclaw.talk.transportopenclaw.talk.brainopenclaw.talk.provider
  • openclaw.talk.event.duration_ms(ヒストグラム、属性: openclaw.talk.event と同じ。Talk イベントが期間を報告したときに発行)
  • openclaw.talk.audio.bytes(ヒストグラム、属性: openclaw.talk.event と同じ。バイト長を報告する Talk 音声フレームイベントで発行)

キューとセッション

  • openclaw.queue.lane.enqueue(カウンター、属性: openclaw.lane
  • openclaw.queue.lane.dequeue(カウンター、属性: openclaw.lane
  • openclaw.queue.depth(ヒストグラム、属性: openclaw.lane または openclaw.channel=heartbeat
  • openclaw.queue.wait_ms(ヒストグラム、属性: openclaw.lane
  • openclaw.session.state(カウンター、属性: openclaw.stateopenclaw.reason
  • openclaw.session.stuck(カウンター、属性: openclaw.state。復旧可能な古いセッション記録管理に対して発行)
  • openclaw.session.stuck_age_ms(ヒストグラム、属性: openclaw.state。復旧可能な古いセッション記録管理に対して発行)
  • openclaw.session.turn.created(カウンター、属性: openclaw.agentopenclaw.channelopenclaw.trigger
  • openclaw.session.recovery.requested(カウンター、属性: openclaw.stateopenclaw.actionopenclaw.active_work_kindopenclaw.reason
  • openclaw.session.recovery.completed(カウンター、属性: openclaw.stateopenclaw.actionopenclaw.statusopenclaw.active_work_kindopenclaw.reason
  • openclaw.session.recovery.age_ms(ヒストグラム、属性: 対応する recovery カウンターと同じ)
  • openclaw.run.attempt(カウンター、属性: openclaw.attempt

セッション生存性テレメトリ

diagnostics.stuckSessionWarnMs は、セッション 生存性診断における進行なし経過時間のしきい値です。processing セッションは、OpenClaw が返信、ツール、ステータス、ブロック、または ACP ランタイム 進行を観測している間、この しきい値に向けて経過しません。入力中 keepalive は進行としてカウントされないため、無音のモデルや ハーネスも検出できます。 OpenClaw は、まだ観測できる作業に基づいてセッションを分類します。
  • session.long_running: アクティブな埋め込み作業、モデル呼び出し、またはツール呼び出しが まだ進行しています。所有されているモデル呼び出しが diagnostics.stuckSessionWarnMs を超えて無音のままでも、 diagnostics.stuckSessionAbortMs の前には long-running として報告されるため、低速または非ストリーミングのモデルプロバイダーは、 中断を観測できる間は停止した Gateway セッションのようには見えません。
  • session.stalled: アクティブな作業は存在しますが、アクティブな実行が最近の 進行を報告していません。所有されているモデル呼び出しは、diagnostics.stuckSessionAbortMs 以降に session.long_running から session.stalled に切り替わります。所有者のない 古いモデル/ツールアクティビティは、無害な長時間実行作業として扱われません。 停止した埋め込み実行は最初は観測のみのままになり、その後 diagnostics.stuckSessionAbortMs を超えて進行がない場合は中断ドレインされるため、 レーンの後ろにあるキュー済みターンを再開できます。未設定の場合、中断しきい値は、 少なくとも 5 分かつ diagnostics.stuckSessionWarnMs の 3 倍という、より安全な延長ウィンドウにデフォルト設定されます。
  • session.stuck: アクティブな作業のない古いセッション記録管理、または所有者のない古いモデル/ツールアクティビティを持つアイドル状態の キュー済みセッションです。これにより、復旧ゲート通過後すぐに 影響を受けるセッションレーンが解放されます。
復旧は、構造化された session.recovery.requestedsession.recovery.completed イベントを発行します。診断セッション状態は、変更を伴う復旧結果(aborted または released)の後、かつ同じ processing 世代がまだ現在のものである場合にのみ アイドルとしてマークされます。 session.stuck だけが、openclaw.session.stuck カウンター、 openclaw.session.stuck_age_ms ヒストグラム、openclaw.session.stuck スパンを発行します。セッションが変更されない間、繰り返される session.stuck 診断はバックオフするため、ダッシュボードでは Heartbeat の各 tick ではなく、継続的な増加に対してアラートを出すべきです。設定ノブとデフォルトについては、 設定リファレンスを参照してください。 生存性警告は以下も発行します。
  • openclaw.liveness.warning(カウンター、属性: openclaw.liveness.reason
  • openclaw.liveness.event_loop_delay_p99_ms(ヒストグラム、属性: openclaw.liveness.reason
  • openclaw.liveness.event_loop_delay_max_ms(ヒストグラム、属性: openclaw.liveness.reason
  • openclaw.liveness.event_loop_utilization(ヒストグラム、属性: openclaw.liveness.reason
  • openclaw.liveness.cpu_core_ratio(ヒストグラム、属性: openclaw.liveness.reason

ハーネスライフサイクル

  • openclaw.harness.duration_ms(ヒストグラム、属性: openclaw.harness.idopenclaw.harness.pluginopenclaw.outcome、エラー時の openclaw.harness.phase

ツール実行とループ検出

  • openclaw.tool.execution.duration_ms(ヒストグラム、属性: gen_ai.tool.nameopenclaw.toolNameopenclaw.tool.sourceopenclaw.tool.owneropenclaw.tool.params.kind、エラー時の追加属性 openclaw.errorCategory
  • openclaw.tool.execution.blocked(カウンター、属性: gen_ai.tool.nameopenclaw.toolNameopenclaw.tool.sourceopenclaw.tool.owneropenclaw.tool.params.kindopenclaw.deniedReason
  • openclaw.tool.loop(カウンター、属性: openclaw.toolNameopenclaw.loop.levelopenclaw.loop.actionopenclaw.loop.detectoropenclaw.loop.count、任意の openclaw.loop.paired_tool。反復的なツール呼び出しループが検出されたときに発行)

Exec

  • openclaw.exec.duration_ms(ヒストグラム、属性: openclaw.exec.targetopenclaw.exec.modeopenclaw.outcomeopenclaw.failureKind

診断内部(メモリ、ペイロード、エクスポーター健全性)

  • openclaw.payload.large(カウンター、属性: openclaw.payload.surfaceopenclaw.payload.actionopenclaw.channelopenclaw.pluginopenclaw.reason
  • openclaw.payload.large_bytes(ヒストグラム、属性: openclaw.payload.large と同じ)
  • openclaw.memory.rss_bytes / openclaw.memory.heap_used_bytes / openclaw.memory.heap_total_bytes / openclaw.memory.external_bytes / openclaw.memory.array_buffers_bytes(ヒストグラム、属性なし。プロセスメモリサンプル)
  • openclaw.memory.pressure(カウンター、属性: openclaw.memory.levelopenclaw.memory.reason
  • openclaw.diagnostic.async_queue.dropped(カウンター、属性: openclaw.diagnostic.async_queue.drop_class。内部診断キューのバックプレッシャーによるドロップ)
  • openclaw.telemetry.exporter.events(カウンター、属性: openclaw.exporteropenclaw.signalopenclaw.status、任意の openclaw.reason、任意の openclaw.errorCategory。エクスポーターのライフサイクル/障害自己テレメトリ)

エクスポートされるスパン

  • openclaw.model.usage
    • openclaw.channel, openclaw.provider, openclaw.model
    • openclaw.tokens.* (input/output/cache_read/cache_write/total)
    • デフォルトでは gen_ai.system、または最新の GenAI セマンティック規約をオプトインしている場合は gen_ai.provider.name
    • gen_ai.request.model, gen_ai.operation.name, gen_ai.usage.*
  • openclaw.run
    • openclaw.outcome, openclaw.channel, openclaw.provider, openclaw.model, openclaw.errorCategory
  • openclaw.model.call
    • デフォルトでは gen_ai.system、または最新の GenAI セマンティック規約をオプトインしている場合は gen_ai.provider.name
    • gen_ai.request.model, gen_ai.operation.name, openclaw.provider, openclaw.model, openclaw.api, openclaw.transport
    • エラー時は openclaw.errorCategory, error.type、および任意の openclaw.failureKind
    • openclaw.model_call.request_bytes, openclaw.model_call.response_bytes, openclaw.model_call.time_to_first_byte_ms
    • openclaw.model_call.prompt.input_messages_count, openclaw.model_call.prompt.input_messages_chars, openclaw.model_call.prompt.system_prompt_chars, openclaw.model_call.prompt.tool_definitions_count, openclaw.model_call.prompt.tool_definitions_chars, openclaw.model_call.prompt.total_chars (安全なコンポーネントサイズのみ、プロンプト本文は含まない)
    • モデル呼び出し結果がその個別呼び出しのプロバイダー使用量を持つ場合は openclaw.model_call.usage.*gen_ai.usage.*
    • 上流プロバイダーの結果がリクエスト ID を公開する場合は、属性 openclaw.upstreamRequestIdHash (境界付き、ハッシュベース) を持つスパンイベント openclaw.provider.request。生の ID は決してエクスポートされない
    • OTEL_SEMCONV_STABILITY_OPT_IN=gen_ai_latest_experimental では、モデル呼び出しスパンは openclaw.model.call の代わりに、最新の GenAI 推論スパン名 {gen_ai.operation.name} {gen_ai.request.model}CLIENT スパン種別を使用する。
  • openclaw.harness.run
    • openclaw.harness.id, openclaw.harness.plugin, openclaw.outcome, openclaw.provider, openclaw.model, openclaw.channel
    • 完了時: openclaw.harness.result_classification, openclaw.harness.yield_detected, openclaw.harness.items.started, openclaw.harness.items.completed, openclaw.harness.items.active
    • エラー時: openclaw.harness.phase, openclaw.errorCategory, 任意の openclaw.harness.cleanup_failed
  • openclaw.tool.execution
    • gen_ai.tool.name, openclaw.toolName, openclaw.tool.source, 任意の openclaw.tool.owner, openclaw.tool.params.*
    • エラー時は任意の openclaw.errorCategory/openclaw.errorCode、ポリシーまたはサンドボックスで拒否された場合は openclaw.deniedReasonopenclaw.outcome=blocked
  • openclaw.exec
    • openclaw.exec.target, openclaw.exec.mode, openclaw.outcome, openclaw.failureKind, openclaw.exec.command_length, openclaw.exec.exit_code, openclaw.exec.exit_signal, openclaw.exec.timed_out
  • openclaw.webhook.processed
    • openclaw.channel, openclaw.webhook
  • openclaw.webhook.error
    • openclaw.channel, openclaw.webhook, openclaw.error
  • openclaw.message.processed
    • openclaw.channel, openclaw.outcome, openclaw.reason
  • openclaw.message.delivery
    • openclaw.channel, openclaw.delivery.kind, openclaw.outcome, openclaw.errorCategory, openclaw.delivery.result_count
  • openclaw.session.stuck
    • openclaw.state, openclaw.ageMs, openclaw.queueDepth
  • openclaw.context.assembled
    • openclaw.prompt.size, openclaw.history.size, openclaw.context.tokens, openclaw.errorCategory (プロンプト、履歴、レスポンス、セッションキーの内容は含まない)
  • openclaw.tool.loop
    • openclaw.toolName, openclaw.loop.level, openclaw.loop.action, openclaw.loop.detector, openclaw.loop.count, 任意の openclaw.loop.paired_tool (ループメッセージ、パラメーター、ツール出力は含まない)
  • openclaw.memory.pressure
    • openclaw.memory.level, openclaw.memory.reason, openclaw.memory.rss_bytes, openclaw.memory.heap_used_bytes, openclaw.memory.heap_total_bytes, openclaw.memory.external_bytes, openclaw.memory.array_buffers_bytes, 任意の openclaw.memory.threshold_bytes/openclaw.memory.rss_growth_bytes/openclaw.memory.window_ms
コンテンツキャプチャが明示的に有効化されている場合、モデルとツールのスパンには、オプトインした特定のコンテンツクラスについて、境界付きでリダクション済みの openclaw.content.* 属性も含めることができる。

診断イベントカタログ

以下のイベントは、上記のメトリクスとスパンを支える。Plugin は OTLP エクスポートなしでも、これらを直接サブスクライブできる。 モデル使用量
  • model.usage - トークン、コスト、期間、コンテキスト、プロバイダー/モデル/チャンネル、セッション ID。usage はコストとテレメトリー用のプロバイダー/ターンの会計情報であり、context.used は現在のプロンプト/コンテキストのスナップショットである。キャッシュ済み入力やツールループ呼び出しが関係する場合、プロバイダーの usage.total より低くなることがある。
メッセージフロー
  • webhook.received / webhook.processed / webhook.error
  • message.queued / message.processed
  • message.delivery.started / message.delivery.completed / message.delivery.error
キューとセッション
  • queue.lane.enqueue / queue.lane.dequeue
  • session.state / session.long_running / session.stalled / session.stuck
  • run.attempt / run.progress
  • diagnostic.heartbeat (集約カウンター: Webhook/キュー/セッション)
ハーネスライフサイクル
  • harness.run.started / harness.run.completed / harness.run.error - エージェントハーネスの実行ごとのライフサイクル。harnessId、任意の pluginId、プロバイダー/モデル/チャンネル、実行 ID を含む。完了時には durationMsoutcome、任意の resultClassificationyieldDetected、および itemLifecycle カウントが追加される。エラー時には phase (prepare/start/send/resolve/cleanup)、errorCategory、任意の cleanupFailed が追加される。
Exec
  • exec.process.completed - ターミナル結果、期間、ターゲット、モード、終了コード、失敗種別。コマンドテキストと作業ディレクトリは含まれない。
  • exec.approval.followup_suppressed - セッションリバウンド後に古い承認フォローアップが破棄された。approvalIdreason (session_rebound)、phase (direct_delivery または gateway_preflight)、およびディスパッチャーのタイムスタンプを含む。セッションキー、ルート、コマンドテキストは含まれない。

エクスポーターなし

diagnostics-otel を実行せずに、診断イベントを Plugin またはカスタムシンクで利用できる状態にしておく:
{
  diagnostics: { enabled: true },
}
logging.level を上げずに対象を絞ったデバッグ出力を行うには、診断フラグを使用する。フラグは大文字小文字を区別せず、ワイルドカード (telegram.* または *) をサポートする:
{
  diagnostics: { flags: ["telegram.http"] },
}
または、一回限りの環境変数オーバーライドとして:
OPENCLAW_DIAGNOSTICS=telegram.http,telegram.payload openclaw gateway
フラグ出力は標準ログファイル (logging.file) に送られ、引き続き logging.redactSensitive によってリダクションされる。完全なガイド: 診断フラグ

無効化

{
  diagnostics: { otel: { enabled: false } },
}
または、plugins.allow から diagnostics-otel を外すか、openclaw plugins disable diagnostics-otel を実行する。

関連