contents
evlogについて †
ここではevlogについて導入やら設定やらを簡単にまとめて行こうと思います。
evlogはキャリアなど対象のイベントログ (POSIX 1003.25) で、特定のfacility/severityやsyslog messageの文字列に対応したactionを実行でき、actionの作り方によっては障害発生時の通知や障害復旧等に使える。
daemon動作中にdaemonを停止することなく設定変更・反映が可能で、確かにそのあたりは基本サービス無停止のキャリア向け。
ここで載せるデーモン・コマンドは、evlogのprojectオリジナルのものだけです。
distributerがメンテナンスしているenhanceについては一切触れません。
注意 †
evlogは syslog-ng と一緒に CGL の STD.21.0 POSIX Event Logging のアプリケーション候補として挙げられているものですが、このwikiに記載する情報はcarrier向けに運用・設定情報を展開するものではありませんのでご注意ください。
日本語man page程度にお考えください。
CGL4.0のindexに STD.21.0 POSIX Event Logging が見つからないんですが…消えた?
evlogをどう使う? †
- 考えられる組み合わせ
- syslogd + evlogd (+ evlnotifyd + evlactiond )
- syslogd にはイベントに対応してコマンドを叩いたりできないので、組み合わせとしてはアリ
- syslog-ng + evlogd (+ evlnotifyd + evlactiond )
- syslog-ng は filter, destination などの設定組み合わせでコマンド実行したりできるので、これはかなり無駄な組み合わせ
- rsyslog + evlogd (+ evlnotifyd + evlactiond )
- syslogdの後継としてはrsyslogの方が良さそうな感じ
(msec単位で連続して飛んで来るログの出力が若干おかしい気がするけど)
- kernel-2.6.4に evlog のパッチ適用して kern facility だけ取る
evlog †
daemons †
evlogd †
- 概要
- enterprise向けのeventlog daemon
syslogdと違い、文字列やfacility/severityによるfilterと、filterにマッチしたeventに対応したactionを実行することが可能
障害検出時の通知やリカバリ用途か
現在では、 syslog-ng の方が扱いやすく同じようなことができるので、果たしてcarrier向けとしてもevlogである必要があるのかどうか??
年末あたり、 syslog-ng-1.6 で evlactiond 相当の機能を実現 ( destination に pipe() 指定することで、メッセージを子プロセスの標準入力へ pipe する ) してみましたが、あまりよろしくなかったです。
pipe()指定したプロセスは pipe したまま常駐プロセスとなるわけですが、そのプロセスをkillすると何もしなくなる (プロセスをまた起動して pipe し直すなどの処理が無い) ので、使い物になりませんでした。
syslog-ng-2.0以降だとどうなるかは見ていません。
evlogrmtd †
evlnotifyd †
- 概要
- evlnotifyで登録したイベントに該当するログの到着を通知するデーモン
evlactiond †
- 概要
- 関連ファイル
- /var/evlog/action_registry
commands †
evlconfig †
- 概要
- evlogdの設定変更用コマンド
evlogdを起動したまま設定の変更反映とconfの保存が可能
evlgentmpls †
evlnotify †
evlogmgr †
evlsend †
- 概要
- event送信用コマンド。
evlogdに対して任意のevent/messageを送信可能。 (loggerのevlog版)
evltc †
evlview †
evlog-telco †
daemons †
evlforward †
- 注意仕様
- evlforwardは kernel: か evlforward: を含むメッセージは転送しない。
evlforwardの -f オプションで指定可能なfacilityにも、kernは含まれていません。
- kern facilityのメッセージを printk() の延長で evlog へ転送するカーネルパッチは evlog の project site にありますが、すでにメンテナンスされていないので、現行のカーネルにはパッチ適用不可です。
- evlforwardはファイルから evlogd へメッセージを転送するため、syslogメッセージ本来の facility, severity は失われます。
facility, severityの引き継ぎをするには、syslogdのpipeのenhanceやpipeでメッセージを受けてevlogdへ転送するようなデーモンを作る必要あり。 (某distributerではenhance実装済み)
- 参考: evlforward: を含むメッセージを evlogd へ転送しない理由
- evlforward は、読み込み元ログファイル(デフォルトは/var/log/messages)から evlogd へ転送したメッセージを、syslog に対して「evlogdへ転送しているぞ」という記録を出力します。
従って、 evlforward が syslog へ出力したメッセージを、さらに読み込んで evlogd へ転送し、また syslog へ記録を…とループし続けないようにするためと考えられます。
- -p オプションや -i オプションを指定したときには、この syslog へのメッセージ出力はしなくなります。(-pは該当処理の抑止オプション)
更新履歴 †
- 2009/03/03 evlogmgrについて記述を追加
- 2009/02/27 evlogd, evlforwardについて記述を追加
- 2008/12/19 注意追加
- 2008/12/03 一部のデーモン記述を追加
- 2008/12/02 一部のオプション記述を追加
- 2008/12/01 evlogのコマンドを追加
- 2008/11/27 evlog-telcoを追加