NSClient ++:nscp命令行checkcpu返回"找不到计数器:cpu"

时间:2014-07-15 21:13:44

标签: windows nagios

这是在Windows Server 2003 R2(Enterprise x64 Edition)上全新安装的NSClient ++,使用最新的稳定版 NSCP-0.4.1.105-x64.msi

D:\Program Files\NSClient++> nscp --version
000000014033F2A0, Version: 000000014033F248, Platform: 000000014033F218

我试图弄清楚如何使用 checkcpu 命令。首先,我正在尝试 alias_cpu ,它在 nsclient.ini 中预先定义为:

alias_cpu = checkCPU warn=80 crit=90 time=5m time=1m time=30s

这是我从控制台运行的命令:

D:\Program Files\NSClient++> nscp client --query alias_cpu
e tem\PDHCollector.cpp:185  Counter not found: cpu
ERROR: Could not get data for 5m please check log for details|

nsclient.log 显示:

2014-07-15 13:53:11: e:..\..\..\..\nscp\modules\CheckSystem\PDHCollector.cpp:185: Counter not found: cpu

切换实际命令的别名会产生相同的结果和日志条目:

D:\Program Files\NSClient++> nscp client --query checkCPU warn=80 crit=90 time=5m time=1m time=30s
e tem\PDHCollector.cpp:185  Counter not found: cpu
ERROR: Could not get data for 5m please check log for details|

其他形式的命令名称​​ checkcpu check_cpu 也会产生相同的结果:

nscp client --query checkcpu warn=80 crit=90 time=5m time=1m time=30s
nscp client --query check_cpu warn=80 crit=90 time=5m time=1m time=30s

似乎配置正确:

D:\Program Files\NSClient++> nscp sys --validate
Listing configured counters
---------------------------
cpu = \238(_total)\6: ok-rate(0)
memory commit bytes = \4\26: ok(1.14462e+009)
memory commit limit = \4\30: ok(4.16999e+010)
uptime = \2\674: ok(680227)
---------------------------
Listed 4 of 4 counters.

我可以查询其他计数器:

D:\Program Files\NSClient++> nscp client --query checkcounter "\TCPv4\Connections
 Established"
OK all counters within bounds.|'\TCPv4\Connections Established'=22

修改

我在文档 NSClient ++ Reference Manual.pdf 中找到了有关配置CheckSystem插件的部分。它说CPU负载的默认计数器是 \ Processor(_total)\%Processor Time ,我可以直接访问它:

D:\Program Files\NSClient++> nscp client --query checkcounter "\Processor(_total)\% Processor Time"
OK all counters within bounds.|'\Processor(_total)\% Processor Time'=0

知道 checkcpu 出了什么问题吗?

2 个答案:

答案 0 :(得分:0)

我相信你现在已经弄明白了,但万一其他人来了...... 我没有能够完全重复你的问题,因为我没有2003 64bit主机,但它足够相似,我觉得它有帮助。

我的Windows 2008 Server R2 nsclient安装与您的NSCP-0.4.1.105-x64.msi相同

C:\Program Files\NSClient++>nscp --version
000000014033F2A0, Version: 000000014033F248, Platform: 000000014033F218

我的配置,关于你的cpu和别名,与我没有从原始配置更改它们完全相同。 命令在客户端模式下运行:

C:\Program Files\NSClient++>nscp client --query alias_cpu
e tem\PDHCollector.cpp:215  Invalid frequency: 0
ERROR: Could not get data for 5m please check log for details|

我将您的命令问题与您的命令进行了匹配。除了错误不同之外,我的结果与您为简洁起见未包含的其他测试相同。现在,我发现这很奇怪,因为这个客户端从我的nagios服务器工作正常,并通过alias_cpu报告cpu统计信息就好了。所以我试图查找我的错误,并从nsclient论坛http://www.nsclient.org/forums/topic/old-1169/

中找到此论坛帖子

关于使用客户端模式的重要摘录,Michael Medin本人

  

不确定你要做什么,客户端模式有点不稳定   检查CPU / meme / *,因为它们需要运行集合线程   (在客户端模式下运行时通常不会这样做。)

     

更好的选择是:   {{{nscp test

     

...

     

check_cpu time = 5m MaxWarn = 80}}}

哪个适合我。所以答案似乎是客户端应该按预期工作并尝试运行命令,因为我们两者都可能具有不一致和不可靠的结果。

答案 1 :(得分:0)

感谢Matt,确定为什么 nscp nsclient 不能与 check_cpu 命令一起使用。

我发现通过更改使用 nrpe 模块而不是 nsclient ,以下命令可用于监视本地系统上的CPU负载:

nscp nrpe --exec query -H 127.0.0.1 -c alias_cpu 

请注意,这需要在nsclient.ini中设置 NRPEServer = 1 ,并且要定义您正在执行的命令,例如:

[/settings/external scripts/alias]
alias_cpu = checkCPU warn=100 crit=100 time=1 warn=95 crit=99 time=5 warn=90 crit=95 time=15