アラートの処理(スクリプト)について

すごーーーーーく久しぶりに投稿しました。
みなさんお世話になっております。

ちょっと最近zabbixの設定ではまってしまってご教示頂ければと思い投稿させて頂きました。

* zabbix-server

<pre>
zabbix-server-1.8.5
CentOS 5.5
</pre>

* zabbix-agent

<pre>
zabbix-agentd-1.8.5
CentOS 5.5
</pre>

要求としては
「アクションで作成したスクリプトを走らせる」です。

スクリプトの中身はAPIを使って、とあるインスタンスを立ち上げる・・・というスクリプトです。
sshでログインしてそのシェルスクリプトを指定してあげるときちんと動きます。
但しzabbixからキックさせようとすると動きません・・・
zabbixの設定がおかしいと(権限とかアクション設定辺り)思い、同じシェルスクリプトに「confファイルの中身を、指定したメールアドレスに送信する」というシェルスクリプトに書き換えて、zabbixからキックさせると・・・指定したメールアドレスに送信されました。

zabbixの仕様で、スクリプト走らせるor走らせない条件とかあるのでしょうか?知っている人教えてください。

例:スクリプトの結果に時間がかかるものはシェルのプロセスをkillするなど・・・

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

引数を無視して、既存の某インスタンスを起動することなら以下の
ようなスクリプトでできています。
<code>
#!/bin/sh
export JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0
export EC2_HOME=/etc/zabbix/alertscripts/ec2-api-tools-1.4.4.1
export EC2_PRIVATE_KEY=/etc/zabbix/alertscripts/ec2key/pk-XXXX.pem
export EC2_CERT=/etc/zabbix/alertscripts/ec2key/cert-XXXX.pem

PATH=$PATH:$HOME/bin:$EC2_HOME/bin
export PATH

ec2-start-instances --region ap-northeast-1 i-dXXXXXXX > /dev/null 2>&1
</code>
上記のようなやりかたをやられているのであれば、API呼び出しの
前後や、API呼び出しの部分の結果をファイルに出力するなどして
どこまで呼び出せているかや呼び出しが正常に行われているかを再
度ご確認下さい。

それでも原因が特定できない場合は、呼び出されているスクリプト
のより詳細な情報をご提供頂けませんでしょうか?
例えば、Javaではなく別の言語のAPIツールを利用されているので
あればその言語とバージョンに関する情報も頂けると再現確認がで
きると思います。

例:スクリプトの結果に時間がかかるものはシェルのプロセスをkillするなど・・・

別途、30秒以上かかる処理を呼び出すようにしてみましたが問題な
く呼び出せています。

ユーザー tsuzuki の写真

鈴木です。

どの箇所でうまく動いていないかを切り分けるために、以下の方法を試してみてはどうでしょうか。

■「zabbix」ユーザーでログインして実際にそのコマンドが正常に実行できるか確認。
Zabbixのアクションで実行するスクリプトは、最終的にzabbixユーザー権限で実行されます。
そのため、実際にzabbixユーザーで正常に実行できるかどうか、で問題の絞りこみができます。
具体的には、rootユーザでvipwを実行して「zabbix」ユーザーのログインシェルを「/bin/bash」に変更し、その後
<code># su - zabbix</code>
を実行すると、zabbixユーザーとしてログインできます。
ログイン後、目的のコマンドが正常に実行できるか確認してみてください。
権限の問題である場合はここで何かしらの問題が判明するかと思います。

ユーザー tsuzuki の写真

もう1点追加で書きます。

「管理」-「メディアタイプ」のところに登録するスクリプトはフルパスで記述することはできず、/etc/zabbix/zabbix_server.conf 内の
「AlertScriptsPath=/var/lib/zabbix/」で設定しているパス内に存在するスクリプトのみ実行できます。

スクリプト名を記述するときも、例えば「/var/lib/zabbix/alert-by-skype.py」というスクリプトを実行する時には「alert-by-skype.py」と記述する必要があります。

この仕様にひっかかっていないか、確認してみてください。

ユーザー robinmasuk の写真

TNK様
tsuzuki様

ご返信遅くなり申し訳ございません。

上記のようなやりかたをやられているのであれば、API呼び出しの 前後や、API呼び出しの部分の結果をファイルに出力するなどして どこまで呼び出せているかや呼び出しが正常に行われているかを再 度ご確認下さい。

実際作成したスクリプト公開しますー。

#!/bin/sh
PATH=$PATH:$HOME/bin:$EC2_HOME/bin
export PATH=$PATH:$EC2_HOME/bin
export PATH
export EC2_HOME=/usr/local/sbin/ec2-api-tools-1.4.4.0
export JAVA_HOME=/usr/java/jdk1.6.0_14
export EC2_CERT=/usr/local/src/cert-xxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_PRIVATE_KEY=/usr/local/src/pk-xxxxxxxxxxxxxxxxxxxxxxxxx.pem

/usr/local/sbin/ec2-api-tools-1.4.4.0/bin/ec2-start-instances --region ap-northeast-1 i-xxxxxxxx >> /tmp/bkup_log.txt

環境変数に渡すところを全て変更して実行してみました。

ls -l $EC2_HOME/bin/ >> /tmp/zabbio_log.txt
ls -l $JAVA_HOME/bin/ >> /tmp/zabbio_log.txt
cat $EC2_CERT >> /tmp/zabbio_log.txt
cat $EC2_PRIVATE_KEY >> /tmp/zabbio_log.txt

ざっくりと・・・
これでzabbixアクション仕込んで実行すると、zabbio_log.txtに値が書きこまれました。

zabbixからスクリプト自体は走っていますねー。
ただインスタンスは起動しないっす・・・

# su - zabbix

でzabbixユーザでログインし、スクリプトを走らせると走りました。
スクリプトもAlertScriptsPathに記載のある場所に置かれています。
今から最終手段のzabbix_server.confで「DebugLevel=4」に設定し、アクション実行してみますー。

進捗あったら連絡しますー

ユーザー TNK の写真

<code>
#!/bin/sh
PATH=$PATH:$HOME/bin:$EC2_HOME/bin
export PATH=$PATH:$EC2_HOME/bin
export PATH
export EC2_HOME=/usr/local/sbin/ec2-api-tools-1.4.4.0
.....
</code>
この順番ですとAPI ToolsへのPATHの設定が正しく設定されていませ
ん。
以下のようにPATHに設定する前にEC2_HOMEを設定してみてください。
<code>
#!/bin/sh
export EC2_HOME=/usr/local/sbin/ec2-api-tools-1.4.4.0
PATH=$PATH:$HOME/bin:$EC2_HOME/bin
export PATH=$PATH:$EC2_HOME/bin
export PATH
.....
</code>

あとec2-start-instancesを実行する際、「>>」だけだと標準エラー
出力がファイルに出力されないので最後に「2>&1」も付けてみて下
さい。