syslog-ngのインストールと設定、syslogからの移行

|

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/

# ls syslog-ng.conf

念のため、defaultの設定ファイルは保存しておく。
# 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
#

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.confが文法的に正しいかどうかは  syslog-ng -s [設定ファイル] コマンドで起動前にチェックできる
# 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/message
May  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
という形式のログを記録しているはずなので、そこも確認する。


■ちまちまとした移行処理

○/etc/init.d/syslogはまぎらわしいので隠してしまう
# 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

このブログ記事について

このページは、くわぞうが2006年5月 5日 15:56に書いたブログ記事です。

ひとつ前のブログ記事は「syslog-ng RPMの作成」です。

次のブログ記事は「syslogの仕組み」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.1