CentOS6 syslog-ng

スポンサーリンク

●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 ラインプリンタのメッセージ
mail メールサービスのメッセージ
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を組み合わせ、多面的にシスログを収集するといった利用法も可能です。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする