在Nagios中,很容易检查过去48小时内发生的日志消息,并发出警报。
但是,如何configurationNagios,在过去48小时内没有发生信息时,它会发出警报声? 为什么这么难?
我正在使用“检查WMI Plus”插件(无需代理)来检查窗口框上的事件日志。
我想这个问题真的是关于如何构造WMI查询,以便在没有结果返回时返回true。 (我会添加“WQL”或“WMI”或两者作为标签的问题)。
获得WMI查询体验的最好方法之一是从Microsoft下载WMI Code Creator。 当然,你必须在一个窗口框中运行它,但是你可以使用GUI将你需要的查询input到Nagios插件中。
http://www.microsoft.com/en-us/download/confirmation.aspx?id=8572
用于WMI的查询语言是WMI查询语言(WQL),与SQL类似,您可以查询过去48小时内是否存在特定的事件代码。 以下是有关WQL可接受的语法的一些有用链接。
WQL关键词: 链接
WQL运营商: 链接
WQL支持的date格式: 链接
命名空间:root \ CIMV2
事件类:[具体取决于你在找什么]
TargetClass:Win32_NTLogEvent 链接
您将使用最常见的root \ CIMV2命名空间,您需要的类是Win32_NTLogEvent类,以获取您正在查找的信息。 其余的只是查询的结构。
由于我们不知道您要查找哪个特定事件,因此您可以使用一些属性来更改查询。
日志文件=你想看哪个事件日志? “应用程序”或“系统”等…
用户=谁生成的事件? “NT AUTHORITY \ SYSTEM”或者你正在寻找某个人。
就像使用TimeGenerated属性的SQL一样,可以使用WHERE子句缩小查询范围。 TimeGenerated是IntervalFormat(或UTC格式) 链接 。
以下是使用WMI处理date和时间的快速指南。 链接
WHERE DateDiff(“hh”,TimeGenerated,GetDate())<48
所以把所有这些放在一起看起来应该像这样。
SELECT * FROM Win32_NTLogEvent WHERE EventCode=4001 AND DateDiff(hh,TimeGenerated,GetDate()) < 48
4001只是一个编号,查询你想要查询的事件ID。 ;)
您可以添加额外的AND语句以包含属性以根据需要缩小结果。 这除了菲尔的答案应该让你到你需要的地方。
我没有很多WMI的经验,所以我不确定如何从事件日志中获取事物的查询,但是假设您可以编写该部分(并指出可以),则可以使用Check WMI Plus设置匹配日志消息数量的下限阈值,如下所示:
[section check] query=SELECT * FROM <your query here ...> test=_ItemCount display=_DisplayMsg||~|~| - || display=_ItemCount|# perf=_ItemCount||Log Entries
有了这个,你可以用-c 1:运行check_wmi_plus.pl -c 1:如果find的日志条目less于一个,就返回一个CRITICAL状态。 (有关检查WMI Plus中的阈值的更多信息,请参阅“ 能否给我示例警告/严重性标准? ”)
这并不难。 你可以结合你的典型日志检查和标准的否定插件来实现这一点。