2011/09/16 CentOS5.5





送信元ごとにログを分けて保存する

※これは古いコンテンツです。新しくログサーバを構築するなら
 「送信元IP別に振り分けてログを保存するシスログサーバを参照してください。

ここではrsyslogを送信元ごとに別々のログファイルへ振り分ける設定をしています。
条件判断については別項「rsyslogで条件式を設定する」を参照してください。

rsyslog.confの例
受け取ったsyslogを機器別に自動保存する

rsyslog.confの例(デフォルトのコメントアウト部は省いてあります)
#$ModLoad immark   # provides --MARK-- message capability
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imklog   # kernel logging (formerly provided by rklogd)

$template customformat,"%timegenerated% %HOSTNAME% %syslogtag%%msg%\n"
$template logFileName,"/var/log/syslog/%fromhost%/messages_%fromhost%_%$year%%$month%%$day%.log"
$template mailFileName,"/var/log/syslog/%fromhost%/mail_%fromhost%_%$year%%$month%%$day%.log"

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
#*.info;mail.none;authpriv.none;cron.none                -/var/log/messages
*.info;mail.none;authpriv.none;cron.none                -?logFileName;customformat
*.info;mail.none;authpriv.none;cron.none                @remoteserver

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
#mail.*                                                  -/var/log/maillog
mail.*                                                  -?mailFileName;customformat

$ModLoad ommail

$ActionMailSMTPServer mailserver.address
$ActionMailFrom admin@example.local
$template mailsubject,"Syslog Warning"
$template mailbody,"%fromhost%\r\n%msg%"
$ActionMailSubject mailsubject
$ActionExecOnlyOnceEveryInterval  -1

$ActionMailTo admin-ml@example.local
if $fromhost-ip == '192.168.1.100' and $msg contains 'System Warning' then :ommail:;mailbody

$ActionMailTo admin-ml@example.local
if $fromhost-ip != '127.0.0.1' and $msg contains 'authenticated failure' and $syslogfacility-text == 'daemon' then :ommail:;mailbody

$ActionMailTo administrator@example.local
if $fromhost-ip =='192.168.1.254' and $syslogfacility-text == 'syslog' and $syslogseverity-text == 'crit' then :ommail:;mailbody

# Log cron stuff
cron.*                                                  -/var/log/cron

# Everybody gets emergency messages
*.emerg                                                 *

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          -/var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log

# UDP Syslog Server:
$ModLoad imudp.so  # provides UDP syslog reception
$UDPServerRun 514 # start a UDP syslog server at standard port 514




受け取ったsyslogを機器別に自動保存する

 多数の機器から集約したsyslogを一つのファイルに延々書き込むのは閲覧の点からも現実的ではありません。
 rsyslogでならホスト名、日付別にファイル・ディレクトリをダイナミックに振り分け保存できます。
 しかも自動でディレクトリまで作ってくれるため、機器の変更追加のたびに設定変更する必要がありません。
 機器の数が増えてくると、この機能はかなり重要です。

rsyslog.conf

$template logFileName,"/var/log/syslog/%fromhost%/message_%fromhost%_%$year%%$month%%$day%.log"
$template mailFileName,"/var/log/syslog/%fromhost%/mail_%fromhost%_%$year%%$month%%$day%.log"

#*.info;mail.none;authpriv.none;cron.none                /var/log/messages
*.info;mail.none;authpriv.none;cron.none                -?logFileName

#mail.*                                                  -/var/log/maillog
mail.*                                                  -?
mailFileName


まずテンプレートでログの出力名を定義します。
ここでは「/var/log/syslog/送信元ホスト名/message_送信元ホスト名_年月日.log」名で保存します。

そして/var/log/syslogディレクトリを作成しておきます。
送信元ホスト名ディレクトリは、自動で生成されます。


もちろん、ローカルを含めて各サーバ別のログを/var/log/syslog以下に保存するのですから、messagesのログはコメントアウトして良いでしょう。

ここでテーマになるのが、ホスト名や日付を呼び出すプロパティ名です。
本家にプロパティ名の説明があるので参考になります。

%fromhost%
送信元IPを逆引きして得られたホスト名。DNSやhostsで解決できなければIPアドレスになります。

%hostname%
ログを出力したホスト名、つまりsyslogの中に「出力者」として記述してあるホスト名です。
通常はログを送信したシステムのホスト名と同一です。
しかしログ出力しているサーバがマルチホームネットワークであったりsyslogサーバの参照しているDNSによっては、ログ本文中に記述してあるホスト名とsyslogサーバが認識できるリモートホスト名が同一であるとは限りません。

%fromhost-ip%
ログの送信元IPです。ローカルログの場合は127.0.0.1が使用されます。
これをチェックすればローカルログかリモートログかが判別できます。

ホスト名のネットワークが複雑である。NW機器など、サーバ以外のものが多くあるときは、いっそ割り切ってIPアドレスに統一する手もあるでしょう。

特にsyslogfacility-text(ファシリティ名)やprogramname(ログを出力したプログラム)は複雑な条件のときに使用することがあります。


動作チェックをします。
適当な機器からログを送信します。自分自身のログも正常に格納されるかもテストが必要です。

#logger -p daemon.crit "System Warning"






prev.gif