監査ログ
監査ログ機能は、EMQXクラスターにおける重要な運用変更をリアルタイムで追跡することを可能にします。監査ログを通じて、エンタープライズユーザーは誰がどの重要な操作をどのように、いつ実行したかを簡単に把握できます。これは、エンタープライズユーザーが規制要件に準拠し、運用中のデータセキュリティ監査を確実に行うための重要なツールです。
EMQXの監査ログは、ダッシュボード、REST API、およびCLIからの変更関連操作の記録をサポートしています。例えば、ダッシュボードのユーザーログインやクライアント、アクセス制御、データ統合の変更などです。ただし、メトリクス取得やクライアントリストの照会などの読み取り専用操作は記録されません。
EMQXは、監査ログの管理を支援するためにダッシュボードビューとログシステムとの統合を提供しています。これらの方法を通じて、EMQXは監査ログに対して柔軟かつ包括的なサポートを提供し、エンタープライズユーザーがニーズに応じて最適な監査ログの管理・閲覧方法を選択できるようにしています。
監査ログの有効化
監査ログ機能は、ダッシュボードおよび設定ファイルの両方から有効化および設定パラメータの調整が可能です。
ダッシュボードでの監査ログ有効化
監査ログを有効化し、設定パラメータを変更するには、ダッシュボードの 管理 -> ログ -> 監査ログ、または システム -> 監査ログ に移動します。

監査ログに対して以下のオプションを設定できます:
ログハンドラの有効化:監査ログ処理プロセスの有効化・無効化。デフォルトで有効です。
監査ログファイル名:監査ログファイルのパスと名前を指定します。デフォルト値は
${EMQX_LOG_DIR}/audit.logで、${EMQX_LOG_DIR}は変数であり、デフォルトは./logなので最終的には./log/audit.log.1に保存されます。最大ログファイル数:ローテーションされるログファイルの最大数。デフォルトは
10です。ローテーションサイズ:ログファイルのサイズを設定し、指定サイズに達したらログファイルをローテーションします。無効にするとログファイルは無制限に増加します。テキストボックスに希望の値を入力し、ドロップダウンリストから
MB、GB、KBなどの単位を選択できます。デフォルトは50MBです。キャッシュサイズ:データベースに保存される最大レコード数を決定し、ダッシュボードおよび
/auditAPI からアクセス・取得可能です。デフォルトは5000です。注意
log.audit.max_filter_sizeは後方互換性のためのエイリアスとして残されています。高頻度リクエストの無視:パブリッシュ/サブスクライブやクライアントのキックアウトなどの高頻度リクエストを無視し、監査ログの洪水を防ぐかどうかを制御します。デフォルトで有効です。
タイムスタンプ形式:ログエントリ内のタイムスタンプの形式。選択肢は以下の通りです:
auto:ログフォーマッターに基づいて最適な形式を自動選択(JSONはepoch、テキストはrfc3339)。epoch:マイクロ秒単位のUnixエポック時間。rfc3339:RFC3339形式。
時間オフセット:ログエントリのタイムスタンプをフォーマットする際の時間オフセット。選択肢は以下の通りです:
system:ローカルシステムで使用される時間オフセット。utc:UTC時間オフセット。+-[hh]:[mm]:ユーザー指定の時間オフセット(例:"-02:00"、"+00:00")。
デフォルトは
systemです。ペイロードエンコード:ログエントリ内のペイロードデータのエンコード方法。
text、hex、hiddenの選択肢があり、デフォルトはtextです。
設定ファイルでの監査ログ有効化
base.hocon ファイルの log.audit セクションで監査ログを有効化し、設定オプションを変更することも可能です。以下は例です。
log.audit {
path = "./log/audit.log"
rotation_count = 10
rotation_size = 50MB
cache_size = 5000
ignore_high_frequency_request = true
timestamp_format = auto
time_offset = system
payload_encode = text
}ダッシュボードでの監査ログ閲覧
監査ログが有効化されると、ダッシュボードの システム -> 監査ログ から監査ログの内容を閲覧できます。

検索フィルター
以下の検索キーワードを用いてログ操作のフィルタリング・検索が可能です:
- 開始時間 - 終了時間:操作が行われた時間範囲。
- ソースタイプ:操作を実行した方法。選択肢は
Dashboard、REST API、CLI、Erlang Console。ここでErlang Consoleは通常、EMQによるオンサイト技術サポート時に使用されるErlang Shellコンソールを指します。 - オペレーター:ダッシュボードのユーザー名またはREST API呼び出しに使用されたキー名。操作方法がダッシュボードまたはREST APIの場合のみ有効です。
- IP:ダッシュボードユーザーまたはREST APIを呼び出したクライアントの送信元IP。操作方法がダッシュボードまたはREST APIの場合のみ表示されます。
- 操作名:監査ログでサポートされている操作名のドロップダウンリストから選択。
- 操作結果:
成功または失敗のドロップダウンリストから選択。
リストの説明
表示される監査ログリストの各列の説明は以下の通りです:
- 操作時間:操作が行われた時間。
- 情報:
- ダッシュボードまたはREST APIの場合、この列は操作名を表示します。
- CLIおよびコンソールの場合、この列は実行されたコマンドを記録します。
- オペレーター:操作方法と対応するオペレーターを含みます。CLIおよびコンソール操作の場合、オペレーターはコマンドが実行されたEMQXノードの名前です。
- IP:ダッシュボードユーザーまたはREST APIを呼び出したクライアントの送信元IP。操作方法がダッシュボードまたはREST APIの場合のみ表示されます。
- 操作結果:
成功または失敗。失敗にはフォーム検証エラーやリソース削除不能などのケースが含まれます。ダッシュボードおよびREST API操作のみ表示され、CLIおよびコンソールでは操作結果を記録できません。
ログファイルでの監査ログ閲覧
監査ログがEMQXで有効化されると、変更関連操作は ./log/audit.log.1 ファイルにログ形式で保存されます。エンタープライズユーザーは監査記録の詳細な分析を容易に行え、既存のログ管理システムに統合してコンプライアンスやデータセキュリティ要件を満たすことが可能です。
注意
コマンドライン操作の監査ログには機密情報が含まれる場合があるため、ログコレクターへ送信する際は注意が必要です。ログ内容のフィルタリングや暗号化伝送の利用により、不正な情報漏洩を防ぐことを推奨します。
監査ログに含まれるフィールドは、操作記録のソースによって異なります。
ダッシュボードまたはREST APIからの操作記録
ダッシュボードまたはREST APIの操作を記録する監査ログには、操作ユーザー、操作対象、操作結果の情報が含まれます。ログメッセージのフォーマット例は以下の通りです。
{"time":1702604675872987,"level":"info","source_ip":"127.0.0.1","operation_type":"mqtt","operation_result":"success","http_status_code":204,"http_method":"delete","operation_id":"/mqtt/retainer/message/:topic","duration_ms":4,"auth_type":"jwt_token","query_string":{},"from":"dashboard","source":"admin","node":"emqx@127.0.0.1","http_request":{"method":"delete","headers":{"user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36","sec-fetch-site":"same-origin","sec-fetch-mode":"cors","sec-fetch-dest":"empty","sec-ch-ua-platform":"\"macOS\"","sec-ch-ua-mobile":"?0","sec-ch-ua":"\"Google Chrome\";v=\"119\", \"Chromium\";v=\"119\", \"Not?A_Brand\";v=\"24\"","referer":"http://localhost:18083/","origin":"http://localhost:18083","host":"localhost:18083","connection":"keep-alive","authorization":"******","accept-language":"zh-CN,zh;q=0.9,zh-TW;q=0.8,en;q=0.7","accept-encoding":"gzip, deflate, br","accept":"*/*"},"body":{},"bindings":{"topic":"$SYS/brokers/emqx@127.0.0.1/version"}}}上記ログメッセージサンプルに含まれるフィールドは以下の通りです。
| フィールド名 | 型 | 説明 |
|---|---|---|
| time | 整数 | ログ記録の時間をマイクロ秒単位で表したタイムスタンプ。 |
| level | 文字列 | ログレベル。 |
| source_ip | 文字列 | 操作の送信元IPアドレス。 |
| operation_type | 文字列 | 操作の機能モジュール。REST APIのタグに対応。 |
| operation_result | 文字列 | 操作結果。success または failure で成功・失敗を示す。 |
| http_status_code | 文字列 | HTTPレスポンスのステータスコード。 |
| http_method | 文字列 | HTTPリクエストメソッド。 |
| duration_ms | 整数 | 操作実行時間(ミリ秒単位)。 |
| auth_type | 文字列 | 認証タイプ。認証に使用された方法や仕組みを示し、jwt_token(ダッシュボード)または api_key(REST API)で固定。 |
| query_string | オブジェクト | HTTPリクエストのURLクエリパラメータ。 |
| from | 文字列 | リクエストの送信元。dashboard、rest_api はそれぞれダッシュボード、REST APIを示す。cli、erlang_console の場合はCLIまたはErlang Shellからの操作であり、このログ構造は適用されない。 |
| source | 文字列 | 操作を行ったダッシュボードのユーザー名またはAPIキー名。 |
| node | 文字列 | 操作が実行されたノード名またはサーバー名。 |
| method | 文字列 | HTTPリクエストメソッド。post、put、delete はそれぞれ作成、更新、削除操作に対応。 |
| operate_id | 文字列 | リクエストのREST APIパス。詳細はREST APIを参照。 |
CLIまたはErlangコンソールからの操作記録
CLIまたはErlangコンソールの操作を記録する監査ログには、実行されたコマンド、呼び出しパラメータなどの情報が含まれます。ログメッセージのフォーマット例は以下の通りです。
{"time":1695866030977555,"level":"info","msg":"from_cli","from": "cli","node":"emqx@127.0.0.1","duration_ms":0,"cmd":"retainer","args":["clean", "t/1"]}上記ログメッセージサンプルに含まれるフィールドは以下の通りです。
| フィールド名 | 型 | 説明 |
|---|---|---|
| time | 整数 | ログ記録の時間をマイクロ秒単位で示すタイムスタンプ。 |
| level | 文字列 | ログレベル。 |
| msg | 文字列 | 操作の説明。 |
| from | 文字列 | リクエストの送信元。cli、erlang_console はそれぞれCLI、Erlang Shellを示す。dashboard、rest_api の場合はダッシュボードまたはREST APIからの操作であり、このログ構造は適用されない。 |
| node | 文字列 | 操作が実行されたノード名またはサーバー名。 |
| duration_ms | 整数 | 操作の実行時間(ミリ秒単位)。 |
| cmd | 文字列 | 実行された具体的なコマンド操作。対応コマンドはCLIを参照。 |
| args | 配列 | コマンドに付随する追加パラメータ。複数パラメータは配列で区切られる。 |