📝
Linuxで rsyslog を使ってリモートログを受信・保存する方法
はじめに
RHEL 9.6 でリモートの syslog を受信し、送信元 IP ごとにファイルを分けて保存する環境を構築したい方向けの記事です。
ログ送信元は自社製品を想定していますが、syslog(RFC3164 / RFC5424)準拠であれば汎用的に使えます。
本記事では rsyslog の受信設定・テンプレート構文の意味・動作確認方法までを丁寧に解説します。
1. rsyslog の受信設定
1.1 設定ファイルの追加
以下を /etc/rsyslog.d/remote.conf に記述します。
module(load="imtcp")
input(type="imtcp" port="514")
module(load="imudp")
input(type="imudp" port="514")
1.2 ファイアウォールの設定
firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/udp
firewall-cmd --reload
1.3 SELinux の設定(有効な場合)
setsebool -P rsyslog_network_connect 1
2. ログ保存のテンプレート設定
以下を同じく /etc/rsyslog.d/remote.conf に追記します。
$template RemoteLogs,"/var/log/remote/%FROMHOST%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
テンプレートの意味
| パラメータ | 内容 |
|---|---|
| %FROMHOST% | 送信元のホスト名またはIP |
| %PROGRAMNAME% | syslogのtag(プログラム名) |
| ?RemoteLogs | 上で定義したテンプレート名 |
結果として、以下のようにログが保存されます:
/var/log/remote/192.168.1.101/myapp.log
3. rsyslog の再起動と有効化
systemctl restart rsyslog
systemctl enable rsyslog
4. 動作確認
送信元からログを送信(例:logger)
logger -n <受信サーバIP> -P 514 -d "Test message from logger"
受信サーバ側でログ確認:
ls /var/log/remote/
tail -f /var/log/remote/<送信元IPまたはホスト名>/*.log
5.応用編 受信元IPごとにログをフォルダ分けする
複数の送信元からログを受信する場合、ログを「送信元ごとのディレクトリ構造」で分類しておくと非常に便利です。
rsyslogのテンプレート機能を使えば、これを簡単に実現できます。
設定例:
$template RemoteLogs,"/var/log/remote/%FROMHOST%/%PROGRAMNAME%.log"
*.* ?RemoteLogs
この設定により、ログは次のような形式で保存されます:
/var/log/remote/192.168.1.101/myapp.log
/var/log/remote/192.168.1.102/sshd.log
各パラメータの意味:
-
%FROMHOST%: 送信元ホスト名またはIP(逆引きありの場合は名前になる) -
%PROGRAMNAME%: syslogのtag(アプリ名など)
利点:
- ログが送信元ごとに分かれるため、調査・監査がしやすい
- アプリ単位でもログを管理できる
- ログローテーションや分析処理の自動化もしやすくなる
根拠と参考文献
- rsyslog 公式ドキュメント
https://www.rsyslog.com/doc/ - テンプレート構文
https://www.rsyslog.com/doc/master/configuration/templates.html - RHEL 9 の rsyslog は systemd, SELinux, firewalld と連携しているが、今回の設定で十分対応可能
おわりに
rsyslog は軽量で柔軟。RHEL や CentOS 環境では真っ先に使いたいログ収集ツールです。
Logstash や Fluentd に行く前に、「まずは rsyslog をちゃんと理解しておく」ことで、堅牢なログ基盤が作れます。
気軽に試して、サーバの見える化に役立ててください!
Discussion