alert_scriptをPythonで実行できない

お世話になっております。

Zabbixからalert_scriptでPythonでの通知を試しております。

Zabbixは3.2.8です
Pythonは2.7です
実行ファイル==output.py==
#!/usr/bin/python
#-*-coding:utf-8*-
import time
file = open('test.txt','w')
string ='test'
file.write(string)
file.write(time.ctime())
file.close()
==

メディアタイプの作成とユーザへの紐づけは完了しております。
アクションの設定も完了しております。

su -u zabbix output.pyを実行したところ
ちゃんとtest.txtに時刻が下記駒われていることを確認しました。

他に必要な情報があれば言ってください。

以上、よろしくお願い致します。

コメント表示オプション

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

ほぼ同じスクリプトを使用して呼び出すことができています。

メディアの設定を再度ご確認ください。
zabbix_server.conf内のAlertScriptsPathで指定したディレクトリ
にそのスクリプトを配置していますか?
メディアの設定内のスクリプト名に「output.py」とだけ指定して
いますか?
イベントの詳細画面やZabbixサーバーのログなども確認してみてく
ださい。実行に失敗していれば、なぜ失敗したかのヒントが出力さ
れているはずです。

あと、書いて頂いたスクリプトそのままですと、書き出すディレク
トリにパーミッションが無くてtext.txtファイルに書きこめていな
い可能性が考えられます。
出力先を/tmp以下などパーミッションの問題の無いディレクトリの
ファイルを指定してみてください。

もう一つ、SELinuxなどのセキュリティの仕組みを有効にしている
のであれば、それらのログファイルも確認してください。

TNK様

早速の返信ありがとうございます。

分かっている範囲で返答させていただきます。

>メディアの設定を再度ご確認ください。

メディア設定に関して再度確認しました。Python以外どうなるか
確認したところ、bashでの実行が出来ることを確認しました。

>zabbix_server.conf内のAlertScriptsPathで指定したディレクトリ
>にそのスクリプトを配置していますか?

/usr/lib/zabbix/alertscriptsの下に配置しております。
別の言語(bash)は実行できることを確認しました。

>メディアの設定内のスクリプト名に「output.py」とだけ指定して
>いますか?

しておりました。ほぼ同様な内容のoutput2.shでしたら
実行できました。

>イベントの詳細画面やZabbixサーバーのログなども確認してみてく
>ださい。実行に失敗していれば、なぜ失敗したかのヒントが出力さ
>れているはずです。

ZabbixサーバのログやAction logを確認しましたが、特に問題となる
ログが出力されていませんでいた。
Action logはSentとなっておりました。

>あと、書いて頂いたスクリプトそのままですと、書き出すディレク
>トリにパーミッションが無くてtext.txtファイルに書きこめていな
>い可能性が考えられます。
>出力先を/tmp以下などパーミッションの問題の無いディレクトリの
>ファイルを指定してみてください。

import os
os.chdir("/tmp/")
を追加して、tmpで出力できるように変更しましたが
実行されておりませんでした。

>もう一つ、SELinuxなどのセキュリティの仕組みを有効にしている
>のであれば、それらのログファイルも確認してください。

SELinuxを一時的に無効しましたが、やはり実行できませんでした。

色々と助言を頂いたのに申し訳ありません。
お知恵をお貸し頂ければと思います。

以上、よろしくお願い致します。

ユーザー TNK の写真

ZabbixのバージョンやOSの環境にも依存したかもしれません。

シェルスクリプトなら起動できるのであれば、そのPythonスクリプトを
シェルスクリプト経由で実行するようにしてください。

TNK様

お世話になっております。
迅速な返信ありがとうございます。

シェルスクリプト経由でも実行されませんでした。

OSのバージョンは、CentOS Linux release 7.4.1708 (Core) で
Zabbixのバージョンは、3.2.8です。

ここのログや設定を確認をしたらいいということがあれば、ご教示ください。

以上、よろしくお願い致します。

ユーザー TNK の写真

CentOS 7.3.1611とZabbix 3.2.6でもPythonのスクリプトを直接指
定して動きました。

繰り返しになりますが、ZabbixサーバーやOSのログを確認してくだ
さい。
一時的に、デバッグレベルをあげてみることが可能であるならば、
それも試してみてください。

ユーザー heya の写真

>ほぼ同様な内容のoutput2.shでしたら実行できました。
私は python を触ったことがないのですが、その output2.sh を貼り付けると、分かる人が output.py と見比べてくれるかもしれません。

あと念のためですが、 output.py には実行権ついてますよね?(ついているから sudo -u zabbix output.py が実行できたんだと思いますが)

TNK様、heya様

いつもお世話になっております。
ご返信ありがとうございます。

/var/log/zabbix/のzabbix_server.logは特に出力されていませんでしたが、
/var/log/messageには以下のような気になるメッセージが出力されていました。

Oct 20 14:34:11 test python: detected unhandled Python exception in '/usr/lib/zabbix/alertscripts/output.py'

デバッグレベルを上げて確認してみます。

output2.shは
==
#!/bin/sh
date > /tmp/test.txt
==

となります。

以上、よろしくお願い致します。

広瀬です

PythonスクリプトをざわざわZABBIXユーザで動作確認しているということは、ZABBIXサーバ
自体もzabbix権限で稼働されているのでしょうか?であれば、sudoersの設定周りも一度確認
なさってみてください。

「detected unhandled Python exception」ってことは、環境変数引き継がれていない関連かも
しれませんが、その方面でも確認は必要ですね。

いちを、当方でも適当にPythonスクリプト噛ましてみましたが、普通に稼働しました。但しroot
権限条件下です。ZABBIXサーバー自体、zabbixユーザ権限で稼働しているならば、root権限
に切り替えて見て、確認してみては如何でしょうか?