2017-01-31 9 views
0

この問題の可能性について私は困惑しています。 Nagiosのログにはもうエラーは報告されませんが、ファイルには何も書き込まれません。nagiosイベントハンドラがPythonスクリプトを実行しています

def log_something(host_name host_address, attempt_number): 
    with open('file', 'a+') as log: 
     log.write('called function at %s with args %s' %s (str(datetime.datetime.now()), locals())) 


def main(): 
    parser = argparse.ArgumentParser() 
    parser.add_argument('host_name') 
    parser.add_argument('host_address') 
    parser.add_argument('attempt_number') 
    args = parser.parse_args() 
    log_something(args.host_name, args.host_address, args.attempt_number) 

if __name__ == "__main__": 
    main() 

そして、私のcommands.cfgで

define command { 
    command_name my_command 
    command_line $USER1$/my_command.py $HOSTNAME$ $HOSTADDRESS$ $HOSTATTEMPT$ 
} 

そして、私のホストの設定で

define host { 
    ... 
    event_handler my_command 
} 

とNagios中(journalctl -xe)ログイン

OST ALERT: test-router;UP;HARD;5;PING OK - Packet loss = 0%, RTA = 0.96 ms 
Jan 31 15:38:47 nagios-server.nagios[9212]: HOST EVENT HANDLER: test-router;UP;HARD;5;my_command 

ナッシングファイルに書き込まれると、エラーは報告されません。構文にエラーがあると、Nagiosログはstderrに報告されたエラーを出力し、その1つはファイルアクセス権の問題でした。私は同じフォルダにchmod 777のすべてを作成することでそれを修正しました。それが問題であった場合は、ログに記録する必要があります。

誰でも何が起こっているのか分かりませんか?

答えて

-1

機能を確認してください。関数のパラメータに "、"がないようです。

デフlog_something(HOST_NAMEのhost_address、attempt_number):私は何かを考え出し

+0

は固定されていますが、それは問題ではないことが分かりました。 – frei

+0

あなたはそれを修正しました。しかし、これはあなたを助けようとする否定的な投票を与えるのにどのように適切ですか、とにかく幸せな学習。 – Ricky

+0

というのは、私が質問に指定したのは、何のエラーも報告されていないということです。あなたが言ったことが間違った数の引数タイプのエラーを返すでしょう。私はこれがばかげていると知っていますが、私は実際にあなたにdownvoteを意味していませんでした。 – frei

0

:オープンで ( 'ファイル'、 '+')ログとして。 ファイルで、nagiosイベントハンドラの出力がどこにあるかを定義しているかのようです。

# TEMP PATH 
# This is path where Nagios can create temp files for service and 
# host check results, etc. 
temp_path=/tmp 

これは、プラグインチェックの出力が一時フォルダに送信されることを意味します。しかし、そのパスを変更しても効果がないようで、pythonスクリプトで出力した結果は、まだ/ tmpフォルダにfileと書かれています。これはCentOS7です。

+0

Nagiosが置くことを決めた場所をオーバーライドするスクリプトの完全なパスを間違いなく指定できるはずです。また、event_handlersをロギングしていますか? 'log_event_handlers = 1'は' nagios.cfg'にあります。 –

+0

私はイベントハンドラをロギングしていますが、エラーが発生したときだけログを記録します。関数内のstdout printステートメントは何らかの理由でログに送られません。私はパスを指定しようとしましたが、何らかの理由でそこに保存されません。 – frei

+0

相対パスか絶対パスかに関係なく、 '/ tmp'ディレクトリに保存されるのはこれだけです。私はログのパスを表示する関数を作りました。それは間違いなく '/ tmp'です。 – frei

関連する問題