Zabbix3.4系列配置篇一:監控Microsoft SQL Server數據庫

 安裝教程請查看鏈接

Zabbix3.4系列之一:服務端安裝教程

Zabbix3.4系列之二:Linux批量安裝客戶端Zabbix-agent

Zabbix3.4系列之三:windows批量安裝客戶端Zabbix-agent

Zabbix3.4系列之四:通過釘釘機器人報警


     通過Zabbix模板,用於監視和收集Microsoft SQL Server統計信息。大多數請求是通過Windows性能計數器(`perf_counter`)完成的,一些是通過PowerShell完成的,另一些是通過ODBC完成的。

image.png

一、系統要求

Microsoft SQL Server2008-2012數據庫

zabbix3.2-3.4

二、模板監控數據特徵

  • MS SQL服務的狀態

  • 服務器統計(共70項):

    • 內存

    • 高速緩存

    • 緩衝管理器

    • 訪問方法

    • 錯誤和失敗的工作

    • 日誌大小

    • 通過Powershell(Zabbix代理)或ODBC直接進行數據庫發現

三、安裝配置

本文配置文件路徑爲:C:\zabbix\zabbix_agentd.win.conf

本文腳本文件路徑爲:C:\zabbix\scripts\



1、將下面的配置信息添加到zabbix_agentd.win.conf最後面:

UserParameter = mssql.db.discovery,powershell -NoProfile -ExecutionPolicy Bypass -File“C:\zabbix\scripts\mssql_basename.ps1”

UserParameter = mssql.version,powershell -NoProfile -ExecutionPolicy Bypass -File“C:\zabbix\scripts\ mssql_version.ps1” 


2、將PowerShell腳本(`mssql _ * .ps1`)複製到腳本文件夾C:\zabbix\scripts\

mssql_basename.ps1配置信息

#функция для приведения к формату который понимает zabbix / the function is to bring to the format understands zabbix
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)
    }
}

#Задаем переменные для подключение к MSSQL. $uid и $pwd нужны для проверки подлинности windows / We define the variables for connecting to MS SQL. $uid и $pwd need to authenticate windows
$SQLServer = $(hostname.exe)
#$uid = "Login" 
#$pwd = "Password"

#Создаем подключение к MSSQL / Create a connection to MSSQL

#Если проверка подлинности windows / If windows authentication
#$connectionString = "Server = $SQLServer; User ID = $uid; Password = $pwd;"

#Если Интегрированная проверка подлинности / If integrated authentication
$connectionString = "Server = $SQLServer; Integrated Security = True;"

$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString
$connection.Open()

#Создаем запрос непосредственно к MSSQL / Create a request directly to MSSQL
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand  
$SqlCmd.CommandText = "SELECT name FROM  sysdatabases"
$SqlCmd.Connection = $Connection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet) > $null
$Connection.Close()

#Получили список баз. Записываем в переменную. / We get a list of databases. Write to the variable.
$basename = $DataSet.Tables[0]

#Парсим и передаем список баз в zabbix. В последней строке нужно вывести имя бызы без запятой в конце. / Parse and pass a list of databases in zabbix. In the last line need to display the database name without a comma at the end.
$idx = 1
write-host "{"
write-host " `"data`":[`n"
foreach ($name in $basename)
{
    if ($idx -lt $basename.Rows.Count)
        {
            $line= "{ `"{#DBNAME}`" : `"" + $name.name + "`" }," | convertto-encoding "cp866" "utf-8"
            write-host $line
        }
    elseif ($idx -ge $basename.Rows.Count)
        {
            $line= "{ `"{#DBNAME}`" : `"" + $name.name + "`" }" | convertto-encoding "cp866" "utf-8"
            write-host $line
        }
    $idx++;
}

 write-host
write-host " ]"
write-host "}"


mssql_version.ps1腳本內容

$ver = Invoke-Sqlcmd -Query "SELECT @@VERSION;" -QueryTimeout 3

write-host $ver.Column1


3、通過Web (配置 - >模板 - >導入)將XML模板文件(`zbx_template_mssql.xml`)導入Zabbix。

image.png

zbx_template_mssql.xml模板內容:

zbx_template_mssql.xml模板內容太多,模板下載地址:http://down.51cto.com/data/2452214


4、在“管理 - >常規 - >正則表達式(右側下拉列表)”中配置正則表達式:

Name: Databases for discovery
Expression: ^(master|model|msdb|ReportServer|ReportServerTempDB|tempdb)$
Type: Result is FALSE[object Object]

image.png


5、在“管理 - >常規 - >值映射(右側下拉列表)”中導入“MS SQL Server數據庫狀態”值映射(`zbx_valuemaps_mssql.xml`)。正常是自動導入的,沒有的話請手動添加:

image.png

四、SQLServer性能計數器:

1、Access Methods(訪問方法) 用於監視訪問數據庫中的邏輯頁的方法。

Forwarded Records/sec

每秒通過正向記錄指針提取的記錄數。

Page splits/sec(頁分割/秒)

由於數據更新操作引起的每秒頁分割的數量。

Workfiles Created/sec:

每秒創建的工作文件數。 例如,工作文件可用於存儲哈希聯接和哈希聚合的臨時結果。

Worktables Created/sec

每秒創建的工作表數。 例如,工作表可用於存儲查詢假脫機、LOB 變量、XML 變量和遊標的臨時結果。

Full Scans/sec(全表掃描/秒)

每秒不受限的完全掃描數。可以是基本表掃描或全索引掃描。如果這個計數器顯示的值比1或2高,應該分析你的查詢以確定是否確實需要全表掃描,以及S Q L查詢是否可以被優化。

2、Buffer Manager(緩衝器管理器):

  • 存儲數據頁的內存。

  • 用於監視 SQL Server 讀取和寫入數據庫頁時的物理 I/O 的計數器。

  • 用於藉助高速非易失性存儲(如固態硬盤 (SSD))擴展緩衝區高速緩存的緩衝池擴展。

    監視 SQL Server 使用的內存和計數器有助於確定:

  • 是否存在物理內存不足的瓶頸。 如果 SQL Server 無法將經常訪問的數據存儲在緩存中,則必須從磁盤檢索數據。

  • 是否可以通過添加更多內存或增加數據緩存或 SQL Server 內部結構的可用內存來提高查詢性能。

  • SQL Server 需要從磁盤讀取數據的頻率。 與其他操作(例如內存訪問)相比,物理 I/O 會消耗大量時間。 儘可能減少物理 I/O 可以提高查詢性能。


Buffer Cache Hit Ratio

在“緩衝池”(Buffer Cache/Buffer Pool)沒有被讀過的頁佔整個緩衝池所有頁的比率。可在高速緩存找到而不需要從磁盤讀取的頁的百分比。這一比率是高速緩存命總數除以自 SQL Server 實例啓動後對高速緩存的查找總數。經過很長時間後,這一比率的變化很小。由於從高速緩存讀數據比從磁盤讀數據的開銷要小得多,一般希望這一數值高一些。通常,可以通過增加 SQL Server 可用的內存數量來提高高速緩存命率。計數器值依應用程序而定,但比率最好爲90% 或更高。增加內存直到這一數值持續高於90%,表示90% 以上的數據請求可以從數據緩衝區獲得所需數據。



Lazy Writes/sec(惰性寫/秒)

惰性寫進程每秒寫的緩衝區的數量。值最好爲0。

Page Reads/sec:

每秒發出的物理數據庫頁讀取數。這一統計信息顯示的是在所有數據庫間的物理頁讀取總數。由於物理 I/O 的開銷大,可以通過使用更大的數據高速緩存、智能索引、更高效的查詢或者改變數據庫設計等方法,使開銷減到最小。

Page Writes/sec (.寫的頁/秒)

每秒執行的物理數據庫寫的頁數。

3、Locks(鎖) 提供有關個別資源類型上的 SQL Server 鎖的信息。


  鎖加在 SQL Server 資源上(如在一個事務進 行的行讀取或修改),以防止多個事務併發使用資源。例如,如果一個排它 (X) 鎖被一個事務加在某一表的某一行上,在這個鎖被釋放前,其它事務都不可以修改這一行。儘可能少使用鎖可提高併發性,從而改善性能。可以同時監視 Locks 對象的多個實例,每個實例代表一個資源類型上的一個鎖。

Number of Deadlocks/sec

(死鎖的數量/秒) 導致死鎖的鎖請求的數量

Average Wait Time(ms)

(平均等待時間(毫秒)) 線程等待某種類型的鎖的平均等待時間

Lock Requests/sec

(鎖請求/秒) 每秒鐘某種類型的鎖請求的數量。

Lock Timeouts/sec

每秒超時的鎖請求數,包括對 NOWAIT 鎖的請求。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章