使用Nagios进行Windows页面文件监控

我有一个NAGIOS检查,监视Windows机器上的虚拟内存,这个检查返回所有使用的虚拟内存(物理+最大的页面文件大小)。

这不是我想要的,我试图search一些检查,只监视在Windows机器上的页面文件的使用情况,但我没有发现什么intersting。

你知道任何SNMP检查,监视页面文件是否被使用或不是由Windows?

WMI

您可以使用安装在Linux机器上的WMI客户端直接访问WMI参数:

手动编译和安装wmi-client软件包,或使用www.orvant.com上编译的软件包,它似乎也能与Ubuntu的更新版本(14.04 64位)一起工作。

这是一个从命令行使用wmic的例子:

wmic -Uuser%pass //192.168.0.2 "SELECT FileSize FROM Win32_PageFile WHERE Path=c:\" 

现在创buildNagios插件。 在这里使用wmic的例子。 这里是指导如何创build自己的Nagios插件 ,改变它与wmic工作。 你会有这样的东西:

 if [ "$1" = "-w" ] && [ "$2" -gt "0" ] && \ [ "$3" = "-c" ] && [ "$4" -gt "0" ] && [ "$5" = "-h" ] && [ "$6" != "" ] && [ "$7" = "-u" ] && [ "$8" != "" ] && [ "$9" = "-p" ]; then memPfSize=`wmic -U$8%$10 //$6 "SELECT FileSize FROM Win32_PageFile WHERE Path=c:\" | grep AllocatedBaseSize | awk -F'=' '{print $2}'` if [ "$memPfSize" -ge "$4" ]; then echo "Memory: CRITICAL Pagefile: $memPfSize MB - RES: $memPfSize= MB used!|VIRT=$(($memPfSize*1024*1024));;;; RES=$(($memPfSize=*1024*1024));;;;" $(exit 2) elif [ "$memPfSize" -ge "$2" ]; then echo "Memory: WARNING Pagefile: $memPfSize MB - RES: $memPfSize= MB used!|VIRT=$(($memPfSize*1024*1024));;;; RES=$(($memPfSize=*1024*1024));;;;" $(exit 1) else echo "Memory: OK Pagefile: $memPfSize MB - RES: $memPfSize= MB used!|VIRT=$(($memPfSize*1024*1024));;;; RES=$(($memPfSize=*1024*1024));;;;" $(exit 0) fi else echo "check_memPfSize v1.0" echo "check_memPfSize -w Warning -c Critical -h Host -u Win-User -p Password" echo "example of usage:" echo "check_memPfSize -w 1024 -c 2048 -h 192.168.0.2 -u Administrator -p adminpassword" exit fi 

您可以通过Linux从Python访问WMI 。

SNMP

如果您更喜欢SNMP,则需要在Windows计算机上安装SNMP Informant – Advanced之类的WMI至SNMP网关,以便收集包括内存和交换在内的系统信息。 本质上,该工具为系统级别的WMI工具提供了SNMP MIB ,从而允许任何SNMPpipe理工作站查询WMI数据。 它在Windows XP / Vista / 2000/2003和2008服务器上受支持,并允许您访问全部(超过2000个)计数器中的数据。

NSClient

在Windows上使用NSClient ++来监视pagefile.sys大小。 您需要安装NSClient ++作为服务。 有了这个Windows机器的插件,你也可以监视所有其他的参数。 例如,您可以监视可用内存。 Windows机器上的NSC.iniconfiguration文件中不需要市长调整。

检查pagefile.sys的大小,并确保它保持在1千兆字节以上。 示例命令:

 CheckFileSize ShowAll MinWarn=1G MinCrit=512M File=c:/pagefile.sys 

Nagiosconfiguration:

 define command { command_name <<CheckFileSize>> command_line check_nrpe -H $HOSTADDRESS$ -p 5666 -c CheckFileSize -a ShowAll MinWarn=$ARG2$ MinCrit=$ARG1$ File=c:/pagefile.sys } 

从命令行(与NRPE):

 check_nrpe -H IP -p 5666 -c CheckFileSize -a ShowAll MinWarn=1G MinCrit=512M File=c:/pagefile.sys 

或者在主机端使用NSClient ++的check_paging_file插件。

是的,不幸的是,我想你最终会安装nsclient ++。

我的第一个想法是只写一个VBScript或PowerShell脚本来检查页面文件的大小,但我的第一次尝试返回空结果,因为Windows正在pipe理我的页面文件。 显然,这是一件很平常的事情。

但是, 这个插件似乎工作。 这也比我尝试的快速涂鸦更全面。 也许这会解决你的问题。

你没有说明你正在使用哪个插件,但没有理由不能使用SNMP来检查“虚拟内存”的使用情况。 例如,当您使用SNMP在Windows 2008服务器上漫游此树( 1.3.6.1.2.1.25.2 )时,您将看到包含如下内容的输出:

 HOST-RESOURCES-MIB::hrStorageDescr.4 = STRING: Virtual Memory HOST-RESOURCES-MIB::hrStorageDescr.5 = STRING: Physical Memory <snip> HOST-RESOURCES-MIB::hrStorageSize.4 = INTEGER: 449485 HOST-RESOURCES-MIB::hrStorageSize.5 = INTEGER: 392141 <snip> HOST-RESOURCES-MIB::hrStorageUsed.4 = INTEGER: 85263 HOST-RESOURCES-MIB::hrStorageUsed.5 = INTEGER: 104233 

看来也许你正在使用的插件将physical memoryvirtual memory价值结合成一张支票?

也许你只需要一个不同的SNMP插件 。 Nagios Exchange上有一整个“内存”类别 ,其中包括一些明确列出Windows使用情况的内容。 逛逛。

如果你不能find一个你想要的SNMP插件,还有其他的select…

由于您声明使用Nagios代理(nsclient ++)是不可能的,所以更好的方法是使用WMI。 Microsoft只实现最低限度的SNMP支持,但您可以通过WMI从字面上检查有关Windows服务器的所有信息。 例如,他们有一个完整的WMI对象用于页面文件的使用 。

Nagios Exchange (或监控交换机) 上有许多WMI检查可用 ,例如checkwmiplus , check_wmic或(如果您正在处理许多Windows操作系统),也许是nagios-wsc 。

这里有一些关于正确设置WMI进行远程访问的信息。

你可能想把这个问题看一下 , 在这种情况下,您从SNMP获得的数字似乎可能不准确。

这对你好吗?

命令:

 define command{ command_name check_win_memusage command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -p 5666 -c checkMem -a MaxWarn=$ARG1$ MaxCrit=$ARG2$ ShowAll type=$ARG3$ } 

服务:

 check_win_memusage!90%!95%!paged 

NSClient ++ 0.4.3有一个内置的check_pagefile,可以用来监视页面文件的使用情况。