nagios事件处理程序执行python脚本

时间:2017-01-31 06:58:20

标签: python nagios

我很难过这个问题。 nagios日志不再报告任何错误,但我的文件没有写入任何内容。

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的错误,其中一个是文件权限问题。我通过在同一文件夹和chmod 777中创建文件来解决这个问题。除非这是一个问题,它应该被记录下来。

任何人都知道这里发生了什么?

2 个答案:

答案 0 :(得分:0)

我想出了什么。看起来好像你定义了nagios事件处理程序的输出在nagios.cfg文件中的位置。

# 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。

答案 1 :(得分:-1)

检查你的功能,似乎你错过了","在函数参数中。

def log_something( host_name host_address ,attempt_number):    打开('文件',' a +')作为日志: