zabbix企業應用之Mysql主從監控

給你們介紹瞭如何經過固定端口監控mysql(地址http://dl528888.blog.51cto.com/2382721 /1346590)與使用lld監控mysql性能(地址http://dl528888.blog.51cto.com/2382721 /1357713),如今我在給你們介紹一下如何監控mysql主從狀態的。mysql

下面是監控效果圖:正則表達式

一、Mysql Slave Status of 3306 PortwKiom1O2BmGwXUTQAAM_7bxz6oY462.jpg這 個也是使用low level discovery進行監控,而且已經跟以前的lld監控mysql的模板合成了一個模板(因此我本文就只介紹mysql主從狀態,其餘的性能,這樣使用 一個模板既能監控mysql性能,又能自動的監控mysql主從狀態,若是io或者sql任何一個狀態不爲yew,就會報警。sql

如何實現:json

1、客戶端bash

一、監控內容的json化
服務器

在客戶端裏,須要把監控的內容json化展現,而後服務端能夠經過正則來過濾出結果socket

下面在是個人json監控mysql的json展現ide

wKioL1L5dd6hILXmAAB_Ll1Q_6E480.jpg

腳本內容以下:性能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
#Fucation:mysql low-level discovery
#Script_name mysql_low_discovery.sh
mysql() {
             port=($( sudo  netstat  -tpln |  awk  -F  "[ :]+"  '/[m]ysql/ && /0.0.0.0/ {print $5}' ))
             printf  '{\n'
             printf  '\t"data":[\n'
                for  key  in  ${!port[@]}
                    do
                        if  [[  "${#port[@]}"  -gt 1 &&  "${key}"  - ne  "$((${#port[@]}-1))"  ]]; then
               socket=` ps  aux| grep  ${port[${key}]}| grep  - v  grep | awk  -F  '='  '{print $10}' | cut  -d  ' '  -f 1`
                           printf  '\t {\n'
                           printf  "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n"
                      else  [[  "${key}"  - eq  "((${#port[@]}-1))"  ]]
               socket=` ps  aux| grep  ${port[${key}]}| grep  - v  grep | awk  -F  '='  '{print $10}' | cut  -d  ' '  -f 1`
                           printf  '\t {\n'
                           printf  "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n"
                        fi
                done
                           printf  '\t ]\n'
                           printf  '}\n'
}
$1

把此文件存放到/usr/local/zabbix/bin裏,而後給與755權限,並修改用戶與組爲zabbix,同時容許zabbix用戶無密碼運行netstat測試

1
echo  "zabbix ALL=(root) NOPASSWD:/bin/netstat" >> /etc/sudoers

#Disable requiretty

1
sed  -i  's/^Defaults.*.requiretty/#Defaults    requiretty/'  /etc/sudoers

不關閉的話,會沒法獲取數據,而且zabbix日誌裏報

wKioL1L5lG7DIj1bAADTHBgUAt4491.jpg

二、修改zabbix_agentd.conf文件

在zabbix_agentd.conf最後添加如下內容

1
2
3
UserParameter=zabbix_low_discovery[*], /bin/bash  /usr/local/zabbix/bin/mysql_low_discovery .sh $1
UserParameter=mysql_stats[*],mysql -h localhost -P $1 -uzabbix -pzabbix -e  "show global status" | grep  "\<$2\>" | cut   -f2
UserParameter=mysql_stats_slave[*],mysql -h localhost -P $1 -uzabbix -pzabbix  -e  "show slave status\G" | grep  "\<$2\>" | awk  '{if($NF=="Yes") {print 1} else {print 0}}'

三、測試

若是你能經過/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k zabbix_low_discovery[mysql]與/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k mysql_stats_slave[3306,Slave_IO_Running]、/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k mysql_stats_slave[3306,Slave_SQL_Running]命令獲取數據就表明沒問題,下面是個人測試結果

wKioL1O2CTnjlCd-AAEHXuUCuqU182.jpg

四、mysql受權

1
2
GRANT PROCESS,REPLICATION CLIENT ON *.* TO  'zabbix' @ 'localhost'  identified BY  'zabbix' ;
Flush privileges;

五、重啓zabbix服務

1
2
ps  -ef| grep  zabbix| grep  - v  grep | awk  '{print $2}' | xargs  kill  -9
/usr/local/zabbix/sbin/zabbix_agentd  -c  /usr/local/zabbix/conf/zabbix_agentd .conf

2、服務端

一、模板導入

把Template Mysql Auto Discovery導入到zabbix裏(模板在附件),具體操做不介紹。

二、設置正則

在「管理」=》「通常」=》「正則表達式」裏,選擇「新的正則表達式」

而後設置相似以下

wKioL1L4Q6HhYgzHAAG68C970XY733.jpg

我這是運行3301到3309這9個mysql實例

三、主機關聯模板

把須要監控mysql實例的主機管理模板便可監控,默認是3600秒後自動更新,以下圖

wKioL1L4RA-i4NphAAJjI4nsqj4159.jpg爲 什麼設置3600秒?緣由是若是設置時間太短,好比你設置60s,一個是服務器的壓力大,一個是若是你檢測的端口忽然當掉了,尚未來的急報警,主機經過 json來獲取不到這個信息,就認爲沒有這個端口,模板裏會自動關閉這個監控項的內容(默認保留30天,而後自動刪除),這樣報警功能就基本沒有了,因此 仍是發現的間隔時間長一些比較好

相關文章
相關標籤/搜索