大量イベント発生時の滞留アクションの確認方法
いつもお世話になっております。
【当方の環境】CentOS6.6
zabbix 2.4.3
停電時などに、監視対象の障害が大量に発生し、パトライト鳴動のアクション(RSHスクリプト実行)が
処理しきれずに滞留してしまう状況となります。
この場合、実行アクションを削除して、滞留アクションを消滅させて、アクションの再登録を行う手法にて
回避しています。
ネットで対処法を検索してみると、RSHスクリプトで、滞留している実行アクションキューを確認すること
で対応できるような記述があったのですが、どのようにしてキューを確認するのか手法がわかりません。
この実行待ちのアクションを確認する手法を教えていただけませんでしょうか?
また、登録しているアクションのうち、どれが実行待ちかアクションの種類も確認できるものでしょうか?
以上、よろしくお願いいたします。
TNK - 投稿数: 4753
どこにそのような記事があったのですか?
rshを使ってできなくはないとは思いますが、Zabbix自体にrshで
アクセスして操作する機能はありませんし、rshで接続したとして、
何を実行するのか次第でしょう。
Webインターフェースで、
監視データ -> イベント
の画面を開き、右側のアクションの欄を確認してください。
緑色の数字であれば、アクションの処理が終了しています。
赤だとアクション実行失敗で、オレンジだと処理中だったと思いま
す。
各イベントの詳細を参照すれば、どのようなメッセージを誰に送ろ
うとしているか、どのようなコマンドを実行しようとしているかを
確認することができるはずです。
一覧を取得されたいのであれば、APIを利用するか、データベース
から直接データを検索することになるでしょう。
あと、一応、削除する方法の参考URLを書いておきますが、利用さ
れているZabbixのバージョンで正常に機能するかは確認していませ
ん。
通常の操作では、滞留しているアクションを削除する機能は用意さ
れていませんので、直接、データベースを変更して対応する方法で
あり、あまりお勧めしません。
# 問題があっても責任が取れません。
ご参考:メール送信の途中停止
http://www.zabbix.jp/node/1066
最後に、他の方への回答でも書かせて頂いていますが、2.4系は
サポートが終了してしまいましたので、バージョンアップを検討
されることをお勧めします。
misaki - 投稿数: 69
TNKさん
お忙しいところありがとうございます。
以下URLの(25)の記載が、スクリプトで何か対策ができると書いてあるのかと思ったページです。
http://www.slideshare.net/HitoshiYoshida/zabbix20111020-2
25. 外部アクション契機のキュー滞留
• テストで大量のイベントを発生させると、Zabbixの キュー滞留が発生
– パトランプのRSHコマンドがキューまちとなってずーっと、パ トランプが鳴り続ける状態に
– Zabbixのイベント処理は、紐付くアクションの完了を契機に処 理完了となると思われる
• RSHコマンド実行シェルスクリプトに、コマンドキュー をチェックする処理を追加して回避
• 外部へのアクションは、大量イベント発生時の動きを気 にする必要がある
>Webインターフェースで、
> 監視データ -> イベント
ありがとうございます。
Web画面でパトライト鳴動アクションの滞留状態は確認しているのですが、実行待ちアクション
に、同じパトライト鳴動処理があれば、何もせずに抜けるような実行スクリプト内で記述したいと
思いまして、スクリプトで確認する方法がないかと思いました。
DBのstatusの値を変更して終わらせる手法もこのフォーラムで参考にさせて頂いていましたが、
上のWebサイトの記述から、他にシェルスクリプトで確認できる方法があるのかと思い質問させ
ていただきました。
TNK - 投稿数: 4753
rshではなく、rshを呼び出すためのスクリプトですね。
そうであるならば、何らかのスクリプト内で、先ほども書いたよう
にAPIを利用するかSQLを直接利用するかして、rshを実行する前に
情報を抽出して判断するようにしているのだと思います。
ようするに、アクションの実行をrshを直接実行するのではなく、
スクリプトを実行するようにして、スクリプト内で処理分岐できる
ようにするするわけです。
あとは、misakiさんの環境で、どのようにアクションを設定されて
いて、どういう条件の場合にrshでの呼び出しをしないようにする
かの条件を明確にし、それに合った情報をどうやって取得するかを
確認することが必要でしょう。
misaki - 投稿数: 69
TNKさん
ありがとうございます。
>rshではなく、rshを呼び出すためのスクリプトですね。
説明があいまいですみません。そうです、rshでパトライトを鳴動させるコマンドを送信しています。
これを呼び出しているスクリプトです。
スクリプトでSQLを発行する場合、スクリプトにユーザ名、パスワードなどを記載しないといけないので
できれば、これ以外の手法で実現したいのですが、Zabbix APIで実行待ちを確認する場合、どのような
手法がありますでしょうか?
TNK - 投稿数: 4753
SQLを実行するなら、参照権限のみを与えたアカウントを別途用意
する方法が考えられると思います。
情報を参照することさえ許されないなら、スクリプトには書けませ
んね。
API利用する場合でも、結局は、アカウントとパスワードを利用す
るので、同様の問題があるでしょう。
APIを利用する方法に関しては、misakiさんがどのような言語であ
ればスクリプトを作成できるのかわかりませんのでとりあえずヒン
トだけ。
例えば、単純に未実行のものだけ数えるなら、以下のAPIで未実行
のもののリストが取得できるので、jqとか利用すれば件数が取得で
きると思います。
----- ここから -----
{
"jsonrpc": "2.0",
"method": "alert.get",
"params": {
"output": "extend",
"filter": {
"status": "0"
}
},
"auth": "038e1d7b1735c6a5436ee9eae095879e",
"id": 1
}
----- ここまで -----
実行例:
まず、ログインしてセッションのためのID(auth)を取得して、上記
のAPIを呼び出してjqで件数をカウント
----- ここから -----
$ curl -s -XGET -H 'Content-type:application/json-rpc' -d '{"jsonrpc":"2.0","method":"user.login","params":{"user":"Admin","password":"zabbix"},"id": 1}' http://localhost/zabbix/api_jsonrpc.php
{"jsonrpc":"2.0","result":"5f546efc603f5407f6bf62b1f7680b91","id":1}
$ curl -s -XGET -H 'Content-type:application/json-rpc' -d '{"jsonrpc": "2.0","method": "alert.get","params": {"output": "extend","filter": {"status": "0"}},"auth": "5f546efc603f5407f6bf62b1f7680b91","id": 1}' http://localhost/zabbix/api_jsonrpc.php | jq '.result | length'
----- ここまで -----
他にも特定のアクションのみとかも絞れると思いますが、詳細は
APIのマニュアルなどをご参照ください。
https://www.zabbix.com/documentation/2.4/manual/api/reference/alert/get
https://www.zabbix.com/documentation/3.0/manual/api/reference/alert/get
misaki - 投稿数: 69
TNKさん
詳しい情報ありがとうございます。
「alert.get」と言うもので取得できるのですね、ありがとうございます。
スクリプトをゴリゴリ書けるスキルがありませんが、以前、登録ホスト一覧をAPIで取得したことがありますので、
教えて頂いたAPIを使ってどこまでやりたいことを実現できるかチャレンジしてみます。
Zabbixでシステム監視、ネットワーク監視をするなかで、停電または、サーバを集約しているL3SWなどの障害
により、大量にアクションが実行され滞留する状況が起こり得ると思うのですが、みなさんは滞留しないような
対応はどのようにされているのでしょうか?
heya - 投稿数: 319
一例ですが、単純には、こんな感じでやったことがあります。
アクションで実行するスクリプト(rsh を実行するスクリプト)内で、
前回 rsh を実行した時間(専用のファイルに書いてある)から
xx 秒経過していなければそこで exit 、
xx 秒を過ぎていれば rsh を実行して、現在時刻をファイルに上書きする。
「実行待ちアクションに同じパトライト鳴動処理があるかどうか」を調べるのではなく、単純に前回(実際に)鳴らしてから何秒経ったかを見るのです。
#まあ実際にはホスト名がどうだとか、もう少し条件をつけていましたが。
rsh を実行しない場合、アクションで実行するスクリプトは一瞬で終わるので、これが溜まることはまずありません。パトライト鳴動というアクションは、短時間で複数実行してもあまり意味が無い(※)ので、一回鳴ったらそれ以降一定時間は鳴らさないということです。
※どうせ音が鳴ったらイベント画面を見ることになるので、大量にイベントが発生していればそこで気づくし、しばらくイベント画面に注目することになるはずなので、この間鳴らなくても問題は無いはず。
misaki - 投稿数: 69
heyaさん
ありがとうございます。
単純に同じアクションが滞留するのを防ぎたいので、heyaさんに教えて頂いた方法で、回避できそうな気がします。。。
詳細検討して対応してみます。
大変貴重なアイデアのご提供ありがとうございました。