zabbix4.0監控sql server相關指標,支持2008~2016

在使用zabbix監控 sql server過程當中,發現了一個好的模板,分享以下:
https://share.zabbix.com/data...html

github:
https://github.com/MantasTume...git

效果以下:github

clipboard.png

包含兩個sql

clipboard.png

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

Discovery.mssql.server.ps1中:

$SQLInstanceName

$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執行的時候返回結果亂碼。

遺留問題:部分中文(特殊的幾個字)依舊亂碼,會顯示爲? ,不知道是哪裏的問題。

clipboard.png

獲取定時任務列表,權限不足 sql server 2014

此問題目前只在 sql server 2014中發現,2008r2的數據庫中未發現問題
zabbix server 中使用zabbix_get 獲取定時任務列表時報錯 拒絕了對對象 'sysjobs' (數據庫 'msdb',架構'dbo')的SELECT權限,但使用powershell執行 能返回結果

現象以下:

clipboard.png

clipboard.png

最簡單的辦法:
加入用戶名密碼,修改下面內容,去掉註釋

clipboard.png

修改:
$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自己的問題,最終使用用戶名密碼方式解決

clipboard.png

相關文章
相關標籤/搜索