Windows-Server-2016

Zabbix 發現 JSON 錯誤

  • April 30, 2018

我有一個 Windows 伺服器的 Zabbix 發現規則來執行一個 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 的解決方法?

我找到了一個有效的解決方案。原來有一個 cmd.exe 的 Autorun 系統資料庫項在chcp 1252您執行命令時正在執行,導致它回顯該消息。

我只是完全刪除了HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor\Autorun密鑰,並且在我的命令開頭不再有“活動程式碼頁”消息。

引用自:https://serverfault.com/questions/909754