Я пытаюсь настроить мониторинг на нескольких экземплярах MSSQL, существующих на моих серверах Windows. Проблема здесь в том, что если имя службы содержит $
(например, MSSQL$PROD
), то команда check_nt вернет предупреждение о нулевом значении.
Ниже приводится пример того, что у меня есть в windows.cfg
define service{
use generic-service
host_name SERVERNAME
service_description MSSQL Service
check_command check_nt!SERVICESTATE!-d SHOWALL -l MSSQL$PROD
}
Я попытался заключить имя службы в "" (что работает с службами с пробелами) и поставить обратную косую черту перед $ в имени службы, но безуспешно. Кто-нибудь знает, можно ли это сделать?
Вы должны избежать $
с другим $
и заключите имя в одинарную кавычку:
define service{
use generic-service
host_name SERVERNAME
service_description MSSQL Service
check_command check_nt!SERVICESTATE!-d SHOWALL -l 'MSSQL$$PROD'
}
в качестве альтернативы вы можете опустить одинарные кавычки, используя MSSQL\$$PROD
. Мне первый звонок больше нравится;)
Крисси знает правильный ответ.
Я просто хочу упомянуть вариант, который может быть проще проанализировать: измените определение вашей команды, чтобы взять другое $ARG$
, после чего сложность этого вида экранирования обрабатывается в определении вашей команды, а не в каждой службе. Итак, теперь ваш сервис выглядит так:
check_command check_nt!SERVICESTATE!-d SHOWALL -l MSSQL!PROD
и в вашем command.cfg:
command_line /path/to/commmand --someopt value1 $ARG1$"$$"$ARG2$
По какой-то причине вам нужно "процитировать" его и удвоить знак $.
Например, имя службы для внутренней базы данных Windows - «MSSQL $ MICROSOFT ## SSEE».
Моя check_command:
check_command check_nt_srv!MSSQL"$$"MICROSOFT\#\#SSEE
Я пробовал ответы выше безрезультатно, а также пытаюсь отслеживать экземпляры SQL Server. Теперь, в 2017 году, похоже, что НЕ удвоение $ работает, пока вы сохраняете кавычки:
check_nt -H xx.xx.xx.xx -s "" -p 12489 -v SERVICESTATE -l 'MSSQL$BLAHBLAH' -d SHOWALL