📝

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 は軽量で柔軟。RHEL や CentOS 環境では真っ先に使いたいログ収集ツールです。
Logstash や Fluentd に行く前に、「まずは rsyslog をちゃんと理解しておく」ことで、堅牢なログ基盤が作れます。

気軽に試して、サーバの見える化に役立ててください!

Discussion