絶対にわかるシスログ入門

シスログは基本的にはOSのログを書き込むプログラム
シスログとはシステムロガー(System Logger)の略で、Linuxのプログラムが出力するログを受け取って、ログファイルに書き込むプログラムだ。カーネルやOS系のプログラムは自分でログを書き込む機能を持っていないので、システムロガーにログを受け渡して、ログファイルに書き込んでもらう。これがシスログの基本的な機能だ。
syslog_001
カーネルや多くのOSの機能に関わるプログラムはログを書き込む機能を持っていないが、多くの付属的なアプリケーションはログを書き込む機能を持っている。例えば、Webサーバの機能を提供するApache HTTPは自分でログを書き込む機能を持っている。
syslog_002
このようにLinuxのログの出力には、次の2種類がある
1. シスてムロガーにログを書き込んでもらうプログラム(カーネル、OS系プログラム)
2. 自分でログを書き込むプログラム(httpdやインストールしたアプリケーションなど)

ここは意外と重要で初心者は混同しがちだ。基本的には「シスログサーバにログを転送する」だとかいう場合は 1 を指している。

システムロガーはログを分類する
一口にカーネルやOS系プログラムといっても様々なログがある。例えば、mailに関するログやcronに関するログ。これらのログを同じファイルに書いてしまうと、ごちゃごちゃになってしまう。ログは記録するのが目的ではなく、必要なときに必要な情報を見ることができるようにすることが目的なので、システムロガーはログの種類ごとに整理してログを書き込む。また、すべてのログを書き込むとログファイルのサイズが大きくなってしまうので、あまり重要ではないログは書き込まなかったりする。
syslog_003
シスログはどうやってログを分類したり書き込むか書き込まないか判断するのだろうか。ここで出てくる重要ワードがファシリティプライオリティだ。ざっくり説明すると、ファシリティとは「どのプログラムが送ってきたログか」、プライオリティとは「どのくらい重要なログか」を表す。そしてファシリティ、プライオリティからどのログファイルにログを書き込むかを示しているのが、rsyslog.conf だ。下の図を見ながら説明する。

syslog_004

①uucp関連のプログラムはログをシステムロガーに渡す際、uucpというファシリティ情報も一緒に渡す。
②ログを受け取ったシスログはuucpというファシリティ情報と分類表を見てどのログファイルにログを書き込むか確認する。
③該当するファイルにログを書き込む。

ここまで読めばrsyslog.conf の役割がわかったはずだ。今度は具体的にrsyslog.confの内容を見ていくこととする。cat コマンドなどで、/etc/rsyslog.conf を見ると####RULES####という箇所がある。ここにシステムロガーがログを処理するときのルールが書かれている。
syslog_005
見慣れるまではちょっと難しいが、実は簡単だ。基本的な書式は次のようになる。

ファシリティプライオリティ         アクション

繰り返しになるが、ファシリティとは「どのプログラムが送ってきたログか」を表し、プライオリティとは「どのくらい重要なログか」を表す。そしてアクション「受け取ったログをどのファイルに書き込むか」を表す。後述するが他のシスログサーバに転送する場合もアクションで指定する。それではデフォルトのRULEを一つずつ見ていくことにしよう。

① *.info;mail.none;authpriv.none;cron.none   /var/log/messages
実は最初の行が一番複雑なので、一旦スキップして最後に解説する

authpriv.*  /var/log/secure
ファシリテイが ”authpriv” の すべてのプライオリティのログを ”/var/log/secure” に書き込むことを意味している。” * ” はすべてを意味する。

 mail.*      -/var/log/maillog
ファシリテイが “mail”のすべてのプライオリティのログを “/var/log/maillog” に書き込むことを意味している。ファイル名の前の ” – ” はバッファリングをすることを意味している。すぐにログをハードディスクに書き込まずにバッファに溜めてからHDDに書き込む。このようにすることで、DISK への書き込み負荷を減らすことができる。

cron.*       /var/log/cron
ファシリテイが “cron”のすべてのログを “/var/log/cron”に書き込む。

⑤ *.emerg      *
これまでの例と異なりファシリテイが ” * ” になっている。これはすべてのファシリティを表す。さらにアクションも” * ”となっている。これはユーザのコンソールにメッセージを表示するというアクションを意味する。まとめると、「すべてのファシリティでプライオリティがemerg 以上であれば、ユーザのコンソールにメッセージを表示する」という意味である。
※下記はファシリティに “mail” 、プライオリティに ”emerg”を指定して、loggerコマンドでテストログをシスログに送付した例だ。logger コマンドについては後述することになるので、ここでは、コンソールにメッセージが表示されるのはこんな感じと認識していくれれば、それでいい。
syslog_006
uucp,news.crit     /var/log/spooler
ファシリティを複数指定するときはコンマ( , )で区切る。プライオリティがuucp またはnewsでプライオリティがcrit 以上の時は、”/var/log/spooler” にログを書き込むことを意味する。ちなみにcritはクリティカルを意味する。クリ○リスではないので注意したい。

local7.*    /var/log/boot.log
ファシリティが local7のすべてのプライオリティのログは ”/var/log/boot.log” に書き込む。だいぶ書式を理解してきたところで、スキップしていた1行目を見てみよう

① *.info;mail.none;authpriv.none;cron.none   /var/log/messages
まず、「*.info」で、すべてのファシリティでプライオリティが info 以上のログを書き込む書式になっている。その後に例外を指定している。プライオリティを “none” にするとそのログを無視することを意味する。「mail.none;authpriv.none;cron.none」の記述でmail 、authpriv、cron のログは無視するという設定をしている。まとめると、「mail 、authpriv、cron」を除くすべてのファシリテイのプライオリティが ”info” 以上のログは ”/var/log/messages” に書き込む」となる。
rsyslog.confの読み方を理解したところで、ファシリテイとプライオリティがの意味を確認してみよう。主なファシリティとプライオリティは下表のとおりだ。

表1. 主なファシリティ

ファシリテイ ログの内容
authpriv 認証サービスに関するログ
kern カーネルに関するログ
mail メールサービスに関するログ
news ニュースサービスに関するログ
cron cronに関するログ
uucp uucpに関するログ
lpr プリンタサービスに関するログ
uucp uucpに関するログ
daemon デーモンに関するログ
local0 ~ local7 独自の設定が可能。local7 はboot に関するログで利用されている。

主なプライオリティは下表の通りになる。下に行くにしたがって重要度が高くなっていくことに留意していただきたい。注意点は後述する。

表2.プライオリティ一覧

プライオリティ 意味
none 無視する。
debug デバッグ用のメッセージ。
info 情報レベルのメッセージ。
notice infoより重要度が高いメッセージ。
warn 警告。
err エラー。
crit クリティカル。重大なエラー。
alert アラート。すぐに対処した方がよい。
emerg 緊急事態。最高にやばい。

ファシリティとプライオリティを列挙したが、

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

コメントをどうぞ

メールアドレスが公開されることはありません。