CentOS 7でrsyslogサーバを構築し、クライアントからのログを受け付ける設定をする。

1.基本的な設定

サーバ側の設定

まずはrsyslogサーバとなるホスト上で、以下のように設定ファイル(/etc/rsyslog.conf)の記述を変更する。

/etc/rsyslog.conf
# Provides UDP syslog reception $ModLoad imudp # コメントアウトを解除(UDP) $UDPServerRun 514 # コメントアウトを解除(UDP) # Provides TCP syslog reception $ModLoad imtcp # コメントアウトを解除(TCP) $InputTCPServerRun 514 # コメントアウトを解除(TCP)

送信元を制限する場合は、以下の設定も追記する。
※TCPとUDPを1行で設定はできないので注意(分けて記述する必要がある)。

$AllowedSender UDP, 127.0.0.1, *.example.jp, 192.168.0.0/24 # UDPの場合
$AllowedSender TCP, 127.0.0.1, *.example.jp, 192.168.0.0/24 # TCPの場合

設定ファイル編集後、Firewalldのポートを開放しサービス再起動をする。

firewall-cmd --permanent --add-port=514/tcp
firewall-cmd --permanent --add-port=514/udp
firewall-cmd --reload
systemctl restart rsyslog

クライアント側の設定

次に、クライアント側でログの転送設定をする。
※今回はクライアント側もCentOS 7を用いている。

/etc/rsyslog.conf
# An on-disk queue is created for this action. If the remote host is # down, messages are spooled to disk and sent when it is up again. $ActionQueueFileName fwdRule1 # unique name prefix for spool files コメントアウト解除 $ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible)  コメントアウト解除 $ActionQueueSaveOnShutdown on # save messages to disk on shutdown  コメントアウト解除 $ActionQueueType LinkedList # run asynchronously  コメントアウト解除 $ActionResumeRetryCount -1 # infinite retries if host is down  コメントアウト解除 # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional *.* @Rsyslogサーバのホスト名orIPアドレス:514  # UDPの場合 *.* @@Rsyslogサーバのホスト名orIPアドレス:514 #TCPの場合 # ### end of the forwarding rule ###

設定ファイル編集後、サービスを再起動する。

systemctl restart rsyslog

これで、クライアントのログがrsyslogサーバに転送されるようになる。

2.ログ分け

先ほどまでの設定でクライアントからサーバへログが転送されるようになったが、このままだとサーバ側の「/var/log/messages」に書き込まれてしまう。
rsyslogでは以下のような変数を利用できるので、テンプレート機能と組み合わせて設定してやるといいだろう。

  • %fromhost% … ログのクライアントホスト名
  • %fromhost_ip% … ログのクライアントIPアドレス
  • %$year% … 西暦年
  • %$month% … 西暦月
  • %$day% … 西暦日

以下、設定例(追記)。
※「ClinetMessage」はテンプレート名なので、環境に合わせて任意の名称を付与すること。

クライアントのホスト名ごとに分ける

$template ClinetMessage,"/var/log/rsyslog/%fromhost%/messages.log"
*.*     -?ClinetMessage

さらに日付ごとに分ける

$template ClinetMessage,"/var/log/rsyslog/%fromhost%/%$year%%$month%%$day%_messages.log"
*.*     -?ClinetMessage