(一)背景html
我的在使用sql server时,用到了sql server的发布订阅来作主从同步,相似MySQL的异步复制。在发布订阅环境搭建完成后,最重要的就是如何监控复制的状态了,sql server提供了复制监视器来方便咱们监控复制状态、复制延迟等信息,整体来讲,很是好用,复制监视器的界面以下,可以很清楚的看到哪些失败了,哪些有延迟。web
然而,在运维过程当中发现,咱们不可能一直盯着复制监视器,甚至天天看一次都不可能,每每发生了同步故障,发布订阅中止了几天才发现。所以,如何实时监控订阅发布变得很是急切,由于公司使用的是zabbix监控,因此但愿把对sql server的监控也放在zabbix上。sql
(二)监控方法概述数据库
zabbix提供了多种方法来监控数据库,常见方法以下:服务器
我的试了一下插件监控方式,配置起来较为复杂,也不知道如何自定义新的监控项。最终选择了zabbix+unixODBC来监控sql server数据库。运维
(三)监控逻辑异步
sql server的发布订阅错误信息存储在 [distribution].[dbo].[MSrepl_errors] 表中,信息以下:sqlserver
能够看到,若是发布订阅出现异常,每分钟大约会报出3条错误,这里咱们简单粗暴的监控错误次数:若是最近1小时出现了5次报错,则认为复制存在异常,具体SQL语句以下:测试
select case when count(*) > 5 then 'REPL_ERROR' else 'NORMAL' END monitor from [distribution].[dbo].[MSrepl_errors] a where a.time > dateadd(hour,-1,GETDATE());
(四)具体实现过程fetch
使用zabbix自带的数据库监控API,依赖于zabbix server的ODBC,而ODBC又依赖于freetds。下面咱们依次安装配置:freetds --> unixODBC --> zabbix监控
(4.1)安装freetds
下载freetds http://www.freetds.org/software.html。
解压freetds:
[root@zabbixserver ~]# ll -rw-r--r-- 1 root root 3038783 Sep 9 11:33 freetds-1.2.4.tar.gz [root@zabbixserver ~]# tar -xzvf freetds-1.2.4.tar.gz [root@zabbixserver freetds-1.2.4]# ls aclocal.m4 CMakeLists.txt config.status COPYING.txt freetds.spec.in libtool Makefile.am NEWS.md src vms AUTHORS.md compile config.sub depcomp include locales.conf Makefile.in PWD tds.dox win32 autogen.sh config.guess configure doc INSTALL.md ltmain.sh misc PWD.in test-driver BUGS.md config.log configure.ac freetds.conf install-sh m4 missing README.md Thanks-1.0 ChangeLog config.rpath COPYING_LIB.txt freetds.spec interfaces Makefile mkinstalldirs samples TODO.md
安装freetds:
# freetds须要使用gcc编译,先安装gcc yum install gcc [root@zabbixserver freetds-1.2.4]# pwd /root/freetds-1.2.4 # 手动编译安装 ./configure --prefix=/usr/local/freetds --enable-msdblib make make install
(4.2)安装unixODBC
yum install -y unixODBC unixODBC-devel
在/etc/odbcinst.ini中配置驱动程序,添加
[FreeTDS] # unixodbc驱动名称 Description=FreeTDS driver # 简介 Driver=/usr/local/freetds/lib/libtdsodbc.so # 驱动所在位置,须要检查该驱动是否存在,若是不存在,建议从新编译安装freetds
在/etc/odbc.ini中配置数据库链接认证
[root@zabbixserver ~]# cat /etc/odbc.ini [mssql71] Driver = FreeTDS Server = 10.1.106.71 PORT = 1433 TDS_Version = 8.0 [mssql72] Driver = FreeTDS Server = 10.1.106.72 PORT = 1433 TDS_Version = 8.0
使用unixODBC链接数据库,链接数据库的格式为:
isql db_str user password
db_str :数据库链接字符串,在/etc/odbc.ini文件中定义
user :数据库用户名
pawwword :数据库密码
链接数据库进行测试,能够正常访问数据库
[root@zabbixserver ~]# isql mssql71 sa zxc@1234 +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL> select getdate(); +------------------------+ | 2020-09-09 14:20:03.933| +------------------------+ SQLRowCount returns 1 1 rows fetched SQL>
(4.3)配置zabbix监控项和触发器
配置zabbix监控项,在zabbix上打开sql server主机,添加监控项:
select case when count(*) > 5 then 'REPL_ERROR' else 'NORMAL' END monitor from [distribution].[dbo].[MSrepl_errors] a where a.time > dateadd(hour,-1,GETDATE());
在完成监控项的建立以后,须要到最新数据里面查看是否收到了数据,这里能够看到已经有数据收到了。
接下来建立触发器:
到zabbix的首页查看,已经捕获到了复制错误
(五)总结
经过zabbix+unixODBC,咱们实现了自定义监控sql server数据库的发布订阅功能,总结一下:
(1)若是要添加新的sql server数据库,只须要在zabbix server服务器上的/etc/odbc.ini里面添加数据库链接字符串便可;
(2)若是要添加新的监控项,只需在zabbix web界面对应的sql server主机处添加监控项并输入SQL语句便可。
【完】