使用 Nagios 监控 Windows 页面文件

使用 Nagios 监控 Windows 页面文件

我有一个 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

你可以从 Linux 通过 Python 访问 WMI

简单网络管理协议

如果你更喜欢 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,可用于监视页面文件的利用率。

相关内容