特集
2003/09/08 18:00 更新
UNIX USER2003年10月号「Pragmatic UNIX」より転載
シスログの仕組み (1/7)
各OSではcronを使ってシステムログのローテーションを行っていました。では、システムログはどういう仕組みで動いているのでしょうか。今回から2回にわたり、システムログの仕組みや、どのように制御すればよいのかをまとめてみたいと思います。今回はシスログの概念と用語、設定ファイルの書き方をおさらいし、次回は実例を見ながら設定を確認していきます。
UNIX USER 2003年10月号より転載
これらのメッセージには、コンソール画面に出力されるものもありますし、ログファイルに記録されるものもあります。このように、メッセージの出力先をどこにするかなどを管理しているものがシスログです。 各種メッセージは、カーネルやサーバーデーモンが出力していますが、メッセージの出力先や出力形式は各プログラムによって個別に決められるのではなく、1つのデーモンで一元的に管理しています。こうすることで、プログラムごとの実装に惑わされることなく、システムを一貫したポリシーで管理できます。
シスログはsyslogdデーモンと、syslogdデーモンにアクセスするsyslogライブラリで実装されています。カーネルや各種サーバープログラムは、syslogライブラリを使って、特殊なファイルである/dev/log(あるいは/var/run/log)にメッセージを出力します。そして、syslogdがそのファイルからメッセージを読み込み、設定ファイルに従って処理を行います。このときのsyslogdの動作には、 簡単に図示すると図1のようになります。
ただし、すべてのデーモンがシスログの仕組みを利用しているわけではありません。DNSサービスを提供するnamedやSMTPサービスを提供するSendmailなどはこの仕組みでメッセージを出力していますが、WebサーバーのApacheやWindowsにファイル/プリンタ共有を提供するSambaなどは独自の仕組みでログ出力を行っています。
●シスログで使われる用語
ファシリティ OSによって多少の違いがありますが、用意されているファシリティを表1にまとめておきます。
表1 ファシリティ一覧
ところで、この表をよく見ていただければ分かるのですが、ファシリティには「daemon」や「mark」など、直感的に理解しにくい項目が含まれていて、これがシスログを使いづらいものにしているようです。また、カテゴリの用意されていないデーモンは「daemon」に属していたり、歴史的な事情も混乱の種になっているといえるでしょう(たとえばDNSサービスを提供するnamedはdaemonカテゴリに属します)。 passwdコマンドやsuコマンドはauthを使っているのでsudoもそうだろうと考えたくなるのですが、sudoはlocal2というファシリティです。結局のところ、それぞれのプログラムでどういうファシリティにするかが埋め込んであって、その名称を使わざるを得ないのです。オンラインマニュアルに「このプログラムはこういうファシリティを使っているよ」と親切に書いてあればまだしも、そういう情報はほとんどありません(コラム参照)。
レベル(重要度レベル) この仕組みに用いられているのが「セベリティ(重要度)レベル」です。オンラインマニュアルなどでは、単に「レベル」と表現している場合が多いので本稿でもそれに従いますが、それが「重要度」を指していることは抑えておいてください。また、Linuxのマニュアルでは、セベリティを「プライオリティ」(優先度)と表現しています。 たとえば、誰かがsuコマンドを使ってrootユーザーになろうとしたとき、正しくパスワードを入力して成功した場合は「notice」というレベルでメッセージが出力されます。パスワードを間違えてログインに失敗したときは「warning」レベルです(Solarisでは「crit」レベル)。シスログではnoticeよりもwarningのほうが重要度が高く設定されているので、シスログでwarningと設定していた場合、成功したログは記録されません。一方、noticeの場合は成功と失敗のどちらも記録されます。表2と図2にレベルをまとめておきます。
表2 レベル一覧
「すべてのメッセージ」を意味する「*」はdebugと同じになります。これとは逆に「none」を使うと、「メッセージを出力しない」としてまったくログを出力しなくなります。とりあえずここでは、低いレベルの出力はそれよりも高いレベルの出力を含むことだけ押さえておいてください。情報をとにかくたくさん取りたかったら低いレベルで、重要なメッセージだけを残したかったら高いレベルで記録するように、シスログへ指示します。 ただし、どのレベルでどれくらいメッセージが出力されるかは試してみないと分かりません。どのプログラムでも、出力メッセージについての記述はオンラインマニュアルにほとんどありません。そのため、何かイベントを故意に発生させて低いレベルから順に指定していき、どこでメッセージが記録されなくなるかを調べていくよりほかないわけです。こういうところでも、シスログの使いづらさが出ています。
関連リンク
|
[山下 哲典,UNIX USER]
Copyright © ITmedia, Inc. All Rights Reserved.