Rsyslog を使用した Pandora FMS 監査ログの集約
概要
本トピックでは、Rsyslog を使用して Pandora FMS のログを転送する方法について説明します。実際にはあらゆるサーバのログに適用可能ですが、ここでは Pandora FMS のログに焦点を当てています。
具体的には、この例では、以下の場所にある Pandora FMS ウェブコンソールの監査ログが対象となります:
/var/www/html/pandora_console/log/audit.log
本番サーバから専用の Rsyslog 受信サーバへの転送において、送信側では imfile (ファイルキュー)を使用し、受信側では imtcp と omfile テンプレートを使用しています。これは、Rocky Linux 9(Rsyslog のバージョンは送信側が 8.2506.0、受信側が 8.2510.0)上で実際にエンドツーエンドの処理を実行した際の結果そのものです。
この ログ に関して、まず最初に行うべきことは、Webコンソール で Pandora FMS の監査ログ書き込みを有効にする ことです。デフォルトでは無効になっています ので、有効にするには以下の手順に従う必要があります。
- 管理(Management) → セットアップ(Settings) → システム設定(System Settings) → 一般設定(General Setup) → セキュリティ(Security) に移動し、監査ログを有効にする(Enable audit log) オプションを有効にします。
- 更新(Update) ボタンをクリックして変更を保存します。
トポロジ
一部のログ収集ツールには、Syslog 経由で待ち受ける専用のコレクターが既に備わっているため、送信側で追加のレシーバーを設定する必要はありません。
この例では、事前に設定されたログ収集ツールを前提とせず、ゼロから設定を行います。
サーバと設定
両サーバとも、Rocky Linux バージョン 9.7 の最小構成(Minimal Install)で設定されています。
Webコンソールサーバには、インストールスクリプトを使用してPandora FMS 環境がインストールされています。
| ホスト | IPアドレス | 役割 |
|---|---|---|
rsyslog-receiver | 10.0.0.1 | Rsyslog レシーバー |
pandora-console | 10.0.0.2 | Rsyslog 送信元 + Pandora FMS Webコンソール |
トランスポート: TCP 10514。Syslog の標準ポートは 514 ですが、この例では、デフォルトのポートが使用できない場合に送信先ポートを変更する方法を示すために 10514 を使用しています。この設定により、クリーンインストール環境でも手順を再現可能になります。本番環境向けに 514 へ変更する場合も、設定を 1行書き換えるだけで済みます。
処理説明
監査ログは、管理操作が行われるたびに PHP コンソールが新しい行を追記していくプレーンテキストファイルです。ここでの目的は、コンソールのコードを改変することなく、新たに追加された各行を別のホストへ送信することです。このパイプラインは、以下の3つのステージで構成されています。
Pandora FMS Console --append--> /var/www/html/pandora_console/log/audit.log
|
| imfile (polling, 10s)
v
rsyslog, pandora-console
(ruleset RemoteAuditFwd)
|
| omfwd / TCP 10514
v
rsyslog, rsyslog-receiver
(ruleset RemoteAudit)
|
v
/var/log/received/pandora-audit.log
主要な設計上の決定事項:
imfileは、アプリケーションが Syslog へ書き出す機能に依存することなく、アプリケーションのログファイルを tail(追跡)するのに最適なツールです。読み取り位置は 状態ファイル に保存されるため、Rsyslog を再起動しても過去のデータが再送信されることはありません。- 送信側では、専用の
ruleset(ここではRemoteAuditFwdとします)を定義することが必須です。もし Rsyslog 設定のルートレベルでomfwdアクションを宣言してしまうと、メインの ruleset 内のすべてのメッセージ、つまり、journal 全体 (CROND、rsyslogd内部メッセージなど)に適用され、受信側のログを「汚染」してしまいます。imfile入力を独自の ruleset に紐付けるのが、監査ログの行だけを送信するための最もクリーンな方法です。 - 受信側でも
ruleset(ここではRemoteAuditとします)を定義し、出力ファイル名(dynaFile)として文字列(string)型の テンプレート を使用します。これにより、単一の予測可能なファイル(この例では/var/log/received/配下)が生成され、受信側のローカル Syslog には影響を与えません。 - UDP ではなく TCP を使用: 監査ログの行は小規模ですが、黙って破棄されるべきではありません。受信側を短時間再起動する場合でも、
action.resumeRetryCount=-1およびqueue.saveonshutdown=onという設定を使用することで、Rsyslog はデータをバッファリングし、再起動後に送信を継続します。
レシーバー: `rsyslog-receiver`
Rsyslog のインストール
Rocky Linux のほとんどのインストール環境では、Rsyslog はデフォルトですでにインストールされています。インストールされていない最小構成(Minimal Install)の場合、インストールするためのコマンドは以下の通りです。
# --- On rsyslog-receiver (10.0.0.1) --- dnf install -y rsyslog
Rsyslog 設定
以下の内容で /etc/rsyslog.d/10-remote-audit.conf を作成します。
- 10-remote-audit.conf
# Receiver: accept audit logs forwarded on TCP port 10514 and # store them in a single file under /var/log/received/. module(load="imtcp") template(name="PandoraAudit" type="string" string="/var/log/received/pandora-audit.log" ) ruleset(name="RemoteAudit") { action(type="omfile" dynaFile="PandoraAudit") } input(type="imtcp" port="10514" ruleset="RemoteAudit")
各ブロックの機能:
module(load=“imtcp”)は、TCP 経由の Syslog 受信機能を有効にします。UDP を使用したい場合はimudpを使用してください(監査データには TCP が推奨されます)。- 文字列(string)型の
templateであるPandoraAuditは、出力ファイルのパスを定義します。 ruleset(“RemoteAudit”)は、dynaFile=を介して単一の書き込み処理をそのファイルに紐付けます(Rsyslog 8.2510 において、なぜここでtemplate=が機能しないのかについては、後述の「既知の問題」を参照してください)。input(type=“imtcp” port=“10514” ruleset=“RemoteAudit”)はリスナーを起動し、受信したメッセージをデフォルトの ruleset ではなく、カスタム ruleset へとルーティングします。
有効化および検証
# --- On rsyslog-receiver (10.0.0.1) --- mkdir -p /var/log/received systemctl enable --now rsyslog ss -ltn | grep 10514
期待される動作: 0.0.0.0:10514 および [::]:10514 での LISTEN 行の表示。本番環境では、受信側のホストにおいて、送信元からの TCP 10514 トラフィックをファイアウォール(または監査トラフィックを通過させるネットワークファイアウォール)で許可する必要があります。
送信側: `pandora-console`
Pandora FMS サーバには、すでに Rsyslog が含まれています(標準のコンソールイメージではデフォルトでインストールされ、有効になっています)。必要な作業は、監査ログ転送の設定を追加することだけです。
転送設定の作成
/etc/rsyslog.d/10-pandora-audit-fwd.conf を作成します:
- 10-pandora-audit-fwd.conf
# Sender: tail the Pandora FMS Console audit log and # forward it to the receiver via TCP port 10514. The dedicated ruleset is # required to ensure that ONLY the audit log is sent, not the entire # system journal. module(load="imfile") ruleset(name="RemoteAuditFwd") { action(type="omfwd" target="10.0.0.1" port="10514" protocol="tcp" action.resumeRetryCount="-1" queue.type="linkedList" queue.filename="pandora_audit_fwd" queue.saveonshutdown="on" ) } input(type="imfile" File="/var/www/html/pandora_console/log/audit.log" Tag="pandora-audit" Severity="info" Facility="local0" ruleset="RemoteAuditFwd" )
パラメータに関する注記:
action.resumeRetryCount=“-1”は、受信側がダウンしている場合に送信側が再試行を無期限に続けるように設定します。これにより、送信側は「ネットワークがダウンした際にデータをバッファリングする」という動作を行うようになります。queue.type=“linkedList”は、キューをメモリ上に保持するシンプルな設定です。監査データの量がディスクキューの使用に適した規模であれば、queue.type=“disk”に変更してください(注意:queue.maxdisksizeは ディスク キューに対してのみ有効です)。Tag=“pandora-audit”を指定することで、受信側や後続のフィルタ(downstream filters)がこのストリームを識別できるようになります。Facility=“local0”を指定することで、標準のファシリティ(authやsyslog)とは区別されます。imfile入力におけるruleset=“RemoteAuditFwd”は重要な設定箇所です。これにより、ファイル末尾の出力(file-tail output)がメインのルールセットをバイパスし、omfwdアクションにのみ渡されるようになります。
設定の検証とサービスの開始
# --- On pandora-console (10.0.0.2) --- rsyslogd -N1 systemctl enable --now rsyslog
rsyslogd -N1 は、1回の読み取りで検証パスを実行します。
期待される最後の行は End of config validation run. Bye. です。それ以外の出力は、設定が読み込まれなかったことを示しており、その場合、サービスは転送ルールを適用せずに動作します。
テストとデバッグ
スモークテスト
# --- On pandora-console (10.0.0.2) --- # 1. Generate an audit-style line in the source file. # 192.0.2.10 is the IP address of the administrator # performing the action (fictitious value). TS=$(date '+%F %T') echo "$TS - admin - Test - 192.0.2.10 - rsyslog forwarding smoke test" \ | sudo tee -a /var/www/html/pandora_console/log/audit.log # 2. Wait for the imfile polling interval (10 seconds by default) sleep 15 # 3. Check the output file on the receiver cat /var/log/received/pandora-audit.log
期待される出力(timestamp とプログラム名は送信側の Rsyslog によって付加され、末尾部分は元の行です):
Jul 2 12:44:52 pandora-console pandora-audit 2026-07-02 12:44:52 - admin - Test - 192.0.2.10 - rsyslog forwarding smoke test
本番環境では、監査ログの行はコンソール自身によって書き込まれるため、コンソールが Rsyslog について何かを「知る」必要はありません。
接続チェック
受信側に何も届かない場合は、まずネットワーク経路を検証してください。
# --- On pandora-console (10.0.0.2) --- bash -c 'echo > /dev/tcp/10.0.0.1/10514' && echo "TCP 10514 alcanzable"
これは nc や ncat を使わずに動作し、ファイアウォールやネットワークの問題を切り分けるための最も迅速な方法です。
Rsyslog ジャーナルの確認
各エンドポイントの Systemd ユニットには、詳細なエラーレポートが含まれています。
# --- On pandora-console (10.0.0.2) --- journalctl -u rsyslog --no-pager -n 50
# --- On rsyslog-receiver (10.0.0.1) --- journalctl -u rsyslog --no-pager -n 50
認識しておくべきパターン:
action 'action-0-builtin:omfwd' suspended (…)に続いてresumedと表示される — 受信側が停止(または再起動)し、送信側が再接続したことを示します。action.resumeRetryCount=-1およびqueue.saveonshutdown=onの設定により、メッセージが失われることはありません。
omfwd: remote server closed connection— 受信側が接続を拒否しています。リスナー(listener)が動作していること、および ルールセット(ruleset)に パース(parsing)エラーがないことを確認してください。
error during parsing file /etc/rsyslog.d/*.conf, on or before line N— 設定を修正し、サービスを再起動する前に再度rsyslogd -N1を実行してください。
よくある問題と解決策
| 症状 | 根本原因 | 解決策 |
|---|---|---|
受信側が空のままで、送信側のログに remote server closed connection と記録される。 | 受信側の設定に 解析 (parsing) エラーがある。リスナー (listener) は動作しているが、メッセージがデフォルトの ルールセット (ruleset) によって破棄されている。 | 受信側で rsyslogd -N1 を実行し、設定を修正する。Rsyslog 8.2510 以降では、omfile 内で template= ではなく dynaFile= を使用する。 |
受信側のファイルは存在するが、監査ログだけでなく CROND や rsyslogd などのログも含まれている。 | 送信側の 設定 (config) のルートレベルで omfwd アクションが宣言されており、メインルールセット (main ruleset) からのすべてのメッセージが転送されている。 | omfwd アクションを専用の ルールセット (ruleset) で囲み、ruleset=“…” を使用して imfile 入力をそのルールセットにリンクさせる。 |
送信側で parameter 'queue.maxdisksize' not known というエラーが出る。 | そのパラメータは queue.type=“disk” の場合にのみ有効であり、linkedList では無効である。 | queue.maxdisksize を削除するか、キューを disk に変更する。 |
/var/lib/rsyslog/imfile-state* を削除した後、過去のデータが転送されない。 | 期待される動作: 状態ファイル (state file) がない場合、imfile はファイルの現在の末尾を起点とし、新しい行のみを送信する。 | 状態ファイル (state file) はそのままにしておく。過去のデータを転送するには、imfile 入力で readMode=“2” を使用する。 |
| 新しい監査ログの行が遅れて到着する。 | imfile はデフォルトで 10 秒ごとに ポーリング (polling) を行う。 | ほぼ リアルタイム (real-time) の処理が必要な場合は、imfile 入力で PollingInterval=“2” を指定してその値を小さくする。 |
| 送信側を再起動した後、最後の数秒間の監査ログが失われる。 | シャットダウン時にメモリキューが破棄されるため。 | queue.saveonshutdown=“on”(Rsyslog ジャーナルの確認 で指定)を設定すると、キューがディスクに保存される(起動時に Rsyslog がそれを処理して空にする)。 |
送信側のアンカー再設定
監査ストリームをゼロから再構築する場合(例えば、受信側が長期間オフラインになり、ローカルの監査ログの処理が遅延してしまった後など)、imfile の状態(state)をリセットし、対象のファイルが想定されるパスに存在することを確認してください。
# --- On pandora-console (10.0.0.2) --- # Locate the state file (its name contains a colon; enclose it in quotation marks) ls -la /var/lib/rsyslog/ | grep imfile-state # Erase it rm -f /var/lib/rsyslog/imfile-state:* # Restar service systemctl restart rsyslog
再起動後、送信側は再起動以降に書き込まれた行のみを送信します。現在の audit.log の冒頭からすべてを転送するには、imfile 入力に readMode=“2” を追加し、Rsyslog を再度再起動します。
作業確認リスト
- □ 送信元から受信側へ
TCP 10514で接続可能である。 - □ 両端で
rsyslogd -N1を実行し、設定に問題がないことを確認済みである。 - □ 受信側で
ss -ltn | grep 10514を実行すると、LISTEN状態であることが確認できる。 - □
audit.logに追加したテスト行が、ポーリング間隔以内に/var/log/received/pandora-audit.logへ反映される。 - □ 受信側のログファイルには、
pandora-auditタグが付いた行のみが含まれている(CRONDやrsyslogdなどの行は含まれない)。 - □ 再起動後も転送が継続されるよう、両ホストで
systemctl enable rsyslogが実行されている。