rsyslogでNW機器のログ集約

NW機器のログはsyslogサーバに集約してWEBで見れるようにしてます
理由はこのへんです。

  • いちいちログインして見るのがダルい
  • 障害時にログインして確認しようにも入れないことが多い(だってNW機器ですもん)
  • 仕方ないので再起動するとログ消えちゃう

見ためはこんな感じ(サンプル

サーバ一覧

日付ごとのログ一覧

ログの中身


ずっとsyslog-ng派だったのですが、時代の流れに逆らえずrsyslogを使ってみたので手順をメモっておきます。
環境はCentOS6 & rsyslog5.8です。

手順

/etc/rsyslog.confを編集
# モジュール読み込み。UDP追加
$ModLoad imuxsock
$ModLoad imklog
$ModLoad imudp

# Apacheユーザで読めるようにパーミッション設定
$umask 0000
$DirCreateMode 0755
$FileCreateMode 0644

# ログのフォーマット、パス定義
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$template RemoteLog, "/var/log/remote/%hostname:::secpath-replace%/%hostname:::secpath-replace%_%$year%%$month%%$day%.log" 

# ローカルログ用のルール設定
$RuleSet local
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
authpriv.*                                              /var/log/secure
mail.*                                                  -/var/log/maillog
cron.*                                                  /var/log/cron
*.emerg                                                 *
uucp,news.crit                                          /var/log/spooler
local7.*                                                /var/log/boot.log

# リモートsyslog用のルール設定
$RuleSet remote
*.* ?RemoteLog

$DefaultRuleset local

# リモートsyslogの受信設定
$AllowedSender UDP, 127.0.0.0/8, 192.168.0.0/16
$InputUDPServerBindRuleset remote
$UDPServerRun 514
rsyslog再起動
# /etc/init.d/rsyslog restart
Apache設定
# yum install httpd
# vi /etc/httpd/conf.d/remote_log.conf 
Alias /remote_log/ /var/log/remote/
<Directory /var/log/remote/>
  Order deny,allow
  Deny from all
  Allow from 127.0.0.0/8
  Allow from 192.168.0.0/16
  Options +Indexes
</Directory>
# /etc/init.d/httpd start

という感じでサクッとでけました。


rsyslog使ってみた感想

慣れの問題が大きいと思いますが、ちょっと設定がわかりづらく感じました。
・同じ事をするための書式がいろいろある
・各設定の境目とつながりがよくわからない

syslog-ngで同じことをやろうとするとこんな設定になると思います(最後の3行以外ほぼデフォルト)

options {
        sync (0);
        time_reopen (10);
        log_fifo_size (1000);
        long_hostnames (off);
        use_dns (yes);
        use_fqdn (no);
        create_dirs (yes);
        keep_hostname (no);
        stats(86400);
        dir_perm(0755);
        perm(0644);
        owner(root);
        group(root);
};

### syslogdのデフォルト設定設定を引き継ぐ
source s_sys {
        file ("/proc/kmsg" log_prefix("kernel: "));
        unix-stream ("/dev/log");
        internal();
        # udp(ip(0.0.0.0) port(514));
};

destination d_cons { file("/dev/console"); };
destination d_mesg { file("/var/log/messages"); };
destination d_auth { file("/var/log/secure"); };
destination d_mail { file("/var/log/maillog" sync(10)); };
destination d_spol { file("/var/log/spooler"); };
destination d_boot { file("/var/log/boot.log"); };
destination d_cron { file("/var/log/cron"); };
destination d_kern { file("/var/log/kern"); };
destination d_mlal { usertty("*"); };

filter f_kernel     { facility(kern); };
filter f_default    { level(info..emerg) and
                        not (facility(mail)
                        or facility(authpriv)
                        or facility(cron)); };
filter f_auth       { facility(authpriv); };
filter f_mail       { facility(mail); };
filter f_emergency  { level(emerg); };
filter f_news       { facility(uucp) or
                        (facility(news)
                        and level(crit..emerg)); };
filter f_boot   { facility(local7); };
filter f_cron   { facility(cron); };

#log { source(s_sys); filter(f_kernel); destination(d_cons); };
log { source(s_sys); filter(f_kernel); destination(d_kern); };
log { source(s_sys); filter(f_default); destination(d_mesg); };
log { source(s_sys); filter(f_auth); destination(d_auth); };
log { source(s_sys); filter(f_mail); destination(d_mail); };
log { source(s_sys); filter(f_emergency); destination(d_mlal); };
log { source(s_sys); filter(f_news); destination(d_spol); };
log { source(s_sys); filter(f_boot); destination(d_boot); };
log { source(s_sys); filter(f_cron); destination(d_cron); };


### リモートsyslog集約用設定
source s_remote { udp(ip(0.0.0.0) port(514)); };
destination d_remote { file("/var/log/remote/$HOST/$HOST.$YEAR$MONTH$DAY"); };
log { source(s_remote); destination(d_remote); };

syslog-ngの『source、destination、filterを定義→logでくっつける』書式のほうが、

  • 一貫性があって
  • 設定の境目やつながりがわかりやすい

と思うのですがどうでしょうか。