Gateway
監査履歴
監査履歴
Gateway は、共有 OpenClaw 状態データベースに、メタデータのみを格納する件数制限付きの監査台帳を保持します。この台帳は、「どのエージェントがいつ実行され、どのように終了したか」、「実行中にどのツールアクションが行われたか」、さらにメッセージ監査が有効な場合は、「受理された受信メッセージがディスパッチに到達したか」や「送信メッセージが最終的な配信状態に到達したか」といった運用上の問いに答えます。
台帳には、識別情報、順序、来歴、アクション、ステータス、および正規化された結果コードが保存されます。プロンプト、メッセージ本文、ツール引数、ツール結果、添付ファイル、ファイル名、URL、コマンド出力、生のエラーテキストは一切保存されません。
レコード種別
監査が有効な場合(デフォルト)、実行イベントとツールイベントは常に記録されます。メッセージのライフサイクルイベントはオプトインであり、デフォルトでは無効です。
| 種別 | アクション | デフォルト |
|---|---|---|
| エージェント実行 | agent.run.started, agent.run.finished |
オン |
| ツールアクション | tool.action.started, tool.action.finished |
オン |
| メッセージ | message.inbound.processed, message.outbound.finished |
オフ |
すべてのレコードには、安定したイベント ID、単調増加する台帳シーケンス、ライフサイクルのタイムスタンプ、アクター、アクション、ステータス、schemaVersion: 1、および redaction: "metadata_only" が含まれます。フィールドの完全なリファレンスとクエリフィルターについては、監査レコードを参照してください。
メッセージのライフサイクルイベント
記録対象を選択するには、audit.messages を設定してから Gateway を再起動します。
off(デフォルト):メッセージレコードを記録しません。direct:ダイレクト会話内のメッセージのみを記録します。all:ダイレクト、グループ、およびチャンネルのメッセージを記録します。
メッセージレコードは、信頼できる次の 2 つの境界で生成されます。
- 受信行は、重複や最終的な処理結果を含め、受理されたメッセージがコアのディスパッチに到達した時点で書き込まれます。
- 送信行は、共有の永続配信が、送信済み、抑止、失敗、またはクラッシュにより送信成否が曖昧な場合の明示的な
unknownのいずれかの最終結果に到達した時点で書き込まれます。キューの復旧およびデッドレターの結果も含まれます。元の論理返信ペイロードごとに最終行が 1 つ生成され、チャンク分割とアダプターのファンアウトはresultCountに集約されます。
会話種別の分類
direct モードはプライバシー境界であるため、送信先の事実によって証明できる場合にのみ、メッセージはダイレクト会話として分類されます。具体的には、送信経路で送信先の会話種別が宣言されている場合、または配信セッションのルートが配信先のチャンネルと相手を正確に指定している場合です。ポリシー状態や送信元の会話など、より弱いシグナルによってメッセージを group と分類し(direct の収集対象から除外し)得る一方で、direct と判定することはできません。ダイレクトであることを証明できないメッセージは unknown に分類され、direct モードでは記録されません。そのため、チャット種別を宣言しないチャンネルでは、all モードよりも direct モードで記録される行が少なくなる場合があります。
プライバシーモデル
メッセージ行には、生のプラットフォーム識別子は一切保存されません。相関付けが可能な場合、アカウント、会話、メッセージ、および送信先の識別子は、インストール環境内に限定された鍵付き仮名
(hmac-sha256:v1:<keyId>:<digest>)としてのみエクスポートされます。
- HMAC 鍵は初回使用時に生成され、識別子の種別ごとにドメイン分離され、台帳と同じ状態データベースに保存されます。
- 仮名は 1 つのインストール環境内で安定しているため、プラットフォーム識別子を明かすことなく、同じ会話に関する行を相関付けできます。
- これは相関付けであり、匿名化ではありません。状態データベースへの読み取りアクセス権を持つ者は鍵にもアクセスできるため、生の識別子候補を仮名と照合できます。RPC および CLI のエクスポートに鍵が含まれることはありません。
- メッセージ行が保持されている状態で鍵素材が欠落または破損した場合、Gateway はフェイルクローズし、新しい鍵へ暗黙にローテーションして相関関係を分断するのではなく、新しいメッセージレコードを破棄します。
実行レコードとツールレコードは、相関付けのために sessionKey と sessionId を保持します。正規のセッションキー自体に、プラットフォームのアカウント ID や相手 ID が含まれる場合があります。メッセージレコードでは、意図的にその両方を省略しています。
監査エクスポートは、内容を含まなくても機密性の高い運用メタデータです。時刻、チャンネル、結果、および安定した仮名によって、アクティビティを相関付けできるためです。エクスポートは、他の運用担当者向けレコードと同等のアクセス制御および保持方法で保護してください。
対象範囲と証明の限界
台帳はベストエフォートであり、意図的に件数が制限されています。実際に発生した事象の証明ではなく、記録された内容の証拠として扱ってください。
- 行が存在しないことは、何も証明しません。 受理前に破棄された受信メッセージ、Gateway レコーダーが稼働していない CLI プロセスからの送信、および共有の永続配信を迂回する Plugin ローカルまたは直接送信の経路は記録されません。
- 書き込みは、件数制限付きのバックグラウンドワーカーを介して行われます。ワーカーの障害またはキューの飽和が発生するとレコードは破棄され、運用上の警告が 1 件ログに記録されます。
- クラッシュによって送信成否が曖昧な送信は、架空の結果ではなく
unknownとして記録されます。
この台帳は、デバッグおよび運用レビューを支援します。損失のないコンプライアンスアーカイブではありません。そのようなアーカイブが必要な場合は、OpenTelemetry またはチャンネルレベルのツールからデータを供給する外部システムを使用してください。
ストレージ、保持、および移行
レコードは共有状態データベース(state/openclaw.sqlite)に保存され、配信のホットパス外で書き込まれます。クエリが 30 日より古いレコードを返すことはなく、台帳の上限は 100,000 行です。期限切れの行は、起動時、1 時間ごとのメンテナンス時、および後続の書き込み時に削除されます。収集が無効な場合でも、保持メンテナンスは継続して実行されます。
以前の実行/ツール専用台帳を備えた Gateway からアップグレードすると、起動時(または openclaw doctor --fix の実行時)にスキーマが自動的に移行されます。既存の行とその台帳シーケンスは保持されます。
クエリ
- CLI:
openclaw audit。エージェント、セッション、実行、種別、ステータス、方向、チャンネル、時間範囲、およびカーソルページングのフィルターを使用できます。 - Gateway RPC:
audit.activity.list(operator.readが必要)は、バージョン管理された V1 アクティビティイベントの共用体を返します。リリース済みのaudit.listRPC は、従来の実行/ツールクライアント向けに変更されていません。Gateway プロトコルを参照してください。