这可能是一个非常基本的问题,但我对 Nagios、Munin 和其他监控工具的具体功能不是很熟悉。
假设我们有一个流程需要每天运行,因为一些非常重要的基础设施原因。我们曾遇到过这样的情况:该流程没有运行,或者在几天内处于宕机状态,但没有人注意到。
我想建立一个系统,使我能够轻松知道何时由于某种原因日常运行未能进行。
我可以设置此过程以在每次成功运行(或每次失败运行)时发送电子邮件,但我不相信收到此电子邮件的人会注意到缺席“我很好”的信息。
我设想的是某种类型的“tripwire”服务,这个 VIP(非常重要的进程)每次运行时都可以向其发送状态消息,无论成功与否;如果“tripwire”服务在可配置的时间内没有收到来自 VIP 的任何消息,它就可以向某人发送警报。
(我所设想的和我概述的第一种方法之间的区别在于,服务仅在异常情况下发送消息,而不是每天发送状态正常/OK 的消息)。
如果 Nagios 在 N 天内没有收到某个服务/设备/进程的消息,是否可以设置它来发送这样的警报?还有其他工具具有此功能吗?
答案1
Nagios 完全支持您想要的功能。查看被动检查和新鲜基本上,您为作业定义一个主机和服务,并告诉 Nagios 该服务是被动的,并且具有特定的新鲜度阈值(例如 26 小时)。每当您的进程运行时,让它向 Nagios 提交一个“OK”结果。Nagios 会跟踪 OK 的提交时间,如果 26 小时内没有发布任何消息,它将发布通知。
该页面上有一个示例。
答案2
Nagios 只是运行命令并查看结果代码。这意味着 Nagios 可以监控任何事物,假设您可以编写一个返回适当状态的命令。
就你的情况而言,如果你的进程可以写入文件,那么你可以使用普通的 Nagios检查文件年龄插件,如果文件在一定时间内没有被修改,它就会发出警报。
当然,您也可以让 Nagios 检查邮箱,如果未定期收到消息,则生成警报。
答案3
为了详细说明 Jon 所说的内容,您可以使用 Nagios“被动”模式服务检查以及新鲜度检查来实现此目的。被动模式服务检查类似于 SNMP 陷阱,因为它们可以异步发送到 Nagios 服务器。
Nagios 有一个 NSCA(Nagios 服务检查接受器)插件,用于从远程主机发送/接收这些被动服务检查: http://exchange.nagios.org/directory/Addons/Passive-Checks/NSCA-%252D-Nagios-Service-Check-Acceptor/details
成功运行结束后,您的 VIP 可以设置为运行 send_ncsa 并发送制表符分隔的消息,例如:
printf "VIP_Host_Name\tVIP_Health\t0\tOK\n" | send_ncsa -H nagios_server
如果您的 VIP 遇到某种问题,那么您可以发送适当的警报:
printf "VIP_Host_Name\tVIP_Health\t1\tUseful Warning Message\n" | send_ncsa -H nagios_server
在您的 Nagios 服务器上有一些配置,例如:
define service {
service_description VIP_Health
active_checks_enabled 0
passive_checks_enabled 1
host_name VIP_Host_Name
check_freshness 1
freshness_threshold 99000
check_command vip_overdue
}
为了在超出 freshness_threshold(自上次收到该服务的任何信息以来的秒数)时无条件发出警报,请配置一个名为 vip_overdue 的新 Nagios check_command,该命令将始终以 CRITICAL 状态和相关错误消息退出,例如:
#!/bin/bash
echo "CRITICAL: VIP is overdue"
exit 2