【问题标题】:nagios event handler executing python scriptnagios 事件处理程序执行 python 脚本
【发布时间】:2017-06-16 12:38:46
【问题描述】:

我不知道这个问题可能是什么。 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 来解决这个问题。此外,如果这是一个问题,它应该被记录下来。

有人知道这里发生了什么吗?

【问题讨论】:

    标签: python nagios


    【解决方案1】:

    我想通了。似乎您定义了 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。

    【讨论】:

    • 另外值得注意的是,您绝对应该能够在脚本中指定一个完整路径,该路径将覆盖 Nagios 决定放置它的任何位置。另外,你在记录 event_handlers 吗? log_event_handlers=1 in nagios.cfg
    • 我正在记录事件处理程序,但它们仅在出现错误时记录内容。由于某种原因,函数中的 stdout 打印语句不会发送到日志中。我试图指定一个路径,但由于某种原因它不会保存在那里
    • 它只保存在/tmp 目录中,无论我给它什么路径,相对或绝对。我做了一个打印日志路径的函数,毫无疑问是/tmp
    【解决方案2】:

    检查你的函数,你似乎错过了函数参数中的“,”。

    def log_something(host_name host_address,attempt_number): 以 open('file', 'a+') 作为日志:

    【讨论】:

    • 注意到并修复,但事实证明这不是问题
    • 酷,你修好了,但是给试图帮助你的人投反对票怎么合适,反正学习愉快。
    • 只是因为我在问题中指定不报告错误,如果您说的是问题,则会返回错误数量的参数类型的错误。我知道这听起来很傻,但我实际上并不是要给你投反对票
    猜你喜欢
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-12
    • 2014-03-14
    相关资源
    最近更新 更多