监控:Zabbix监控SQL Server服务状态的方法

1.前言

SQL Server作为微软公司的一款重要的数据库系统,被广泛应用于企业级应用。而在实际的生产环境中,为保证SQL Server的可靠性和稳定性,通常需要进行SQL Server服务状态的监控。而本文将介绍使用Zabbix监控SQL Server服务状态的方法,实现对SQL Server服务的状态监控和异常告警等功能。

2.准备工作

2.1 安装Zabbix Agent

在Zabbix监控SQL Server服务状态之前,必须先安装好Zabbix Agent。Zabbix Agent是一个用于向Zabbix Server发送数据的代理程序,它能够采集主机的各种数据,并将数据发送到Zabbix Server进行处理和显示。

安装Zabbix Agent的方法通常有两种:

在Windows主机上执行msi安装程序

使用PowerShell命令进行自动安装

这里我们采用第二种方法进行安装。

# 下载Zabbix Agent安装包

Invoke-WebRequest -Uri https://repo.zabbix.com/zabbix/5.0/windows/x86_64/zabbix_agent-5.0.21-windows-amd64-openssl.msi -OutFile zabbix_agent-5.0.21-windows-amd64-openssl.msi

# 执行安装程序

Start-Process msiexec.exe -Wait -ArgumentList '/i zabbix_agent-5.0.21-windows-amd64-openssl.msi /quiet SERVER=ZabbixServerIP'

2.2 创建监控数据源

创建监控数据源是监控SQL Server服务状态的前提条件。在Zabbix中,创建监控数据源的过程称为“添加主机”。我们需要在Zabbix中添加一个主机用于监控SQL Server服务状态。

在添加主机之前,需要在SQL Server中创建一个用于Zabbix监控的用户名和密码。该用户名需要具备“VIEW SERVER STATE”权限,因为Zabbix Agent需要查询SQL Server的错误日志等信息。

具体步骤如下:

在SQL Server中创建用于Zabbix监控的用户名和密码:

USE master;

GO

CREATE LOGIN zabbix WITH PASSWORD = 'password';

GO

USE msdb;

GO

CREATE USER zabbix FOR LOGIN zabbix;

GO

EXEC sp_addrolemember N'db_datareader', N'zabbix';

GO

在Zabbix中添加主机:

登录Zabbix Web界面,进入配置 -> 主机,单击“创建主机”按钮,填写主机相关信息。

在主机信息中,我们需要填写主机名称、可见名称、所属组、IP地址等信息;在“模板”部分,选择需要绑定的模板,这里我们选择“Template OS Windows”模板;在“宏”部分,我们需要定义几个宏变量,用于SQL Server监控配置的参数传递。

{#DRIVER}:定义ODBC数据源驱动名称

{#DSN_NAME}:定义ODBC数据源名称

{#DATABASE_NAME}:定义SQL Server数据库名称

{#DB_USER}:定义用于Zabbix监控的SQL Server用户名

{#DB_PASSWORD}:定义用于Zabbix监控的SQL Server用户密码

定义的宏变量可以在SQL Server监控配置中使用,用于传递配置参数。

3.Zabbix监控SQL Server服务

3.1 创建ODBC数据源

在使用Zabbix监控SQL Server服务状态之前,必须先创建ODBC数据源。因为Zabbix Agent需要使用ODBC连接到SQL Server,才能够获取相关的监控状态信息。

创建ODBC数据源的步骤如下:

打开控制面板 -> 管理工具 -> 数据源(ODBC);

选择“用户DSN”选项卡,单击“添加”按钮,选择“SQL Server Native Client 11.0”驱动:

填写连接信息,如下图所示:

测试连接是否成功。

3.2 创建监控项

创建监控项是Zabbix监控SQL Server服务状态的核心部分。Zabbix提供了丰富的模板和监控脚本,可以快速地创建SQL Server相关的监控项。

具体步骤如下:

进入Zabbix Web界面,选择“配置 -> 模板”菜单,单击“创建模板”按钮,填写模板基本信息,例如:

模板名称:SQL Server Template

模板描述:用于监控SQL Server状态的模板

在模板中添加监控项。

CPU使用率:

select cpu_percent from (select top 1 

t_cpu_system.cpu_percent as cpu_percent

from sys.dm_os_sys_info (nolock) join

sys.dm_os_performance_counters (nolock) as t_cpu_system

on t_cpu_system.object_name like '%Processor%' and t_cpu_system.counter_name like '%time%'

join sys.dm_os_performance_counters (nolock) as t_cpu_process

on t_cpu_process.object_name like '%SQLServer:Workload Group Stats%' and t_cpu_process.counter_name like '%CPU Usage%'

where

(t_cpu_process.instance_name like '%default%' or t_cpu_process.instance_name like '%user db%') and

(t_cpu_system.object_name=t_cpu_process.object_name and t_cpu_system.counter_name != t_cpu_process.counter_name)

order by t_cpu_process.cntr_value desc) as t_cpu_percent

名字:CPU Usage

键值:sqlserver_cpu_percent

单位:%

更新间隔:60s

类型:数值型(浮点数)

应用模板:Windows Server Template

磁盘空间使用率:

DECLARE @FreeSpace decimal(18,2)

DECLARE @TotalSpace decimal(18,2)

DECLARE @UsedSpace decimal(18,2)

SET @TotalSpace = (SELECT SUM(size) FROM sys.master_files)

SET @FreeSpace = (SELECT SUM(fileproperty(name,'SpaceUsed')) FROM sys.master_files WHERE type_desc LIKE '%LOG%' )

SET @UsedSpace = @TotalSpace - @FreeSpace

SELECT CAST((@UsedSpace / @TotalSpace) * 100 as decimal(18,2)) as db_space_percentage

名字:Disk Space Used

键值:sqlserver_space

单位:%

更新间隔:300s

类型:数值型(浮点数)

应用模板:Windows Server Template

内存占用率:

 select cast((1 - (available_physical_memory_kb /tot_physical_memory_kb )) * 100 as decimal(5,2))

from ( select double_value as available_physical_memory_kb

from sys.dm_os_sys_memory (nolock)

where name='Available Physical Memory (KB)' ) as t1

join ( select double_value as tot_physical_memory_kb

from sys.dm_os_sys_memory (nolock)

where name='Total Physical Memory (KB)' ) as t2

名称:Memory Usage

键值:sqlserver_memory_percent

单位:%

更新间隔:60s

类型:数值型(浮点数)

应用模板:Windows Server Template

3.3 创建触发器

触发器用于监控SQL Server服务状态,当超过一定的阈值时,触发器会发送告警信息给管理员。

创建触发器的步骤如下:

进入Zabbix Web界面,选择“配置 -> 触发器”菜单,单击“创建触发器”按钮,填写触发器相关信息。

在触发器中添加表达式,例如:

CPU使用率过高(默认阈值:80%)

{SQL Server Template:sqlserver_cpu_percent.avg(300)}>80

磁盘空间使用过高(默认阈值:90%)

{SQL Server Template:sqlserver_space.avg(1800)}>90

内存占用过高(默认阈值:80%)

{SQL Server Template:sqlserver_memory_percent.avg(300)}>80

定义触发器的故障和恢复操作,例如:发送邮件告警。

4.总结

本文介绍了使用Zabbix监控SQL Server服务状态的方法。通过创建ODBC数据源、添加Zabbix主机、创建监控项和触发器等步骤,我们可以快速地实现SQL Server服务状态的监控和异常告警功能。除此之外,Zabbix还提供了丰富的图形化展示和报表生成功能,可以帮助我们更加直观地了解SQL Server的运行状态。

数据库标签