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的运行状态。