(一)背景

个人在使用sql server时,用到了sql server的发布订阅来做主从同步,类似MySQL的异步复制。在发布订阅环境搭建完成后,最重要的就是如何监控复制的状态了,sql server提供了复制监视器来方便我们监控复制状态、复制延迟等信息,总体来说,非常好用,复制监视器的界面如下,能够很清楚的看到哪些失败了,哪些有延迟。

然而,在运维过程中发现,我们不可能一直盯着复制监视器,甚至每天看一次都不可能,往往发生了同步故障,发布订阅停止了几天才发现。因此,如何实时监控订阅发布变得非常急切,因为公司使用的是zabbix监控,所以希望把对sql server的监控也放在zabbix上。


(二)监控方法概述

zabbix提供了多种方法来监控数据库,常见方法如下:

个人试了一下插件监控方式,配置起来较为复杂,也不知道如何自定义新的监控项。最终选择了zabbix+unixODBC来监控sql server数据库。

(三)监控逻辑

sql server的发布订阅错误信息存储在 [distribution].[dbo].[MSrepl_errors] 表中,信息如下:

可以看到,如果发布订阅出现异常,每分钟大约会报出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());

(四)具体实现过程

使用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主机,添加监控项:

  • 名称:监控项的名称,可以随便填,为了好记,建议为monitor_repl

  • 类型:数据库监控
  • 键值:db.odbc.select[str1,str2]:第1个字符串随便填,第2个字符串是数据库连接字符串,是在zabbix服务器的/etc/odbc.ini中定义的。
  • 用户名:sql server的连接用户
  • 密码:sql server的连接密码
  • SQL查询:自定义sql语句,我们这里监控发布订阅的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());

在完成监控项的创建之后,需要到最新数据里面查看是否收到了数据,这里可以看到已经有数据收到了。

接下来创建触发器:

到zabbix的首页查看,已经捕获到了复制错误

(五)总结

通过zabbix+unixODBC,我们实现了自定义监控sql server数据库的发布订阅功能,总结一下:

(1)如果要添加新的sql server数据库,只需要在zabbix server服务器上的/etc/odbc.ini里面添加数据库连接字符串即可;

(2)如果要添加新的监控项,只需在zabbix web界面对应的sql server主机处添加监控项并输入SQL语句即可。

【完】

使用zabbix监控sql server的发布订阅的更多相关文章

  1. SQL Server 复制 - 发布订阅(SQL Server 数据同步)

    原文:SQL Server 复制 - 发布订阅(SQL Server 数据同步) SQL Server的同步是通过SQL Server自带的复制工具来实现的,分发布和订阅2大步. A,复制-发布 发布 ...

  2. sql server 利用发布订阅方式实现数据库同步问题

    删除本地快发布时报错: 无法作为数据库主体执行,因为主体 "dbo" 不存在.无法模拟这种类型的主体,或您没有所需的权限.已将数据库上下文更改为 'numberForcast'. ...

  3. SQL Server 2005 发布 订阅 (配置实例[图])(转载)

    2.1          发布&订阅 1.       测 试环境: Item 发布机 A 订阅机 B OS Windows 2003 Server Windows 2003 Server S ...

  4. sql server 搭建发布订阅后,改端口不正常工作的问题

    sql 的发布订阅,想必大家都了解,但一般都是在默认的1433的情况下搭建的,那么1433换成别的端口,发布还能正常工作吗? 在一次客户的真实场景上我就遇到了. 好了,今天不想写太多,简化下, 测试环 ...

  5. SQL Server 2008R2发布与订阅的配置

    使用SQL Server的发布与订阅可以将一个数据库的数据实时传送到另一个数据库中,使用这种方式与Link Server相比可以减少对数据库的连接次数.下面介绍SQL Server 2008R2发布与 ...

  6. 用脚本定时监控SQL Server主从一致性

    用脚本定时监控SQL Server主从一致性 首先说一下我们的环境 我们使用的是事务复制,复制是单向的,主服务器和从服务器都在同一个机房,当然不同机房也可以,只需要改一下IP和端口 下面的脚本在我们的 ...

  7. sql server 本地复制订阅 实现数据库服务器 读写分离(转载)

    转载地址:http://www.cnblogs.com/echosong/p/3603270.html 再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下S ...

  8. sql server 本地复制订阅 实现数据库服务器 读写分离

    再前段echosong 写了一遍关于mysql 数据同步实现业务读写分离的文章,今天咱们来看下SQL Server的复制订阅实现数据的读写分离 比起mysql的复制,SQL server 复制相对强大 ...

  9. Python监控SQL Server数据库服务器磁盘使用情况

    本篇博客总结一下Python采集SQL Server数据库服务器的磁盘使用信息,其实这里也是根据需求不断推进演化的一个历程,我们监控服务器的磁盘走了大概这样一个历程: 1:使用SQL Server作业 ...

随机推荐

  1. Visual Studio安装

    2017 安装的时候,一直显示,安装成功但是有告警. 解决方法: 将visual studio 2017 installer进行卸载,然后安装hw的ios 不能确保下次也可以成功

  2. day5 字符串 函数

    字符串 1.单引号,双引号,三引号括起来的都是字符串    索引  从0开始  str[0]    遍历   for循环    判断字符串中是否都是数字    ,字母  返回bool型         ...

  3. 解决React路由跳转时出现的红色警告: Warning: Failed prop type: Invalid prop `component` of type `object` supplied to `Route`, expected `function`.

    一.报警如图: 二.查找路由版本 我使用路由版本是4.3.1的,然后我测试所有4.0+版本都会出现以上警告. 三.未解决前的代码 三.我又解读了一下报警告内容的大致意思:就是props需要通过函数返回 ...

  4. MySQL · 性能优化 · MySQL常见SQL错误用法(转自-阿里云云栖社区)

    作者:阿里云云栖社区链接:https://zhuanlan.zhihu.com/p/26043916来源:知乎著作权归作者所有,转载请联系作者获得授权. 前言 MySQL在2016年仍然保持强劲的数据 ...

  5. 12. oracle 常用函数

    一.字符函数字符函数是oracle中最常用的函数,我们来看看有哪些字符函数:lower(char):将字符串转化为小写的格式.upper(char):将字符串转化为大写的格式.length(char) ...

  6. k8s 辨析 port、NodePort、targetPort、containerPort 区别

    刚接触 k8s 涉及到端口到内容较多,容易混淆,这里整理如下: 目录 nodePort port targetPort containerPort 参考文章 nodePort nodePort 提供了 ...

  7. hdu.2042 超级楼梯

    这种递归来写,除了递归我也想不到怎么写了 AC代码: #include<iostream>using namespace std;int x[41];//打表,不打表我不用想就知道过不了, ...

  8. 小白式DPDK搭建方法(附相关错误得处理方法)

    搭建环境:VM VM搭建参考其他博客 步骤一 点击虚拟机设置,添加两个网卡(我这里都是使用的都是桥接模式) 步骤二.从网上下载dpdk的压缩包: 命令:wget http://fast.dpdk.or ...

  9. P2607 [ZJOI2008]骑士 基环树,树dp;

    P2607 [ZJOI2008]骑士 本题本质上就是树dp,和没有上司的舞会差不多,只不过多了一个对基环树的处理. #include<iostream> #include<cstri ...

  10. 3D渲染集群,你了解多少?

    摘要:渲染是批处理运行模式,那能不能使用Docker容器技术,做大规模的渲染集群呢? 我们先说说3D渲染涉及哪些领域: 1.什么是3D渲染 简单粗暴的讲:就是将虚拟世界里的3D模型,变为(人眼看到)平 ...