OSはRedHat9です。
RPMはlibolとsyslog-ngのソースから、RedHat9上でBuildしたRPMを使用します。
■RPMからのインストール
# ls libol-0.3.18-1.i386.rpm readme_RH9 libol-debuginfo-0.3.18-1.i386.rpm syslog-ng-1.6.10-1.i386.rpm libol-devel-0.3.18-1.i386.rpm syslog-ng-debuginfo-1.6.10-1.i386.rpm# rpm -ivh libol-0.3.18-1.i386.rpm Preparing... ########################################### [100%] 1:libol ########################################### [100%]
# rpm -ivh syslog-ng-1.6.10-1.i386.rpm Preparing... ########################################### [100%] 1:syslog-ng ########################################### [100%] Starting syslog-ng: [ OK ]
○ここで、syslog-ngがすぐに起動してしまうので、いったん止めることにする。
# ps aux | grep syslog root 29273 0.0 0.0 1452 240 ? S May04 0:01 syslogd -r -x -m 0 root 32629 0.0 0.3 1820 836 ? S 15:59 0:00 /sbin/syslog-ng root 32641 0.0 0.2 4576 664 pts/0 S 16:00 0:00 grep syslog# /etc/init.d/syslog-ng stop Shutting down syslog-ng: [ OK ]
○OS起動時にsyslog-ngが自動で起動し、syslogdが起動しないようにする。
# chkconfig --list | grep syslog syslog 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ syslog-ng 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ# chkconfig --level 2345 syslog off
# chkconfig --list | grep syslog syslog 0:オフ 1:オフ 2:オフ 3:オフ 4:オフ 5:オフ 6:オフ syslog-ng 0:オフ 1:オフ 2:オン 3:オン 4:オン 5:オン 6:オフ
■RedHatの通常のsyslogと同等の働きをするような設定ファイルを作る。 この場合だと、/etc/syslog-ng/syslog-ng.confが設定ファイルになる。
# cd /etc/syslog-ng/念のため、defaultの設定ファイルは保存しておく。# ls syslog-ng.conf
# cp syslog-ng.conf syslog-ng.conf.default
■syslog-ng.confの編集
○リモートからのsyslogを受け付ける。
# Remote logging
source s_remote {
tcp(ip(0.0.0.0) port(514));
udp(ip(0.0.0.0) port(514));
};
destination d_separatedbyhosts {
file("/var/log/syslog-ng/$HOST/messages" owner("root") group("root") perm(0640) dir_perm(0750) create_dirs(yes));
};
log { source(s_remote); destination(d_separatedbyhosts); };
このままでも動くが、destinationの部分をちょっと工夫をすると
日付ごとにログファイルを自動的に変更できる
destination d_separatedbyhosts {
file("/var/log/syslog-ng/$HOST/$HOST-$YEAR$MONTH$DAY.log");
};
○optionsを設定する
options {
sync (0);
time_reopen (10);
log_fifo_size (1000);
long_hostnames (off);
use_dns (yes);
use_fqdn (no);
create_dirs (yes);
keep_hostname (yes);
stats(86400);
dir_perm(0750);
perm(0640);
owner(root);
group(root);
};
■とりあえず動くsyslog-ng.confはこうなる。
# # configuration file for syslog-ng, customized for remote logging #■設定ファイルのチェック syslog-ng.confが文法的に正しいかどうかは syslog-ng -s [設定ファイル] コマンドで起動前にチェックできるsource s_internal { internal(); }; destination d_syslognglog { file("/var/log/syslog-ng.log"); }; log { source(s_internal); destination(d_syslognglog); };
# Local sources, filters and destinations are commented out # If you want to replace sysklogd simply uncomment the following # parts and disable sysklogd # # Local sources # source s_local { unix-stream ("/dev/log"); pipe ("/proc/kmsg" log_prefix ("kernel:")); }; # # Local filters # filter f_messages { level(info..emerg); }; filter f_secure { facility(authpriv); }; filter f_maillog { facility(mail); }; filter f_cron { facility(cron); }; filter f_emerg { level(emerg); }; filter f_spooler { level(crit..emerg) and facility(uucp, news); }; filter f_local7 { facility(local7); }; # # Local destinations # destination d_messages { file("/var/log/messages"); }; destination d_secure { file("/var/log/secure"); }; destination d_maillog { file("/var/log/maillog"); }; destination d_cron { file("/var/log/cron"); }; destination d_console { usertty("root"); }; destination d_spooler { file("/var/log/spooler"); }; destination d_bootlog { file("/var/log/boot.log"); }; # # Local logs - order DOES matter ! # log { source(s_local); filter(f_emerg); destination(d_console); }; log { source(s_local); filter(f_secure); destination(d_secure); flags(final); }; log { source(s_local); filter(f_maillog); destination(d_maillog); flags(final); }; log { source(s_local); filter(f_cron); destination(d_cron); flags(final); }; log { source(s_local); filter(f_spooler); destination(d_spooler); }; log { source(s_local); filter(f_local7); destination(d_bootlog); }; log { source(s_local); filter(f_messages); destination(d_messages); };
# Remote logging source s_remote { tcp(ip(0.0.0.0) port(514)); udp(ip(0.0.0.0) port(514)); };
destination d_separatedbyhosts { file("/var/log/syslog-ng/$HOST/$HOST-$YEAR$MONTH$DAY.log"); };
log { source(s_remote); destination(d_separatedbyhosts); };
options { sync (0); time_reopen (10); log_fifo_size (1000); long_hostnames (off); use_dns (yes); use_fqdn (no); create_dirs (yes); keep_hostname (yes); stats(86400); dir_perm(0750); perm(0640); owner(root); group(root); };
# syslog-ng -s ./syslog-ng.conf #なにも表示されなかったらOK
■syslogからsyslog-ngへの切り替え
# /etc/init.d/syslog stop カーネルロガーを停止中: [ OK ] システムロガーを停止中: [ OK ]# /etc/init.d/syslog-ng start Starting syslog-ng: [ OK ]
# ps aux | grep syslog root 2405 0.0 0.3 1836 884 ? S 16:34 0:00 /sbin/syslog-ng root 2409 0.0 0.2 4572 660 pts/0 S 16:34 0:00 grep syslog
■syslog-ngの動作をログで確認する。
○/var/log/messageMay 5 16:34:41 localhost kernel: Kernel logging (proc) stopped. May 5 16:34:41 localhost kernel: Kernel log daemon terminating. May 5 16:34:42 localhost 5月 5 16:34:42 syslog: klogd停止 succeeded May 5 16:34:42 localhost exiting on signal 15 5月 5 16:34:49 localhost syslog-ng: syslog-ng起動 succeeded○/var/log/syslog-ng.log
May 5 15:59:47 s_internal@localhost syslog-ng[32629]: syslog-ng version 1.6.10 starting May 5 16:00:26 s_internal@localhost syslog-ng[32629]: syslog-ng version 1.6.10 goingdown May 5 16:34:49 localhost syslog-ng[2405]: syslog-ng version 1.6.10 starting
○上記の設定だと、syslog-ngはsyslogパケットを受け取ったときに
ソースIPアドレスからホスト名を逆引きし、そのホスト名で
/var/log/syslog-ng/[ホスト名]/[ホスト名]-年月日.log
という形式のログを記録しているはずなので、そこも確認する。
■ちまちまとした移行処理
# mv /etc/init.d/syslog /etc/init.d/.syslog○/etc/syslog.confも、もう使わないので隠してしまう
# mv /etc/syslog.conf /etc/.syslog.conf○/etc/logrotate.d/syslogの設定 syslog-ngファイルにいろいろ書き足すのはめんどくさいのでこれは使わない方針で。 むしろsyslogファイルの方をsyslog-ng用に書き換え、そのまま流用する。
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron /var/log/syslog-ng.log {
sharedscripts
postrotate
/etc/rc.d/init.d/syslog-ng reload > /dev/null 2>&1
#/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
○/etc/logrotate.d/syslog-ngは隠してしまう
これをしないと、cron.dailyが動くときにエラーが出る。
# mv /etc/logrotate.d/syslog-ng /etc/logrotate.d/.syslog-ng
