在使用zabbix監控 sql server過程當中,發現了一個好的模板,分享以下:
https://share.zabbix.com/data...html
github:
https://github.com/MantasTume...git
效果以下:github
包含兩個sql
With SQL instance discovery 適用於多實例的sql server監控,未測試shell
Without SQL instance discovery 適用於單實例sql server監控,使用的模板,用在2008r2上,部分監控項不支持數據庫
此模板做者有更新,注意看別人的README和Documentation 內容。(老外作事真的是很細緻)windows
模板備份地址:
http://t.cn/EKlYbiF架構
https://www.gueizu.com/file-5...測試
就目前發現的一些問題說明:ui
$SQLInstanceName 需修改,其中腳本中有說明,或者直接修改成動態賦值:
# Parameters. Change Line 14 $SQLInstanceName="InstanceName" to correct instance name
或
if( $SQLInstanceName -eq "EnterInstanceName" ) { $SQLInstanceName = $(hostname.exe) }
中文windows環境下:
在powershell中執行 powershell.exe -File "C:\Program Files\Zabbix Agent\scripts\Discovery.mssql.server.ps1" JSONJOBNAME
返回結果不亂碼,可是在zabbix server中用zabbix_get 獲取的值返回亂碼
解決辦法:
加入轉換方法:
# This function converts from one encoding to another. function convertto-encoding ([string]$from, [string]$to){ begin{ $encfrom = [system.text.encoding]::getencoding($from) $encto = [system.text.encoding]::getencoding($to) } process{ $bytes = $encto.getbytes($_) $bytes = [system.text.encoding]::convert($encfrom, $encto, $bytes) $encto.getstring($bytes) } }
修改:
foreach ($job in $jobname) { if ($idx -lt $jobname.Count) { $line= "{ `"{#JOBNAME}`" : `"" + $job + "`" }," write-host $line } ....
爲:
foreach ($job in $jobname) { $job = $job | convertto-encoding "gbk" "utf-8" if ($idx -lt $jobname.Count) { $line= "{ `"{#JOBNAME}`" : `"" + $job + "`" }," write-host $line }
注意:
$job = $job | convertto-encoding "gbk" "utf-8"
其餘地方的中文亂碼也能夠經過此方法解決,可是使用powershell執行的時候返回結果亂碼。
遺留問題:部分中文(特殊的幾個字)依舊亂碼,會顯示爲? ,不知道是哪裏的問題。
此問題目前只在 sql server 2014中發現,2008r2的數據庫中未發現問題
zabbix server 中使用zabbix_get 獲取定時任務列表時報錯 拒絕了對對象 'sysjobs' (數據庫 'msdb',架構'dbo')的SELECT權限,但使用powershell執行 能返回結果
現象以下:
最簡單的辦法:
加入用戶名密碼,修改下面內容,去掉註釋
修改:$jobname = sqlcmd -S $SQLInstanceName -d msdb -h -1 -W -Q "set nocount on;SELECT [name] FROM msdb.dbo.sysjobs"
爲$jobname = sqlcmd -S $SQLInstanceName -U $uid -P $pwd -d msdb -h -1 -W -Q "set nocount on;SELECT [name] FROM msdb.dbo.sysjobs"
下面獲取 JOBSTATUS
的也同樣加入用戶名密碼參數。
可能緣由:
對比權限,2014用戶少不少,並且沒有SYSTEM用戶,不能肯定是安裝問題,仍是2014自己的問題,最終使用用戶名密碼方式解決