複数の文字列検索によるトリガーの設定
お世話になります。
トリガーの設定についてご享受ください。
フォーラムやwebでも検索したのですが、うまく情報が見つかりませんでした。
環境:ZABBIX1.6.8
実施したいこと:
1.ZABBIXサーバーをsyslogサーバーとし、複数のネットワーク機器からZABBIXサーバーにsyslog出力
(出力内容は「LinkUP」・「LinkDOWN」の内容)
2.ZABBIXサーバー自体をエージェントとし、syslogのログ監視を実施
3.syslog内に出力される「機器名(orIP)」、「LinkUP」、「LinkDOWN」をひっかけて
ネットワーク機器名毎のトリガーを作成
条件式としては
「syslogに『機器名』・『LinkDOWN』が出力されると「1(障害)」とし、syslogに『機器名』・『LinkUP』が出力されると「0(正常)」
を実装したいと考えています。
(ログ内の複数の文字列検索によるステータスの変更)
以下の条件式で一応「障害」・「正常」のステータス変更を確認できたのですが、あまりにも長くなってしまいます。
よりシンプルなトリガーの条件式はありますでしょうか?
({<agent名>:log[ログファイル].str(<機器名>)}&{<agent名>:log[ログファイル].str(<DOWN>)}=1)|({<agent名>:log[ログファイル].str(<機器名>)}&{<agent名>:log[ログファイル].str(UP)}=0)
kodai - 投稿数: 1341
こんにちは。
もし、各ログの行では必ず機器名のあとにLinkDOWN/LinkUPの文字列が出力されるようであれば、
({hostname:log[logname].regexp(機器名.*linkDOWN)}=1)|({hostname:log[logname].regexp(機器名.*linkUP)}=1)
といった形で正規表現を利用して設定できると思います。
トリガー条件式が長くなることが問題であれば、1つのアイテムに対してlinkDOWNとlinkUPのトリガーを別々に設定する方法もあると思います。
nos - 投稿数: 20
kodaiさん
ご回答ありがとうございます。
ご教授いただいた内容で検証してみました。
■検証内容
各機器をAIXサーバーのデーモンに見立て、/var/log/syslog.out内にデーモンの起動・停止時に出力される文字列を検索し、
「デーモンの起動⇒正常、デーモンの停止⇒障害」と判別させるためのトリガーを作成
■トリガー設定
<トリガー?>
トリガー名:named
キー:({HOSTNAME:log[/var/log/syslog.out].regexp(named.*Ready)}=0)|({HOSTNAME:log[/var/log/syslog.out].regexp(named.*shutting)}=1)
named起動時は「named[323780]: Ready to answer queries.」
停止時は「named[323776]: shutting down」と出力されるため
イベント生成:ノーマル+障害イベントを継続して生成
<トリガー?>
トリガー名:xntpd
キー:({HOSTNAME:log[/var/log/syslog.out].regexp(xntpd.*3.4y)}=0)|({HOSTNAME:log[/var/log/syslog.out].regexp(xntpd.*stop)}=1)
起動時には「xntpd[278740]: 3.4y」、
停止時には「xntpd[315632]: SRC stop issued.」と出力されるため
イベント生成:ノーマル+障害イベントを継続して生成
上記設定で、namedを起動した際にトリガーは「正常」となったのですが、続けてxntpdを起動した際にnamedのトリガーは「障害」となってしまいました。
両デーモン起動状態ではどちらのトリガーも「障害」になっています。
以下がコマンドを実行した際のsyslog.outになります。
----------------------------------------------------------
#tail -f /var/log/syslog.out
Aug 19 10:15:59 HOSTNAME daemon:notice named[323780]: starting BIND 9.2.1
Aug 19 10:15:59 HOSTNAMEdaemon:info named[323780]: using 1 CPU
Aug 19 10:15:59 HOSTNAMEdaemon:info named[323780]: loading configuration from '/etc/named.conf'
Aug 19 10:15:59 HOSTNAMEdaemon:info named[323780]: listening on IPv4 interface en0, 10.11.160.67#53
Aug 19 10:15:59 HOSTNAMEdaemon:info named[323780]: listening on IPv4 interface lo0, 127.0.0.1#53
Aug 19 10:15:59 HOSTNAMEdaemon:notice named[323780]: command channel listening on 127.0.0.1#953
Aug 19 10:15:59 HOSTNAMEdaemon:info named[323780]: no source of entropy found
Aug 19 10:15:59 HOSTNAMEdaemon:info named[323780]: zone 0.0.127.in-addr.arpa/IN: loaded serial 1997022700
Aug 19 10:15:59 HOSTNAMEdaemon:info named[323780]: zone nostest.co.jp/IN: loaded serial 2005052201
Aug 19 10:15:59 HOSTNAMEdaemon:info named[323780]: zone HOSTNAME/IN: loaded serial 42
Aug 19 10:15:59 HOSTNAMEdaemon:info named[323780]: Ready to answer queries.
Aug 19 10:20:36 HOSTNAMEdaemon:notice xntpd[278740]: 3.4y
Aug 19 10:20:36 HOSTNAMEdaemon:notice xntpd[278740]: tickadj = 1000, tick = 10000, tvu_maxslew = 99000
Aug 19 10:20:36 HOSTNAMEdaemon:info xntpd[278740]: precision = 21 usec
---------------------------------------------------------
想定ではどちらのトリガーも「正常」になるはずなのですが、
何か原因はお分かりになりますでしょうか。
監視データの最新データに該当する文字列がなければ「障害」のステータスになってしまうようですが、これは仕様になるのでしょうか。
heya - 投稿数: 319
こんにちは。
namedのトリガーは、日本語で書くと
「named〜Ready」という文字列が含まれていない ★
または
「named〜shutting」という文字列が含まれている
場合に障害になるわけですよね?
つまり、
Aug 19 10:20:36 HOSTNAMEdaemon:notice xntpd[278740]: 3.4y
という行がきた場合は、★の条件に当てはまるので、namedのトリガーが障害となった、ということだと思います。
同様に、xntpdの方も、
Aug 19 10:20:36 HOSTNAMEdaemon:notice xntpd[278740]: tickadj = 1000, tick = 10000, tvu_maxslew = 99000
Aug 19 10:20:36 HOSTNAMEdaemon:info xntpd[278740]: precision = 21 usec
これらは
{HOSTNAME:log[/var/log/syslog.out].regexp(xntpd.*3.4y)}=0
この条件を満たすので、障害扱いになったのではないかと思います。
ところで、トリガーの値というのは、対象のアイテムの値が指定した条件を満たすと障害、満たさないと正常になるわけですよね?つまり、トリガーの条件をチェックするたびに障害or正常の判定がなされるわけで、この場合はログを一行一行チェックしていくことになりますよね。そうなると、shutdownと出たときに障害というのはいいとしても、関係ないログを読んだときにも強引に障害or正常のどちらかを判定しようとするわけで(上の場合強引に障害と判定される)、トリガーだけでどうこうするのは難しそうに思います。
障害用と復旧用の二つのトリガーを作って、それをアクションと組み合わせてみるほうがいいかもしれません。
例(実際に試してはいません)
トリガー named_ready
{HOSTNAME:log[/var/log/syslog.out].regexp(named.*Ready)}=0
↑普段はこのトリガーは障害になっていて、Readyが出たときだけ正常になるはず。
トリガー named_shutting
{HOSTNAME:log[/var/log/syslog.out].regexp(named.*shutting)}=1
↑同様に、普段は正常、shuttingが出たときだけ障害。
アクションのコンディション
計算のタイプ AND
トリガー=named_ready
トリガーの値="正常"
アクションのオペレーション
復旧時にしたいこと
アクションのコンディション
計算のタイプ AND
トリガー=named_shutting
トリガーの値="障害"
アクションのオペレーション
障害時にしたいこと
うーん、もっとスマートなやり方もありそうな気はするんですけどね・・・。私にはこれが限界。
ここでふと思ったんですが、アイテムの設定で「named〜Ready/shuttingを含むログだけ」みたいな設定ができればトリガーの設定は簡単になるんじゃないかなと。log[file<,regexp>]のregexpをうまく指定すればいけるんでしょうか。たとえばlog[/var/log/syslog.out,named.*(Ready|shutting)]
こんなのはどうですかね。もしうまくいくようなら、トリガーはshuttingを含むなら障害、それ以外は正常、とするだけでよくなりそうな気がします。
nos - 投稿数: 20
heyaさん
ご回答誠にありがとうございます。
アイテムで絞る、ということには気づきませんでした。
確かにアイテムで該当部分(機器名のDown or UP)だけをアイテムで絞るような設定ができればいいのですが。。。。
いろいろ試してみます