tweepyを使って、Zabbixのトリガーをtweetする(その2)

で、前のエントリーの続き。

tweet しようとしてハマる…

さて、Zabbix 側も設定が終わって、実際にトリガーに連動して tweet されるかをチェックするために、 zabbix-agent の停止で上がるトリガー使ってテストをしていたのだけど、一向に tweet されない。スクリプトを CLI で実行すれば任意のメッセージで tweet 出来るわけだから、スクリプト本体に問題がある可能性は低いだろう、ということで、 Zabbix Server でログレベルを debug に変更してログを採取。

すると、zbx2tw.py が呼びだされたタイミングで、以下のようなメッセージが出ていることを発見。

 17336:20151128:195521.400 zbx2tw.py output:
Traceback (most recent call last):
File "/usr/lib/zabbix/alertscripts/zbx2tw.py", line 15, in
api.update_status(sys.argv[2])
IndexError: list index out of range

"IndexError: list index out of range" でググってみると、「リスト(配列)に対して存在しないインデックを指定した際に発生する例外」ということで、Zabbix が zbx2pw.py を呼び出す際に渡そうとしている引数の内容やその順番がおかしいのかもしれない、というところまでは判ったのだけど…。

zbx2tw.py の呼び出し方を変えてみる

まぁ、まだリリースされてもいない Zabbix 3.0.0alpha3 使っているんで、もしかしたらスクリプトに渡す引数に関する仕様が 2.0 や 2.4 と変わっていたりするかもしれないし、あんまり追求する気力もなかったのだけど、色々考えてみたわけですが…。

トリガー検知時の処理内容を変更

Zabbix ではアクションの設定の中で任意のコマンドを実行するように設定することも可能なので、「 zbx2tw.py をコマンドとして扱うように設定を変更してみたらどうだろう?」ということで、設定を変えてみたところ…。

なんと、ビンゴ!トリガーの内容が、tweet されるようになったじゃないですか!

具体的には、設定で、処理タイプをメッセージ送信からリモートコマンドへ。実行タイプにカスタムスクリプト、実行先として Zabbix Server を選択。
そして、コマンド欄に実行したい内容を記述、という感じ。



コマンドの設定例は、以下のとおり。

/usr/lib/zabbix/alertscripts/zbx2tw.py "@Soukaku" "{TRIGGER.NAME}"

zbx2tw.py 実行時の第二引数が tweet される内容になるので、トリガー名を示すマクロ {TRIGGER.NAME} をダブルクォーテーションで括って記述。zbx2tw.py の呼び出し時にマクロが展開されて実際のトリガー名に置き換わります。
この部分には、複数のマクロを書いたり、マクロ以外の送信したい情報を入れてもよいので、字数制限に注意すれば、いろいろな情報を送信できます。

それと、第一引数ですが、zbx2tw.py では扱わないので適当な文字列をにしておいて問題なし。ということで、例では自分の Twitter アカウントを入れています。

こんな感じで、実際に tweet させたいトリガーに対して設定をしてあるのですが、あとはちゃんと動いてくれるのを待つばかり。
#テストが動いたから、本番がうまくいくかどうかは、また別のお話…。

参考までに Web ページの更新状況のチェックの方法

さて、 Web ページの更新状況のチェックは、crontab に以下のように仕掛けています。

01 08-20/3 * * *  zabbix_sender -z 127.0.0.1 -p 10051 -s graph.facebook.com -k schllib.page -o "`wget -q -O /tmp/check.schl.html http://www.mext.go.jp/b_menu/shingi/chousa/shotou/115/index.htm $amp;$amp; md5sum /tmp/check.schl.html`" 2$gt;$amp;1 $gt; /dev/null
  1. チェックしたい Web ページを wget で取得して保存
  2. 保存したデータの md5 チェックサムを取得
  3. 取得したチェックサムを、 zabbix-sender で Zabbix に送信

厳密にコンテンツの内容までチェックする必要もないし、「更新されたかどうか」の判断や更新があった際の通知機能は Zabbix 側にお任せしてしまっているので、非常にシンプル。
もちろん、ページの取得から内容の変化のチェック、通知といった流れをひとまとめにして、スクリプトにするという手もありますけど、手持ちの材料を最大限に活かすという方向なら、こういうやり方もありなのでは?と、いうことで。

おまけ

Tweepy の使い方については、以下のページが参考になりそうなので、興味のある方は、どうぞ。

トラックバック(2)

Zabbix 使って、 Web ページの更新をチェックしているところがいくつかあ... 続きを読む

Zabbix 使って、 Web ページの更新をチェックしているところがいくつかあって、更新されたらメールが飛ぶようには... 続きを読む

コメントする