20年もの歴史があるらしいsyslogだが、CentOS6ではrsyslogが標準実装されている。
reliable(信頼できる) syslogだそうな。
SYSLOGサーバの設定
ログを受信する範囲を設定。
[root@【SYSLOGサーバ】 ~]# vi /etc/rsyslog.conf # コメント解除 13: $ModLoad imudp 14: $UDPServerRun 514 # その下に下記を追加 15: $AllowedSender UDP, 127.0.0.1, 192.168.0.0/24 # コメント解除 17: $ModLoad imtcp 18: $InputTCPServerRun 514 # その下に下記を追加 19: $AllowedSender TCP, 127.0.0.1, 192.168.0.0/24
これでUDP,TCPのポート514番で自身とローカルネットワークからのログを受信する。
設定を反映する。
[root@【SYSLOGサーバ】 ~]# /etc/init.d/rsyslog restart
SYSLOGクライアントの設定
今回は思い切って全てのログをSYSLOGサーバに送信する。なお、ローカルにも出力する。
[root@【SYSLOGクライアント】 ~]# vi /etc/rsyslog.conf # 35行目に下記を追加 34: #### RULES #### 35: *.* @@【SYSLOGサーバIP】:514 # コメント解除 72: $WorkDirectory /var/lib/rsyslog # where to place spool files 73: $ActionQueueFileName fwdRule1 # unique name prefix for spool files 74: $ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) 75: $ActionQueueSaveOnShutdown on # save messages to disk on shutdown 76: $ActionQueueType LinkedList # run asynchronously 77: $ActionResumeRetryCount -1 # infinite retries if host is down
設定を反映する。
[root@【SYSLOGクライアント】 ~]# /etc/init.d/rsyslog restart
事後確認
クライアントにて人工的にログを生成する。
[root@【SYSLOGクライアント】 ~]# logger -p authpriv.warn "AUTH.WARN"
すると、クライアントとサーバの"/var/log/secure"に以下のログが書き込まれるはずだ。
Jun 15 23:44:33 【SYSLOGクライアント】 ssh: AUTH.WARN
これでSYSLOGサーバでのログ集中管理が実現した。
補足
今回は好みで以下のように管理方法を変えてみる。
[root@【SYSLOGサーバ】 ~]# vi /etc/rsyslog.conf 34: #### RULES #### 35: :fromhost-ip, isequal, "【SYSLOGクライアントIP】" /var/log/【SYSLOGクライアントIP】.log 36: :fromhost-ip, isequal, "【SYSLOGクライアントIP】" ~
行頭の「:」でフィルタ条件の記載を開始。
fromhost-ipはログ送信元のIPアドレスを表し、それが【SYSLOGクライアントIP】に等しければ(isequal)、/var/log/【SYSLOGクライアントIP】.logに書き込む。
ただ、このままではいただけない。というのも、rsyslogは設定ファイルのルールを上から順に読み取って実行していくため、標準の出力先にも同じログが出力されるままになる。
これを防ぐために、直後に同条件で出力先に「~」を指定する。すると以降はフィルタ条件に一致したログの出力が抑止される。
ひとまずの目的は達成。