У меня есть правило обнаружения Zabbix для серверов Windows, чтобы запустить сценарий PowerShell и вернуть имена экземпляров SQL и базы данных. Эта версия Zabbix агента (3.4.6) и конфигурация отлично работают для обнаружения на десятках других серверов, но по какой-то причине этот сервер, в частности, добавляет дополнительный текст к выходным данным, что делает JSON недействительным.
Вот пример zabbix_get для этого хоста:
[root@zabbix]# zabbix_get -s host1 -k mssql.db.discovery
Active code page: 1252
{
"data":[
{ "{#INST}" : "Instance1", "{#DBNAME}" : "Database1" },
{ "{#INST}" : "Instance1", "{#DBNAME}" : "Database2" }
]
}
Сообщение «Активная кодовая страница: 1252» нарушает JSON. У меня такое ощущение, что это проблема с кодировкой, но я не уверен, где это могло быть. Все конфиги и скрипты были скопированы из того же источника, из которого рабочие серверы получили свои, поэтому я не знаю, в чем разница.
Что интересно, это не ограничивается сценариями PowerShell. Выполнение простой команды также генерирует сообщение:
[root@zabbix]# zabbix_get -s host1 -k system.run["hostname.exe"]
Active code page: 1252
host1
И еще одно замечание - бег zabbix_agentd.exe -t "mssql.db.discovery"
на рассматриваемом хосте также выдает такое же сообщение. Но выполнение сценария отдельно в Powershell ISE на этом хосте не создает этого сообщения.
У меня такой вопрос - знает ли кто-нибудь способ остановить добавление этого сообщения Windows / Zabbix или обходной путь, чтобы он не нарушил мой JSON?
Я нашел решение, которое сработало. Оказывается, был ключ реестра Autorun для запущенного cmd.exe chcp 1252
каждый раз, когда вы запускаете команду, заставляя ее повторять это сообщение.
Я просто удалил HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\Autorun
key, и никаких сообщений «Активная кодовая страница» в начале моих команд.