Server : Ubuntu 22.04.2 LTS
PHP Version :PHP 8.1.2-1ubuntu2.13 (cli)
Web Server : Apache/2.4.52
Database Server : mysql Ver 8.0.34-0ubuntu0.22.04.1
Zabbix: 6.0.19
Server: Windows Server 2019
Database Server : MS SQL 2016
在zabbix 選擇 Templates/Databases,並勾選 MSSQL by ODBC。
有些資料能撈到,如MSSQL: Uptime、Version、State和backup等,
但大多都是空白跟驚嘆號,而驚嘆號錯誤分類如下:
1.Preprocessing failed...
2.Cannot evaluate function: not enough data at...
想請問各位高手,這些問題是出在哪裡呢? 謝謝!!
Zabbix 透過 ODBC 範本監控 MSSQL 取不到資料,常見有以下幾種狀況:
1) 權限不足問題
針對這個問題可以參考 如何在 Zabbix 中使用 MSSQL by ODBC 監控範本,裡面已經有權限範例供大家參考。
2) SQL Server 安裝時使用非預設的 Instance Name,造成預處理失敗。
找一個預處理失敗的項目,例如 Log bytes flushed per second。
查看 Preprocessing,可以得知是透過 JSONPATH 的方式取得監控項,counter_name=='Log Bytes Flushed/sec'
$[?(@.object_name=='{$MSSQL.INSTANCE}:Databases' && @.counter_name=='Log Bytes Flushed/sec' && @.instance_name=='{#DBNAME}')].cntr_value.first()
接下來我們會需要 MSSQL: Get performance counters 的資料
我們可以直接到資料庫執行 SQL query 或者到該主機執行 MSSQL: Get performance counters 取得結果。
將 RESULT 的資料取出查找,實際上是有 Log Bytes Flushed/sec 的項目的。
其中 object_name 為 "MSSQL$SQL2016:Databases",而 SQL2016 則為該資料庫的 Instance Name。
但是 Zabbix 預設使用的 Instance Name 為 SQLServer,所以造成 Preprocessing failed 找不到該項目。
只需要在主機的 Macros > Host macros 添加您的 Instance Name 即可
例如 {$MSSQL.INSTANCE} => MSSQL$SQL2016
等監控項目能夠正常抓到,Not enough data 造成的 Cannot evaluate 自然也就消失了。
3) 資料長度超過 65,535 被截斷
主要發生在 Zabbix Proxy 代理伺服器,也是最靠北的一種情況。
針對這個問題可以參考 如何在 Zabbix Proxy 中使用 MSSQL by ODBC 監控範本,裡面已經有詳細的解法供大家參考。