我有一个 NAGIOS 检查,它监视 Windows 机器上的虚拟内存,此检查返回所有使用的虚拟内存(物理+页面文件的最大大小)。
这不是我想要的,我试图搜索一些仅监视 Windows 机器上的页面文件使用情况的检查,但没有发现任何有趣的东西。
您是否知道任何 SNMP 检查可以监控 Windows 是否使用页面文件?
答案1
威盛
您可以使用安装在 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:\"
现在创建 Nagios 插件。使用 wmic 的示例在这儿。 这是如何创建自己的 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
简单网络管理协议
如果你更喜欢 SNMP,你需要安装 WMI-to-SNMP 网关,例如SNMP Informant - 高级在您的 Windows 计算机上,能够收集包括内存和交换在内的系统信息。本质上,此工具提供SNMP MIB用于系统级 WMI 检测,从而允许任何 SNMP 管理站查询 WMI 数据。它支持Windows XP/Vista/2000/2003 和 2008 服务器并允许您访问所有(超过 2000 个)计数器的数据。
客户端
使用NS客户端++在 Windows 上进行监控页面文件系统大小。您需要安装 NSClient++ 作为服务。使用此插件,您还可以监控 Windows 机器的所有其他参数。例如,您可以监控可用内存。无需在系统配置文件Windows 机器上的 config 文件。
检查 pagefile.sys 的大小并确保它保持在 1 GB 以上。示例命令:
CheckFileSize ShowAll MinWarn=1G MinCrit=512M File=c:/pagefile.sys
Nagios 配置:
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++ 在主机端插入。
答案2
是的,遗憾的是,我想您最终会安装 nsclient++。
我的第一个想法是编写一个 vbscript 或 powershell 脚本来检查页面文件的大小,但我的第一次尝试返回了空结果,因为 Windows 正在管理我的页面文件。显然,这是很常见的事情。
然而,这个插件看起来有用。它也比我尝试的快速涂鸦要全面得多。也许这会解决你的问题。
答案3
您没有说明您使用的是哪个插件,但没有理由不能使用 SNMP 来检查“虚拟内存”的使用情况。例如,当您1.3.6.1.2.1.25.2
使用 SNMP 针对 Windows 2008 服务器遍历此树 () 时,您将看到包含以下内容的输出:
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 memory
值结合virtual memory
到了一次检查中?
也许你只是需要一个不同的 SNMP 插件。有一个Nagios Exchange 上的整个内存类别,包括一些明确列出 Windows 用途的产品。货比三家。
如果您找不到可以满足您需要的 SNMP 插件,还有其他选择...
由于您声明无法使用 Nagios 代理 (nsclient++),因此更好的方法是使用 WMI。Microsoft 仅实现了最低限度的 SNMP 支持,但您可以通过 WMI 检查有关 Windows 服务器的所有内容。 他们有一个完整的 WMI 对象用于页面文件的使用,例如。
Nagios Exchange 上有很多 WMI 检查(或监控交换),例如检查wmiplus,检查wmic或者(如果你正在处理许多 Windows 机器)也许nagios-wsc。
这是有关正确设置 WMI 的一些信息用于远程访问。
你可能想读一下这个问题;在这种情况下,您从 SNMP 获得的数字似乎可能不准确。
答案4
NSClient++ 0.4.3 有一个内置的 check_pagefile,可用于监视页面文件的利用率。