使用zabbix監控sql server的發佈訂閱

(一)背景

個人在使用sql server時,用到了sql server的發佈訂閱來做主從同步,類似MySQL的異步複製。在發佈訂閱環境搭建完成後,最重要的就是如何監控複製的狀態了,sql server提供了複製監視器來方便我們監控複製狀態、複製延遲等信息,總體來說,非常好用,複製監視器的界面如下,能夠很清楚的看到哪些失敗了,哪些有延遲。

clipboard

clipboard

然而,在運維過程中發現,我們不可能一直盯着複製監視器,甚至每天看一次都不可能,往往發生了同步故障,發佈訂閱停止了幾天才發現。因此,如何實時監控訂閱發佈變得非常急切,因爲公司使用的是zabbix監控,所以希望把對sql server的監控也放在zabbix上。


(二)監控方法概述

zabbix提供了多種方法來監控數據庫,常見方法如下:

個人試了一下插件監控方式,配置起來較爲複雜,也不知道如何自定義新的監控項。最終選擇了zabbix+unixODBC來監控sql server數據庫。


(三)監控邏輯

sql server的發佈訂閱錯誤信息存儲在 [distribution].[dbo].[MSrepl_errors] 表中,信息如下:

clipboard

可以看到,如果發佈訂閱出現異常,每分鐘大約會報出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());

clipboard

在完成監控項的創建之後,需要到最新數據裏面查看是否收到了數據,這裏可以看到已經有數據收到了。

image

接下來創建觸發器:

clipboard

到zabbix的首頁查看,已經捕獲到了複製錯誤

clipboard


(五)總結

通過zabbix+unixODBC,我們實現了自定義監控sql server數據庫的發佈訂閱功能,總結一下:

(1)如果要添加新的sql server數據庫,只需要在zabbix server服務器上的/etc/odbc.ini裏面添加數據庫連接字符串即可;

(2)如果要添加新的監控項,只需在zabbix web界面對應的sql server主機處添加監控項並輸入SQL語句即可。



【完】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章