https – 用自定义(选择/轮询驱动)守护进程替换Nagios HTTP?

我有一个Nagios配置,它在几百个节点上执行了许多测试;其中一个是check_http的变体.它没有配置为–enable-embedded-perl(ePN),但我们很快就会改变它.即使启用了ePN,我也担心这个Perl HTTP SSL检查的每次执行只处理一个目标的模型.

我想写一个简单的select()(或poll()/ epoll())驱动的守护进程,它同时创建与多个目标的连接,读取结果并以可用于Nagios的形式吐出结果,就好像它是结果一样从被动检查.

是否可以指导人们如何实现这一目标?用于为Nagios提供批量检查更新的接口或API是什么?

我正在考虑的一个hack是让我的守护进程更新一个Redis存储(每个目标都有一个密钥,以及一个很短的过期时间),并用一个非常小的,轻量级的本地Redis实例的GET替换key_http( GET将获得Nagios的实际结果或“(零)”响应,这将被视为HTTP连接已超时.

然而,我对我的想法也有点怀疑,因为我觉得有人已经有这样的事了.

(顺便说一句:我已经准备好相信会切换到像IcingaZabbixZenossOpenNMS这样的东西……几乎任何可以扩展的东西).

最佳答案 至于是否让Nagios处理调度和检查,我会留给你,因为它根据你的Nagios版本而变化(较新的版本可以同时运行这些检查),以及为什么你需要一个单独的守护进程.对于Nagios的版本控制,版本3 IIRC使用并发检查,因此可以扩展到比您报告的更大的节点数.

但是,我可以回答Redis路线概念,因为我已经使用Postfix队列统计数据和网站的TTFB跟踪.

使用带有curl和多处理模块的Python设置检查非常简单,就像将其转储到Redis中一样.到期我不会说间隔是一个坚实的想法,以防止数据库增长.我建议tis值不再(或可能只是小于)检查间隔,以避免获取陈旧的检查结果.如果当前正在运行的检查尚未完成且Redis-to-Nagios检查运行,请执行上一次检查,您可能会错过检查失败的检查.

对于Redis-To-Nagios,请检查一个简单的redis-cli bash脚本或Python检查以获取给定主机的数据,返回OK或其他方式取决于您的数据非常简单并且运行得足够快.

我建议在Nagios检查服务器上运行Redis实例,以确保最小延迟并避免网络问题导致检查中出现错误警报.我还建议对Redis实例和检查守护进程进行Nagios检查.使check_http替换检查取决于运行的Redis和http_check守护程序.你有一个依赖链如下:

Redis -> http_checkd -> http_check_replacement

这将通过识别问题来防止http_check_replacement上的错误警报.例如,如果您的redis_checkd死亡,您会收到警报,而不是200“失败的http_check_replacement”.

此外,由于Redis中的数据根据​​定义是暂时的,因此我会禁用磁盘持久性.数据不断旋转时无需写入磁盘.

另外,我建议,如果使用libcurl,你可以从libcurl中获取有关连接打开所需时间以及服务器响应时间(First To First Byte – TTFB)并利用Nagios的能力的统计数据存储检查统计信息.您可能已经准备好将数据用于故障排除和性能分析.

我有一个用C编写的CLI工具,它可以执行此操作并将其上载到本地Redis实例中.它很快 – 几乎不到获取URL的时间.我期待它本周开源,我可以很容易地添加Nagios样式输出.事实上,我想我会在接下来的一两周内做到这一点.

点赞