●Syslogの設定
DebianやCentOSではデフォルトでsyslogがインストールされています。設定がシンプルで非常にわかりやすい内容となっておりデフォルトのままで十分機能することが広く利用される要因ともなっています。
設定ファイルは/etc/syslog.confです。以下、デフォルトのsyslog設定です。
# Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console # 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 # The authpriv file has restricted access. authpriv.* /var/log/secure # Log all the mail messages in one place. mail.* -/var/log/maillog # 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 |
ログの種別はファシリティ(facility)とプライオリティ(priority)の組み合わせで指定します。syslogでは以下の表のようにファシリティとプライオリティが決められています。プライオリティは表の下にあるものほどレベルが高く指定したプライオリティより高いレベルのものが出力されます。例えば「warning」を指定した場合、err/crit/alert/emergレベルのログも同時出力されます。
■ファシリティ一覧
ファシリティ | 用途 |
auth | 認証メッセージ |
authpriv | プライベート認証メッセージ |
cron | cronやatなどのクロックデーモンのメッセージ |
daemon | デーモンプログラム一般のメッセージ |
kern | カーネルのメッセージ |
lpr | ラインプリンタのメッセージ |
メールサービスのメッセージ | |
local0からlocal7 | 任意の用途で利用可能 |
security | authと同様(非奨励) |
syslog | syslogdの内部メッセージ |
user | 任意のユーザプロセスメッセージ |
uucp | UUCPを利用したプログラムのメッセージ |
lpr | ラインプリンタのメッセージ |
■プライオリティ一覧
プライオリティ | 用途 |
debug | デバッグレベルメッセージ |
info | 情報メッセージ |
notice | 通知状態 |
warning | 警告状態 |
error | エラー状態 |
crit | 致命的な状態 |
emerg | システムが利用できないような緊急状態 |
主要なプロセスやデーモンについては、あらかじめ表のようにファシリティが指定されていますが、表にないサービスやプロセスでも、ログを受け取る側と出力する側でファシリティを合わせることで、シスログの取得が可能です。
■syslog-ngの導入
syslogは広く普及していますが、以下のような弱点もあります。
・Syslogを細かく分別できない
・ネットワーク経由の転送にUDPを使用し、信頼性に欠ける
・暗号化機能がない
・任意のログの出力先が8箇所までしかない
これらを克服するためにsyslogの代わりにsyslog-ngに置き換えることがしばしばあります。syslog-ngはsyslog new genelation の略で syslog のパワーアップ版のログ管理ツールです。
syslog-ngではユーザの好きなだけログを分割出来ます。また、syslog-ng自体でフィルタリング機能も備えていますのでswatchと同じようなログ監視機能が実現できます
さらに、ネットワークから流れてくるログをバッファしたりプログラムに渡したりと複雑な処理が可能になっています。ログをログサーバに収集している場合、ログサーバのみにsyslog-ngをインストールするだけでも、管理のしやすさは格段に違ってきます。
yumコマンドでインストールできるものかと思っていましたが、searchでも見つからないので直接以下のサイトよりsyslog-ngのrpmパッケージをダウンロードしインストールを行います。
http://www.balabit.com/downloads/files?path=/syslog-ng/open-source-edition/3.0.9/setups/rhel-5-i386
ダウンロードファイルはsyslog-ng-3.0.9-1.rhel5.i386です。
# rpm -Uvh syslog-ng-3.0.9-1.rhel5.i386.rpm warning: syslog-ng-3.0.9-1.rhel5.i386.rpm: Header V4 DSA signature: NOKEY, key ID 2aa28252 Preparing... ########################################### [100%] Shutting down kernel logger: [ OK ] Shutting down system logger: [ OK ] 1:syslog-ng ########################################### [100%] Starting syslog-ng: [ OK ] |
インストール先は/opt/syslog-ngになります。
■syslog-ngの設定
設定ファイルは/opt/syslog-ng/etc/syslog-ng.confになります。デフォルトは以下のようにデフォルトログのみ受け付ける設定です。
@version: 3.0 #Default configuration file for syslog-ng. # # For a description of syslog-ng configuration file directives, please read # the syslog-ng Administrator's guide at: # # http://www.balabit.com/dl/html/syslog-ng-admin-guide_en.html/bk01-toc.html # options { }; ###### # sources source s_local { # message generated by Syslog-NG internal(); # standard Linux log source (this is the default place for the syslog() # function to send logs to) unix-stream("/dev/log"); # messages from the kernel file("/proc/kmsg" program_override("kernel")); }; ###### # destinations destination d_messages { file("/var/log/messages"); }; log { source(s_local); destination(d_messages); }; |
既存のsyslog.confをsyslog-ngように変換するツールが用意されていますが、ソースファイルにのみ提供されているので以下のサイトからソースファイルをダウンロードします。
http://www.balabit.com/downloads/files?path=/syslog-ng/open-source-edition/3.0.9/source
このファイルを展開後、contrib/syslog2ngを利用します。デフォルトで用意されているsyslog-ng.confをリネームし既存のsyslog.confを変換します。
# mv /opt/syslog-ng/etc/syslog-ng.conf /opt/syslog-ng/etc/syslog-ng.conf.old # awk -f /path/to/syslog2ng /etc/syslog.conf > /opt/syslog-ng/etc/syslog-ng.conf |
変換されたsyslog-ng.confは以下のようになります。一部、ふと文字の部分を手動で追加します。また変換直後の状態は少々みにくいので手動で整形もしています。
@version: 3.0 options { dir_perm(0755); perm(0644); chain_hostnames(no); keep_hostname(yes); }; source local { unix-stream("/dev/log"); udp(ip(0.0.0.0) port(514)); internal(); }; # *.info;mail.none;authpriv.none;cron.none /var/log/messages filter f_1 { not facility(cron);}; filter f_2 { level(info..emerg);}; filter f_3 { not facility(mail);}; filter f_4 { not facility(authpriv);}; destination d_1 { file("/var/log/messages" create_dirs(yes));}; log { source(local); filter(f_1); filter(f_2); filter(f_3); filter(f_4); destination(d_1);}; # authpriv.* /var/log/secure filter f_5 { facility(authpriv) and level(debug..emerg);}; destination d_2 { file("/var/log/secure" create_dirs(yes));}; log { source(local); filter(f_5); destination(d_2); }; # mail.* -/var/log/maillog filter f_6 { facility(mail) and level(debug..emerg);}; destination d_3 { usertty("-/var/log/maillog");}; log { source(local); filter(f_6); destination(d_3); }; # cron.* /var/log/cron filter f_7 { facility(cron) and level(debug..emerg);}; destination d_4 { file("/var/log/cron" create_dirs(yes));}; log { source(local); filter(f_7); destination(d_4); }; # *.emerg * filter f_8 { level(emerg);}; destination d_5 { usertty("*");}; log { source(local); filter(f_8); destination(d_5); }; # uucp,news.crit /var/log/spooler filter f_9 { facility(uucp,news) and level(crit..emerg);}; destination d_6 {file("/var/log/spooler" create_dirs(yes));}; log { source(local); filter(f_9); destination(d_6); }; # local7.* /var/log/boot.log filter f_10 { facility(local7) and level(debug..emerg);}; destination d_7 { file("/var/log/boot.log" create_dirs(yes));}; log { source(local); filter(f_10); destination(d_7); }; |
変換されたsyslog-ng.confに対しては構文チェックを実施することが可能です。
# syslog-ng -s |
その後、syslog-ngを再起動します。
# /etc/rc.d/init.d/syslog-ng restart |
source ○○{…}でログの受け取り方法を、filter ○○{…}で対象とするログの分別条件を、destination ○○{…}で出力方法を定義します。定義だけではロギングは行われません。定義された各条件をlog { source(○○); filter(○○); destination(○○); };のように組み立てることで、ロギングが機能します。
なお、定義されたsource/filter/destinationは何度でも使用することができます。同一のsourceに対し異なるfilterを組み合わせ、多面的にシスログを収集するといった利用法も可能です。