なにかが壊れたら,それについてを知りたいと思いますよね. たぶんそのときあなたはXymonのWebページを見続けてはいないので, 問題を通知するために,Xymonはアラートを発生させることができます. アラートはメール,ポケベル,SMS(Short Message Service)で通知できます.
2.5.1 シンプルなアラート設定
アラート用の設定ファイルは,/server/etc/alerts.cfgです. このファイルはいくつかのルール(rule)から成り立ちます.ルールにはホスト名,サービス,日や時間帯などの条件が記載されます. それらのルールにはアラートを受け取るいくつかの受取人(recipient)が記載されます. それぞれの受け取りに関して,必要に応じてルールを洗練させることができます.たとえば,
HOST=www.foo.com MAIL webmaster@foo.com SERVICE=http REPEAT=1h MAIL unixsupport@foo.com SERVICE=cpu,disk,memory
最初の行はルールを定義します.この例では"www.foo.com"がなにか壊れたときに,アラートを送ります.
二つのパラメータがあります.webmaster@foo.comは,HTTPサービスが壊れたときに通知され,通知はサービスが復旧するまで1時間に1回通知されます. unixsupport@foo.comは,"CPU","ディスク","メモリ"でエラーがあったときに通知され,REPEATの設定が無いためにデフォルト値の30分間隔の通知が利用されます.
Webサーバの管理者が午前4時にメールが送られることに苦情を言ったとしましょう. Webサーバは午後9時から午前8時までは午後9時から午前8時までは動作しないようになっていて, 彼が問題に対応する十分な時間である7時30分まではアラートを聞きたくありません. その場合は,7時30分までにアラートを送らないように次のように設定します.
HOST=www.foo.com MAIL webmaster@foo.com SERVICE=http REPEAT=1h TIME=*:0730:2100 MAIL unixsupport@foo.com SERVICE=cpu,disk,memory
受取人にTIME設定を追加することで,この受取人へのアラートを抑制できます. アラートの時間に隔たりがあれば,Webサーバの管理者はよく眠れるでしょう.
TIME設定を受取人の代わりにルールに付けるとどのようになるでしょうか.このように.
HOST=www.foo.com TIME=*:0730:2100 MAIL webmaster@foo.com SERVICE=http REPEAT=1h MAIL unixsupport@foo.com SERVICE=cpu,disk,memory
これでWebサーバの管理者はまだ夜を過ごせるでしょう. さらに,TIME設定は,CPU,ディスク,メモリのアラートにも適用されます. 夜にディスクがいっぱいになったときも,unixsupport@foo.comにはメールは飛びません.
2.5.2 ルールと受取人のキーワード
ルールを設定するキーワードです.
PAGE | ページ名でマッチするルール.これはhosts.cfgの"page","subpage","subparent"キーワードの名前です. |
---|---|
EXPAGE | ページ名で除外するルール. |
HOST | ホスト名でマッチするルール. |
EXHOST | ホスト名で除外するルール. |
SERVICE | サービス名でマッチするルール. |
EXSERVICE | サービス名で除外するルール. |
COLOR | 色でマッチするルール."red", "yellow", "purple"を指定できます. |
TIME | 時間でマッチするルール.これはhosts.cfgのDOWNTIME時間詳細として特定されます(訳注:?).(hosts.cfg(5)を参照) |
DURATION | 最後に起きたイベントからの時間でマッチするルール.例:DURATION>10m (10分以上続いた場合),DURATION<2h(最初の2時間だけアラートを送ります).単位は,'m','h','d'を,それぞれ分,時間,日として利用でき,明示されていない場合は分です. |
UNMATCHED | 受取人のこのキーワードは,他のアラートが送られず,このアラートだけが送られることを意味します(訳注:?).たとえば,いくつかのサービスを特定の人に送りたい場合に使うことができます.UNMATCHEDキーワードのある他の誰にも送られなかったアラートを受け取る受取人を加えることもできます.すべてのアラートを受け取る受取人を作って,alerts.cfgファイルの最後にUNMATCHEDキーワードのある受取人を作ることもできます.(訳注:覚え書き:意味がわからないので,試してみること.) |
RECOVERED | アラート状態が復旧したときにマッチするルール. |
NOTICE | メッセージが"notify"となった場合にマッチするルール.ホストかテストを無効にするか有効にするかしたときに,このメッセージが送られます.(訳注:?). |
受取人を設定するキーワードです.
メールを受け取る受取人.これは一つのパラメータ(メールアドレス)を取ります. | |
SCRIPT | スクリプトを実行する受取人.これは二つのパラメータ(スクリプトのファイル名と,スクリプトに渡される受取人(訳注:RECIPIENT?)) |
IGNORE | アラートを送らない受取人.Xymonは受取人を捜さないようになります.下の例を参照してください. |
FORMAT | アラートのテキストメッセージのフォーマット.デフォルトは"TEXT"(メールでのアラートに適している)です."PLAIN"はステータスページへのリンクが含まれないことを除いてTEXTと同じです."SMS"はSMS用のサブジェクトのない短いメッセージです."SCRIPT"はスクリプト用の要約されたメッセージテンプレートです. |
REPEAT | アラートを繰り返す頻度.DURATION設定と共にして指定されます.単位は'm','h','d'で指定でき,明示されない場合は分です. |
STOP | デフォルトで,xymond_alertはアラートを扱うときにalerts.cfgファイルのすべての有効な受取人を見ます.もし特定の受取人がアラートを受け取って停止したいのであれば,STOPキーワードをこの受取人に追加してください.これはもっと多くの受取人を捜すのを停止します. |
2.5.3 ワイルドカード - 正規表現
これでアラートを設定できるようになりました. しかし明確にホスト名を設定するのは面倒です. 多くのホストを扱うのなら,スマートな方法があります.
HOST=%(www|intranet|support|mail).foo.com MAIL webmaster@foo.com SERVICE=http REPEAT=1h MAIL unixsupport@foo.com SERVICE=cpu,disk,memory
このパーセント文字は,ホスト名が文字列ではなく,Perl互換の正規表現で,(www|intranet|support|mail).foo.comであることを示します. この部分は,"www.foo.com", "intranet.foo.com", "support.foo.com", "mail.foo.com" にマッチします. ホスト名,サービス名,ページ名に,正規表現を使えます.
もしどのように設定すればどのホストが指定されるのかをテストしたいのならば,xymond_alertをテストモードで実行することができます. ホスト名とサービス名を入力として与えると,設定を読んでどのルールがマッチするかを表示します.
osiris:~ $ cd server/ osiris:~/server $ ./bin/bbcmd xymond_alert --test osiris.hswn.dk cpu Matching host:service:page 'osiris.hswn.dk:cpu:' against rule line 109:Matched *** Match with 'HOST=*' *** Matching host:service:page 'osiris.hswn.dk:cpu:' against rule line 110:Matched *** Match with 'MAIL henrik@sample.com REPEAT=2 RECOVERED COLOR=red' *** Mail alert with command 'mail -s "BB [12345] osiris.hswn.dk:cpu is RED" henrik@sample.com'
2.5.4 メールでは充分でない場合
MAILキーワードはメールによる通知を意味します. ときには結局は携帯電話へのSMSです. メールによるSMSは可能ですが,それはあなたがしたいことではないかもしれません. そしてまた,実際にメールを送るには,メールサーバが動いている必要があります. そのため,すべてのアラートの管理を必要とするのなら,代わりにSCRIPTメソッドを利用してください. こんな感じで.
HOST=%(www|intranet|support|mail).foo.com SERVICE=http SCRIPT /usr/local/bin/smsalert 4538761925 FORMAT=sms
このアラートはメールを送りません. 代わりにアラートを送る必要があるとき,Xymonはスクリプト/usr/local/bin/smsalertを実行します. スクリプトは送るアラートの情報を構築するために環境変数を使えますし,状況次第で受取人を操作できます. Xymonはスクリプトへ問題の起きたサーバの数字コードをIPアドレスのような数値で提供するので,ポケベルに数値を送ったりできます. "sendsms"ツールを利用してSMSにメッセージを送るシンプルなスクリプトはこんなのです.
#!/bin/sh /usr/local/bin/sendsms $RCPT "$BBALPHAMSG"
Xymonがスクリプトのためにセットした二つの環境変数を使っているのがわかります. $RCPTは受取人で,たとえばhobbitalerts.cfgファイルの電話番号である"4538761925"です. $BBALPHAMSGはアラートの引き金となったステータスのテキストです.
しかし,$BBALPHAMSG は長くてわかりやすくて良いのですが, すべての受取人がステータスメッセージで送られる大きなメッセージを扱えるわけではありません. FORMAT=SNSはXymonにBBALPHAMSGをSMSに適する最大160バイトの形式に変換します. それでXymonはステータスメッセージのもっとも重要な部分を抜き出し,スクリプトにBBALPHSMSG変数のできるだけ多くの情報を入れます.
スクリプトに渡せる環境変数の全リストです.
BBCOLORLEVEL | ステータスの現在の色 |
---|---|
BBALPHAMSG | ステータスログのすべてのテキスト |
ACKCODE | アラートを扱っている"cookie" |
RCPT | 受取人,SCRIPTエントリからの |
BBHOSTNAME | アラートを扱っているホスト名 |
MACHIP | 問題が起きているホストのIPアドレス |
BBSVCNAME | アラートを扱っているサービス名 |
BBSVCNUM | サービスの番号コード.SVCCODES定義から |
BBHOSTSVC | アラートのHOSTNAME.SERVICE |
BBHOSTSVCCOMMAS | BBHOSTSVC,カンマで区切りのホスト名 |
BBNUMERIC | BBSVCNUM, MACHIP, ACKCODEによって作られる22文字の数値 |
RECOVERED | サービスが復旧していれば"1" |
DOWNSECS | サービスがダウンしている秒数 |
DOWNSECSMSG | サービスが復旧したとき,テキスト「Event duration : N」にある,NがDOWNSECSの値 |
提供している環境変数は,BigBrotherによって提供していたカスタムページスクリプトと同じですので, BigBrother向けに書かれたスクリプトはXymon向けに再利用できます.
2.5.5 タイピングの省力化 - マクロの利用
ホスト名やメールアドレスの長いリストをalerts.cfgファイルで使っていて, すべてのリストを書きたいですか.ちがいますよね.
$WEBHOSTS=%(www|intranet|support|mail).foo.com HOST=$WEBHOSTS SERVICE=http SCRIPT /usr/local/bin/smsalert 4538761925 FORMAT=sms HOST=$WEBHOSTS SERVICE=cpu,disk,memory MAIL unixsupport@foo.com
最初の行の$WEBHOSTSはマクロとしての構文です. そうすることで,$WEBHOSTSはファイルの中のどこに書いても,自動的に"%(www|intranet|support|mail).foo.com" に置き換えられます. 同じ方法が,たとえばメールアドレスのような,受取人に対しても利用できます. 実際に,完全な記述をマクロでは下記のように記載します.
$UNIXSUPPORT=MAIL unixsupport@foo.com TIME=*:0800:1600 SERVICE=cpu,disk,memory HOST=%(www|intranet|support|mail).foo.com $UNIXSUPPORT HOST=dns.bar.com $UNIXSUPPORT
これは,unixsupport@foo.comがfoo.comとdns.bar.comのCPU,ディスク,メールについて障害をメール受信する方法です.
メモ:マクロはネストできます.ただしマクロの定義はマクロを利用する前に行う必要があります.
2.5.6 ルールの例外:IGNORE
ワイルドカードのルールで大部分を扱うシナリオを考えます. マーケットサーバから木曜の午後はCPUのアラートをあげたくないとします.それでしたら,IGNOREを受取人に使います.
HOST=* COLOR=red IGNORE HOST=marketing.foo.com SERVICE=cpu TIME=4:1500:1800 MAIL admin@foo.com
これはすべてのアラートを受け取り,すべての赤のアラートは, admin@foo.com のメールボックスに入ります. ひとつの例外があります. marketing.foo.com が木曜の午後3時から午後6時の間にアラートを出したとき,アラートは無視されます. 木曜日のマーケッティングサーバが忙しいとき,IGNORE受取人は暗黙のうちに停止フラグを立て, IGNORE受取人にマッチしたら,Xymonは他の受取人を捜すのを中断し,次の行のMAIL受取人は決して見つかりません.