はじめに
OpenClaw サービスのユーザーが増え、チームコラボレーションが深まるにつれ、以下のことを明確に把握する必要があります。誰がいつ、どのチャンネルを通じて、どのような操作を行ったか?設定は誰が変更したか?機密性の高いコマンドは誰が実行したか?監査ログ(Audit Log)はこれらの疑問に答える重要なツールです。本記事では、OpenClaw の監査ログの設定と使用方法を包括的に解説します。
一、監査ログとは
監査ログは運用ログとは異なります。運用ログはシステムの技術的な状態(エラー、パフォーマンス、接続)を記録しますが、監査ログはユーザーと管理者の操作行動を記録し、**「誰が(Who)いつ(When)何を(What)行ったか」**という核心的な問いに答えます。
1.1 監査ログが記録するイベントタイプ
| カテゴリ | イベント例 |
|---|---|
| メッセージ操作 | ユーザーのメッセージ送信、AI の応答送信 |
| 設定変更 | モデル設定の変更、チャンネルの追加、API キーの更新 |
| 管理操作 | サービスの起動/停止、再起動、アップグレード |
| セキュリティイベント | Dashboard へのログイン、認証失敗、ユーザーのブロック |
| チャンネル操作 | チャンネルの接続/切断、追加/削除 |
| スキル操作 | スキルのインストール/アンインストール、スキルの実行記録 |
二、監査ログの有効化
2.1 基本設定
// ~/.config/openclaw/openclaw.json5
{
"audit": {
"enabled": true,
// 監査ログの保存パス
"logDir": "~/.openclaw/audit/",
// ログ形式
"format": "json",
// 記録レベル:minimal / standard / verbose
"level": "standard",
// 保持日数
"retention": 90
}
}
2.2 記録レベルの説明
| レベル | 記録内容 | ディスク使用量 | 適用シナリオ |
|---|---|---|---|
minimal |
設定変更と管理操作のみ | 極めて少ない | 個人利用 |
standard |
設定変更 + メッセージ送受信の概要 + セキュリティイベント | 中程度 | チーム利用 |
verbose |
すべてのイベント、メッセージ内容の概要を含む | 多め | コンプライアンス要件が厳しいシナリオ |
2.3 選択的な記録
どのイベントを記録するかを細かく制御できます。
{
"audit": {
"enabled": true,
"events": {
// メッセージ操作
"message.received": true,
"message.sent": true,
"message.failed": true,
// 設定変更
"config.changed": true,
"config.apiKeyRotated": true,
// 管理操作
"service.started": true,
"service.stopped": true,
"service.restarted": true,
// セキュリティイベント
"auth.login": true,
"auth.failed": true,
"user.banned": true,
"user.unbanned": true,
// チャンネル操作
"channel.connected": true,
"channel.disconnected": true,
"channel.added": true,
"channel.removed": true,
// スキル操作
"skill.installed": true,
"skill.executed": true
}
}
}
三、監査ログの形式
3.1 JSON ログ構造
各監査レコードには以下の標準フィールドが含まれます。
{
"id": "audit_20260314_001",
"timestamp": "2026-03-14T09:15:32.456Z",
"event": "message.received",
"actor": {
"type": "user",
"id": "telegram:123456789",
"name": "田中太郎"
},
"target": {
"type": "channel",
"id": "telegram",
"name": "Telegram Bot"
},
"action": "send_message",
"details": {
"messageId": "msg_abc123",
"messageType": "text",
"length": 42
},
"result": "success",
"ip": null,
"userAgent": null
}
3.2 設定変更の監査レコード
{
"id": "audit_20260314_002",
"timestamp": "2026-03-14T10:30:00.000Z",
"event": "config.changed",
"actor": {
"type": "admin",
"id": "dashboard:admin",
"ip": "192.168.1.100"
},
"action": "update_config",
"details": {
"path": "model.model",
"oldValue": "claude-3-5-haiku",
"newValue": "claude-3.5-sonnet",
"method": "dashboard"
},
"result": "success"
}
3.3 セキュリティイベントの監査レコード
{
"id": "audit_20260314_003",
"timestamp": "2026-03-14T11:00:00.000Z",
"event": "auth.failed",
"actor": {
"type": "unknown",
"ip": "203.0.113.50"
},
"action": "dashboard_login",
"details": {
"reason": "invalid_password",
"attemptCount": 3
},
"result": "failure"
}
四、監査ログの照会
4.1 openclaw audit コマンドの使用
# 最近の監査ログを確認
openclaw audit log
# イベントタイプでフィルタリング
openclaw audit log --event config.changed
openclaw audit log --event auth.failed
# 時間範囲でフィルタリング
openclaw audit log --since "2026-03-14 09:00" --until "2026-03-14 18:00"
# 操作者でフィルタリング
openclaw audit log --actor "telegram:123456789"
openclaw audit log --actor "dashboard:admin"
# 結果でフィルタリング
openclaw audit log --result failure
# 組み合わせフィルタリング
openclaw audit log --event config.changed --since 7d --format table
4.2 テーブル形式の出力
openclaw audit log --since today --format table
┌──────────────────────┬──────────────────┬──────────────────┬─────────┐
│ 時刻 │ イベント │ 操作者 │ 結果 │
├──────────────────────┼──────────────────┼──────────────────┼─────────┤
│ 2026-03-14 09:15:32 │ message.received │ telegram:123456 │ success │
│ 2026-03-14 09:15:34 │ message.sent │ system │ success │
│ 2026-03-14 10:30:00 │ config.changed │ dashboard:admin │ success │
│ 2026-03-14 11:00:00 │ auth.failed │ 203.0.113.50 │ failure │
│ 2026-03-14 14:20:15 │ skill.installed │ dashboard:admin │ success │
└──────────────────────┴──────────────────┴──────────────────┴─────────┘
4.3 統計分析
# 本日の操作統計
openclaw audit stats --since today
# 出力
# 本日の監査統計 (2026-03-14)
# ─────────────────────────
# メッセージ送受信: 342 回
# 設定変更: 2 回
# ログイン成功: 3 回
# ログイン失敗: 1 回
# スキル実行: 85 回
# アクティブユーザー: 28
# 最もアクティブ: telegram:123456 (52件のメッセージ)
# ユーザー別メッセージ量統計
openclaw audit stats --group-by actor --since 7d
# 時間帯別メッセージ分布
openclaw audit stats --group-by hour --since today
五、Dashboard での監査ログ閲覧
5.1 監査ログパネル
OpenClaw Web Dashboard はビジュアルな監査ログ閲覧インターフェースを提供しています。
- Dashboard を開く(
http://localhost:18789/dashboard) 2.「監査ログ」ページに移動 - フィルター機能で時間、イベントタイプ、操作者を指定して絞り込み
- CSV/JSON 形式でのエクスポートに対応
5.2 リアルタイムイベントストリーム
Dashboard ではリアルタイムでイベントストリームを確認できます。
● [09:15:32] 田中太郎 が Telegram 経由でメッセージ送信
● [09:15:34] AI が 田中太郎 に応答 (1.7s, 285 tokens)
● [10:30:00] 管理者 がモデル設定を変更: haiku → sonnet
● [11:00:00] ⚠ ログイン失敗 送信元 203.0.113.50 (3回目)
六、監査ログの保存とアーカイブ
6.1 ログローテーション
{
"audit": {
"rotation": {
"maxSize": "100MB",
"maxAge": 90, // 90日間保持
"compress": true, // 圧縮アーカイブ
"archiveDir": "~/.openclaw/audit/archive/"
}
}
}
6.2 外部システムへのエクスポート
監査ログを集中型ログ管理プラットフォームに送信します。
{
"audit": {
"export": {
// Syslog へ送信
"syslog": {
"enabled": true,
"host": "syslog.example.com",
"port": 514,
"facility": "auth"
},
// Webhook へ送信(SIEM システムとの連携が可能)
"webhook": {
"enabled": true,
"url": "https://siem.example.com/api/audit",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
},
"batchSize": 100,
"flushInterval": "30s"
}
}
}
}
6.3 定期アーカイブ
# 古い監査ログを手動でアーカイブ
openclaw audit archive --older-than 30d
# 指定期間の監査記録をエクスポート
openclaw audit export --since "2026-01-01" --until "2026-01-31" --output january-audit.json
七、セキュリティとコンプライアンスに関する推奨事項
- 監査ログの改ざん防止:監査ログを独立したストレージシステムに送信し、改ざんや削除を防止
- 保持期間:業界のコンプライアンス要件に応じて保持期間を設定(金融業界では通常少なくとも1年の保持が求められる)
- 機密情報のマスキング:監査ログに完全な API キーやユーザーメッセージの原文を含めない
- アクセス制御:監査ログの閲覧権限を制限し、管理者のみがアクセスできるようにする
- 定期的なレビュー:毎月、セキュリティ関連イベント(ログイン失敗、設定変更、異常な操作パターン)をレビュー
- アラート連携:異常な監査イベント(複数回のログイン失敗など)に対して自動アラートを設定
{
"audit": {
// プライバシー保護:機密フィールドのマスキング
"privacy": {
"maskUserMessages": true, // メッセージ原文を記録しない
"maskApiKeys": true, // API キーは前後数文字のみ表示
"maskPhoneNumbers": true // 電話番号の中間部分を * で置換
}
}
}
監査ログは運用監視体制において不可欠な要素です。問題の根本原因の追跡や操作履歴の遡及だけでなく、セキュリティコンプライアンス要件を満たすための基盤となります。まずは standard レベルから始め、実際のニーズに応じて記録範囲を段階的に調整することをお勧めします。