Nagios
很容易检查过去 48 小时内发生的事情LogMessage
并发出警报。不过,我想要的是配置为在 48 小时内未Nagios
出现特定消息时发出警报。
谁能指出我正确的方向?
我正在使用“Check WMI Plus”插件(不需要代理)来检查 Windows 框上的事件日志。
Nagios
很容易检查过去 48 小时内发生的事情LogMessage
并发出警报。不过,我想要的是配置为在 48 小时内未Nagios
出现特定消息时发出警报。
谁能指出我正确的方向?
我正在使用“Check WMI Plus”插件(不需要代理)来检查 Windows 框上的事件日志。
在不知道您的确切“具体信息”是什么的情况下,很难给出具体答案,但我们可以这样做:
如果在过去 48 小时内没有看到“处理 Windows 组策略失败”错误或警告事件,我将引发 CRITICAL 事件。
您可以使用 -w 和 -c 选项在 check_wmi_plus 中定义 WARNING 和 CRITICAL 事件的标准。
从check_wmi_plus.pl --help | less -i
我们那里得到帮助,我们可以找到 checkeventlog 选项。
有两个技巧:
@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 % == 搜索所有事件日志
-o 2 == 仅警告和错误严重性
-3 48 == 过去 48 小时
-4 eventSpecial == 参考我刚刚创建的 events.ini 中的部分
-c @0:0 == 如果恰好出现 0 次,则引发 CRITICAL
使用此命令,如果在此期间有消息,我会得到:
正常 - 3 个严重级别事件:“错误,警告”,在过去 48 小时内从 % 事件日志中记录。(列表在下一行。显示的字段是 - Logfile:TimeGenerated:SeverityLevel:EventId:Type:SourceName:Message)|'Event Count'=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 无法解析计算机名称。这可能是由以下一种或多种原因引起的:如果您在几个小时内都没有看到成功消息,请联系您的管理员。系统:20130603220259.894040-000|错误:1055:0:Microsoft-Windows-GroupPolicy:组策略处理失败。Windows 无法解析计算机名称。这可能是由以下一种或多种原因引起的:如果您在几个小时内都没有看到成功消息,请联系您的管理员。系统:20130603220259.894040-000|错误:1055:0:Microsoft-Windows-GroupPolicy:组策略处理失败。Windows 无法解析计算机名称。这可能是由以下一种或多种原因引起的:
a) 当前域控制器上的名称解析失败。b) Active Directory 复制延迟(在另一个域控制器上创建的帐户尚未复制到当前域控制器)。
其中不包括关键事件。
如果没有,我得到这个:
CRITICAL - [由 0:0 范围内的 _ItemCount 触发] - 严重级别的 0 个事件:“错误,警告”,在过去 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:\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%%