zabbix监控sqlserver数据库

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 锁的请求。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Zabbix监控SQL Server,可以使用以下指标清单: 1. CPU利用率:监控SQL Server实例的CPU使用率,以及每个处理器的利用率,可以帮助评估服务器的负载情况。 2. 内存利用率:监控SQL Server实例的内存使用情况,包括总内存、已分配内存、可用内存等指标,可以帮助评估内存是否足够满足数据库的需求。 3. 磁盘空间利用率:监控SQL Server数据文件、日志文件和临时文件的空间利用率,可以帮助评估磁盘是否足够存储数据库文件。 4. 数据库连接数:监控SQL Server实例的当前连接数,以及每个数据库的连接数,可以帮助评估数据库的并发访问情况。 5. 查询性能:监控SQL Server实例的平均查询响应时间、慢查询数量等指标,可以帮助评估数据库性能是否正常。 6. 锁等待:监控SQL Server实例中的锁等待情况,可以帮助评估数据库的并发性能。 7. 数据库备份状态:监控SQL Server数据库的备份状态,包括备份成功与否、备份时间等指标,可以帮助确保数据库备份正常进行。 8. 错误日志:监控SQL Server实例的错误日志,可以及时发现数据库中的异常情况。 9. 事务日志利用率:监控SQL Server事务日志的利用率,可以评估事务日志是否足够满足事务处理需求。 10. 长时间运行的查询:监控SQL Server实例中运行时间超过阈值的查询,可以帮助发现可能需要优化的查询语句。 以上是通常用于监控SQL Server的一些常见指标,可以根据具体需求进行配置和调整。可以通过在Zabbix中配置相应的监控项、触发器和图表,来实现对SQL Server的全面监控和性能评估。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值