我正在考虑设置一个 Nagios(或者 OpsView)服务器来监控我们的网络。
我有一些外围设备,它们的 oid 架构不包含我想要监控的某些指标的节点。目前,我根据设备本身定期发送的状态电子邮件来监控指标。
是否可以设置 Nagios(或 Opsview)根据收到的电子邮件内容报告设备状态?
最终,我希望将其降到类似红色/绿色的状态。如果我能获得第三个(例如黄色)状态,表示尚未收到预期状态电子邮件,则可以获得加分。
如果 Nagios 和 Opsview 都不能做到这一点,我愿意听取建议。即使它只能做到这一点,我也会使用 Nagios 来完成其余/典型的网络监控任务。
谢谢大家。
编辑-根据要求,这是一个我想要解析/处理的电子邮件的[净化]示例:
Return-path: <[email protected]>
Envelope-to: [email protected]
Delivery-date: Fri, 28 Nov 2014 03:15:21 -0600
Received: from [xx.xx.xx.xx] (port=49676 helo=DiskStation)
by mailserver.example.com with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256)
(Exim ver x.xx)
(envelope-from <[email protected]>)
id 123456-000000-1Z
for [email protected]; Fri, 28 Nov 2014 03:15:21 -0600
Date: Fri, 28 Nov 2014 04:15:21 -0500
From: "Fifteen " <[email protected]>
To: <[email protected]>
Subject: =?UTF-8?B?RmlmdGVlb[snipped]
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Dear user,
Function X on Fifteen has been completed.
Task: Function X to server3
Target Server: server3.example.com (xx.xx.xx.xx)
Action Time: 2014/11/28 04:15
编辑 2 - 所以只是为了跟进@DanielAgans 的建议,目前这对我来说有点太本土化了。这有点超出我的技能范围和舒适区,但我真的希望有一种方法可以监控这些盒子,而不是手动查看和处理电子邮件。我真的希望找到某种 nagios 或 Opsview 插件。我的搜索和 Daniel 的评论让我感觉这可能是一个死胡同请求。
有人能确认 Nagios/Ops 确实不能满足我的需要吗?
当然,我们也愿意接受关于如何做到这一点的建议,尽管编程强度没有丹尼尔所建议的那么高。
谢谢。
答案1
我经常使用手写解析器和 来做这种事情send_nsca
。为了举例说明,我们继续使用名为 server3 的机器上的名为“function X”的函数。
我通常的做法是使用特定于相关服务的收件人地址 - 比如说[email protected]
。您可以在通用邮箱上执行此操作,但这意味着解析器中的逻辑更多(这意味着错误导致误报的可能性更大)并且意外删除发给人类的电子邮件的可能性更大。我让我的邮件服务器将地址接收到一个小程序中,例如用于 sendmail,在别名文件中:
functionXs3: "|/usr/local/bin/functionx"
反过来,/usr/local/bin/functionx
是一个体积小,重量轻脚本会查找成功/失败的特征标志并做出相应响应。我假设文本Function X on Fifteen has been completed
表示成功,文本缺失表示失败,因此解析器可能如下所示:
#!/bin/bash
grep "Function X on Fifteen has been completed" && \
( echo "server3 function X 0 success" | send_nsca -H nagios.example.com ) || \
( echo "server3 function X 1 failure" | send_nsca -H nagios.example.com )
这里并不适合介绍客户端的设置和配置send_nsca
,也不适合介绍服务器上的 NSCA 监听守护进程,但请注意,echo
上述语句中的空格组必须是单个 TAB,并且success
是failure
风味文本,它们将出现在 NAGIOS 的“状态信息”列中,以及任何适当配置的通知中。
在 NAGIOS 中,您可以相应地定义主机和服务:
define host{
use host-template
host_name server3
address 192.168.34.56
}
define service{
use passive-service-template
host_name server3
service_description function X
max_check_attempts 1
check_freshness 1
freshness_threshold 100000
}
注意host_name
和service_description
确切地匹配回显到 的前两个字段send_nsca
。freshness_threshold
应将 设置为比函数作业运行的正常频率稍大的值(以秒为单位);在我的例子中,该作业应该每天运行一次(86400 秒)。编写服务和主机模板必须主要作为练习,但作为指南,类似这样的内容将很有用:
define service{
name passive-service-template
use service-template
normal_check_interval 60
retry_check_interval 60
active_checks_enabled 0 ; passive checks already enabled
check_command check_dummy!2 "STALE SERVICE"
register 0
}
define command{
command_name check_dummy
command_line $USER1$/check_dummy $ARG1$
}
请注意用作check_dummy
新鲜度检查。当 NAGIOS 在过去几秒内没有收到被动服务通知时freshness_threshold
,它会调用此方法,它所做的就是发出带有状态文本“STALE SERVICE”的 CRITICAL 警报。这意味着,如果通知链因任何原因而默默失败 - 作业未运行、电子邮件未送达、解析脚本损坏、NSCA 失败 - NAGIOS 将向相应的收件人发出抱怨,以便调查问题。
这只能是答案的简要概述。我认为一些具体的配置示例可能会有所帮助,但完整的食谱是方式超出了 SF 答案的范围,所以请不要要求更多的配置细节。