我正在尝试使用 Nagios (3.0.1) 监视 MSMQ 队列计数器。远程服务器正在运行 NC_Net。check_command 配置如下所示:
check_command check_nt!COUNTER!-l "\\MSMQ Queue(servername\\private$\\queuename)\\Messages in Queue","%.f messages in MSMQ queue" -w 5 -c 10
这不管用。我认为美元符号需要转义,但我不知道该怎么做。
本文建议“$$”,即。
check_command check_nt!COUNTER!-l "\\MSMQ Queue(servername\\private"$$"\\queuename)\\Messages in Queue","%.f messages in MSMQ queue" -w 5 -c 10
但那不管用。我试过其他几种方法(反斜杠、单引号等)。
有什么建议么?
编辑:
我已经通过命令行进行了一些测试,这是我认为是 $ 导致问题的原因之一。以下方法有效:
./check_nt -H hostip -v COUNTER -l "\\MSMQ Queue(Computer Queues)\\Messages in Queue","%.f messages in MSMQ queue" -w 5 -c 10
但这不行:
./check_nt -H hostip -v COUNTER -l "\\MSMQ Queue(servername\\private$\\queuename)\\Messages in Queue","%.f messages in MSMQ queue" -w 5 -c 10
我也使用过 ECHO 来查看这些命令如何扩展,但这对我没有帮助。
编辑:
原来它不是美元符号。见下文。
答案1
您可以在 nagios.cfg 中启用完整调试,以查看命令实际扩展为什么,这将向您显示美元符号是否确实是问题所在。为此,请设置以下内容:
debug_level=-1
debug_verbosity=2
# DEBUG FILE
debug_file=/usr/local/nagios/var/nagios.debug
max_debug_file_size=1000000
如果您进行大量检查,则需要设置最大调试文件大小,因为在该详细程度和级别下日志会很快填满。
他们也许(例如):
sudo /etc/init.d/nagios reload
然后,您需要在跟踪日志的同时运行 check。您可能还想使用类似“check_nt”的命令将 tail 传送到 grep,这样可以减少噪音。
答案2
我相信您需要使用 \ 来转义字符,但以下链接显示您可能需要两个 \
希望这有帮助 ->关联<-
答案3
我发现远程服务器上的 NC_Net 会记录到 Windows 事件日志中。查看错误后,我开始认为这不是美元符号的问题:
我运行了几个测试(我预计它们会失败)。首先,我将计数器名称指定为“\MSMQ Queue(服务器名称)\Messages in Queue”
产生的错误是:
Exeption occured during Counter check :Instance 'servername' does not exist in the specified Category.::>\MSMQ Queue(servername)\Messages in Queue
在这种情况下,它找不到计数器实例。对于第二个,我指定了“\MSMQ Queue(servername\test1)\Messages in Queue”
Exeption occured during Counter check :Could not locate Performance Counter with specified category name 'MSMQ Queue', counter name 'test1)\Messages in Queue'.::>\MSMQ Queue(servername\test1)\Messages in Queue
在这种情况下,它无法找到计数器。
在我看来,NC_Net 似乎因为“servername\test1”中的 \ 而以不同的方式解析计数器名称。
编辑:
问题是由于计数器实例名称中的 \ 造成的。我发现有一种替代语法可以指定计数器名称,因此以下内容有效:
^MSMQ Queue^servername\\private\$\\queuename^Messages in Queue