48小时内未收到消息时的Nagios通知



Nagios中,很容易检查过去48小时内发生的LogMessage并发出警报。但是,我想要的是将Nagios配置为在48小时内没有出现特定消息时发出警报。

谁能给我指个正确的方向?

我正在使用"检查WMI Plus"插件(不需要代理),以检查windows框上的事件日志。

如果不知道你确切的"具体信息"是什么,很难给出一个具体的答案,但我们可以这样做:

当我在过去48小时内没有看到"处理windows组策略失败"错误或警告事件时,我将引发一个CRITICAL事件。

您可以使用-w和-c选项来定义check_wmi_plus中的WARNING和CRITICAL事件的标准。

check_wmi_plus.pl --help | less -i我们得到帮助,我们可以找到checkeventlog选项。

有两个技巧:

  1. checkeventlog只有一个字段_ItemCount,所以你不需要指定它
  2. 您要指定一个取值范围,只包括0 -所以使用@0:0

首先,在events.ini文件中定义一个特定的部分。我的是:/opt/nagios/bin/plugins/check_wmi_plus.d/events.ini

我添加了这个:

[eventSpecial]
im=Group Policy failed

我在[eventdefault]部分下面添加了它。

基本上,im=表示"包含消息"——如果没有指定它,则包含所有内容,因此通过指定它,我已经说过"只包含与此正则表达式匹配的消息"。

那么你需要checkeventlog

的命令我使用

:

/opt/nagios/bin/plugins/check_wmi_plus.pl -H HOST -u USER -p PASS  -m checkeventlog -a % -o 2 -3 48 -4 eventSpecial -c @0:0

对于可选参数(同样使用——help选项):

-a % ==搜索所有事件日志

- 0 2 ==仅限警告和错误级别

-3 48 == last 48 hours

-4 eventSpecial ==引用events.ini中我刚刚创建的部分

-c @0:0 ==抛出一个CRITICAL

使用此命令,如果在此期间有消息,我得到:

OK -记录了严重性级别为"错误,警告"的3个事件最近48小时的%事件日志。(清单在下一行。字段所示为-日志文件:TimeGenerated: SeverityLevel: EventId:类型:SourceName:消息)|"事件数' = 3;0;System:20130604195600.378642-000|Error:1129:0:Microsoft-Windows-GroupPolicy:The processing of GroupPolicy failed because of lack of network连接到域控制器。这可能是暂时的条件。一旦机器得到,就会生成一条成功消息已成功连接域控制器和组策略处理。如果您在几个小时内没有看到成功消息,那么请联系管理员。System:20130604055521.084809-000|Error:1129:0:Microsoft-Windows-GroupPolicy:The processing of GroupPolicy failed because of lack of network连接到域控制器。这可能是暂时的条件。一旦机器得到,就会生成一条成功消息已成功连接域控制器和组策略处理。如果您在几个小时内没有看到成功消息,那么请联系管理员。System:20130603220259.894040-000|Error:1055:0:Microsoft-Windows-GroupPolicy:The processing of GroupPolicy failed。Windows无法解析电脑的名字。这可能是由以下情况之一引起的:
a)当前域控制器名称解析失败。b)Active Directory复制延迟(在另一个帐户上创建的帐户)域控制器尚未复制到当前域控制器).

不包含关键事件。

如果没有,我得到这个:

CRITICAL - [Triggered by _ItemCount in range 0:0] - 0个事件(s)严重性等级:"错误,警告",在过去4小时内被记录从%事件日志中。|"事件计数"= 0,0;

包含关键事件,因为日志文件中没有符合我的标准的条目。

您可以使用适当的$USER8$宏定义一个标准的Nagios命令,将其包含在您的配置中。

您应该尝试创建一个简单的DOS脚本,每小时启动一次以监视nagios,并在看到2 nagios.exe时重新启动它。下面是杀死nagios.exe服务并重新启动它的DOS脚本。

-------- CheckNagios.bat --------

@echo off
set mypgm=nagios.exe
REM GET date/time stamp
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b)
:checkNagios
rem get number of nagios processes
for /f %%i in ('c:windowssystem32tasklist.exe ^| find /i /c "%mypgm%"') do set /a numProc=%%i
echo Last Check: %mydate%_%mytime%
ECHO # of processes = %numProc%
if %numProc% GTR 1. (goto kill) else goto end
:kill
c:windowssystem32taskkill.exe /f /IM %mypgm%
REM restart nagios
net start Nagwin_Nagios
REM restart other nagios processes
rem for /f %%x in ('net start ^| findstr /i "nagwin_"') do net stop %%x
:end
echo Exiting program.
echo =================
rem SCHEDULE TASK TO RUN EVERY HOUR and pipe to a logfile
rem SCHTASKS /create /TN "Check Nagios" /TR "c:icwbincheckNagios.bat >> c:checknagios.log 2>&1" /SC HOURLY /ST 16:00 /MO 1 /RU DOMAINUSERNAME /RP PASSWORD
REM store last check that will be used by emailNagios.bat using blat.exe
set LAST_NAGIOS_CHECK=%%mydate%%_%%mytime%%

最新更新