设为首页 收藏本站
查看: 1327|回复: 0

[经验分享] Zabbix监控SQL Server数据库

[复制链接]

尚未签到

发表于 2019-1-18 08:16:34 | 显示全部楼层 |阅读模式

  安装篇


Zabbix安装篇一:服务端安装教程
Zabbix安装篇二:Linux批量安装客户端Zabbix-agent
Zabbix安装篇三:windows批量安装客户端Zabbix-agent
Zabbix安装篇四:钉钉机器人报警
监控篇

Zabbix监控篇一:监控SQL Server数据库
Zabbix监控篇二:监控Mariadb数据库
Zabbix监控篇三:监控Exchange Server
Zabbix监控篇四:监控路由器
  

  通过Zabbix模板,用于监视和收集Microsoft SQL Server统计信息。大多数请求是通过Windows性能计数器(`perf_counter`)完成的,一些是通过PowerShell完成的,另一些是通过ODBC完成的。
  
  
一、系统要求
  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。

  
  zbx_template_mssql.xml模板内容:
  zbx_template_mssql.xml模板内容太多,模板下载地址:http://down.运维网.com/data/2452214
  
  
  4、在“管理 - >常规 - >正则表达式(右侧下拉列表)”中配置正则表达式:

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

  5、在“管理 - >常规 - >值映射(右侧下拉列表)”中导入“MS SQL Server数据库状态”值映射(`zbx_valuemaps_mssql.xml`)。正常是自动导入的,没有的话请手动添加:


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




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-664587-1-1.html 上篇帖子: ZABBIX(四) Zabbix 用户管理 下篇帖子: zabbix的常用模板
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表