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

时间:2013-05-26 14:47:23

标签: nagios

Nagios中,可以很容易地检查过去48小时内发生了LogMessage并发出警报。不过,我希望将Nagios配置为在48小时内发生特定消息 时发出警报。

有人能指出我正确的方向吗?

我正在使用“Check WMI Plus”插件(不需要代理)来检查Windows框中的事件日志。

2 个答案:

答案 0 :(得分:2)

如果不知道您的具体“具体信息”是什么,很难给出具体答案,但我们可以这样做:

当我在过去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
  3. 首先,在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%==搜索所有事件日志

    -o 2 ==仅警告和错误严重性

    -3 48 ==持续48小时

    -4 eventSpecial ==参考我刚刚创建的events.ini中的部分

    -c @ 0:0 = =如果恰好有0次出现,则提出一个关键

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

      

    确定 - 严重级别的3个事件:“错误,警告”,记录在   %事件日志的最后48小时。 (列表在下一行。字段   显示的是 -   日志文件:TimeGenerated:SeverityLevel:事件ID:类型:SOURCENAME:消息)|“事件   计数'= 3; 0;   系统:20130604195600.378642-000 |错误:1129:0:Microsoft-Windows-GroupPolicy:由于缺少网络,组策略的处理失败   连接到域控制器。这可能是暂时的   条件。一旦机器到达,将生成成功消息   连接到域控制器和组策略已成功   处理。如果您在几个小时内没有看到成功消息,那么   联系您的管理员   系统:20130604055521.084809-000 |错误:1129:0:Microsoft-Windows-GroupPolicy:由于缺少网络,组策略的处理失败   连接到域控制器。这可能是暂时的   条件。一旦机器到达,将生成成功消息   连接到域控制器和组策略已成功   处理。如果您在几个小时内没有看到成功消息,那么   联系您的管理员   系统:20130603220259.894040-000 |错误:1055:0:Microsoft-Windows-GroupPolicy:组策略的处理失败。 Windows无法解析   电脑名称。这可能是由下列其中一项引起的:
      a)当前域控制器上的名称解析失败。 b)   Active Directory复制延迟(在另一个帐户上创建的帐户)   域控制器尚未复制到当前域   控制器)。

    其中不包含重要事件。

    如果没有,我明白了:

      

    CRITICAL - [由_ItemCount在0:0范围内触发] - 0个事件   严重级别:“错误,警告”,记录在过去4小时内   来自%事件日志。|'事件计数'= 0; 0;

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

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

答案 1 :(得分:-2)

你应该尝试这个并创建一个简单的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:\windows\system32\tasklist.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:\windows\system32\taskkill.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:\icw\bin\checkNagios.bat >> c:\checknagios.log 2>&1" /SC HOURLY /ST 16:00 /MO 1 /RU DOMAIN\USERNAME /RP PASSWORD

REM store last check that will be used by emailNagios.bat using blat.exe
set LAST_NAGIOS_CHECK=%%mydate%%_%%mytime%%