一、Zabbix自定義Key監(jiān)控Mysql
Mysql的基礎(chǔ)監(jiān)控
Zabbix Agent的安裝
進(jìn)程存活
檢測(cè)端口
Mysql的高級(jí)監(jiān)控說(shuō)明
Mysql提供show global status可以實(shí)現(xiàn)對(duì)Mysql的高級(jí)監(jiān)控
高級(jí)監(jiān)控包含監(jiān)控Mysql連接數(shù),增刪改查數(shù),流量等

開(kāi)通最小權(quán)限用戶(hù),保證安全
grant usage on . to 'monitor'@'127.0.0.1' identified by 'shijiangepwd';
flush privileges;
監(jiān)控命令詳解mysql -umonitor -h 127.0.0.1 -pshijiangepwd -e 'show global status'
Threads_connected:連接數(shù)
Com_select:查詢(xún)總量
Com_insert:插入總量
Com_update:更新總量
Com_delete:刪除總量
Bytes_received: 流入總流量
Bytes_sent:流出總流量
Slow_queries:慢查詢(xún)總量
監(jiān)控Shell腳本check_mysql.sh
port=$1
key=$2
mysql -umonitor -pshijiangepwd -h 127.0.0.1 -P${port} -e "show global status" |grep "${key}\s" |awk '{print $2}'
\s :匹配任意的空白符,防止有多個(gè)檢索項(xiàng)
測(cè)試監(jiān)控Shell腳本
sh /usr/local/zabbix/check_mysql.sh 3306 Threads_connected
Zabbix自定義Key配置
UserParameter=mysql.status[*],sh /usr/local/zabbix/check_mysql.sh $1 $2 2>/dev/null
重定向:不安全操作重定向
重啟agent

服務(wù)端測(cè)試能否獲取到值
zabbix_get -s xxx -k mysql.status[3306,Threads_connected]
zabbix_get -s xxx -k mysql.status[3306,Com_insert]

使用模板去監(jiān)控Mysql,要先添加模板,才能創(chuàng)建自定義的監(jiān)控KEY
利用自帶的模板改一改
mysql.status[3306,Threads_connected]
mysql.status[3306,Com_select]
mysql.status[3306,Bytes_received]
mysql.status[3306,Bytes_sent]

寫(xiě)一個(gè)測(cè)試的程序我們來(lái)測(cè)一下
while true;do
mysql -h 127.0.0.1 -e "select * from test.test;insert into test.test values (2);delete from test.test;"
sleep 1
done
二、Zabbix自動(dòng)發(fā)現(xiàn)監(jiān)控Mysql
為什么要自動(dòng)發(fā)現(xiàn)?
Mysql可能監(jiān)聽(tīng)在不同端口,3306、3307、3308
可能一臺(tái)服務(wù)器有多個(gè)Mysql實(shí)例多個(gè)監(jiān)聽(tīng)端口
自動(dòng)發(fā)現(xiàn)就是把監(jiān)控項(xiàng)目里的傳入的參數(shù)給變量化 mysql.status[{#ONE},Threads_connected]
Mysql自動(dòng)發(fā)現(xiàn)腳本discovery_mysql.py,腳本在放在被監(jiān)控服務(wù)器上
# -*- coding: utf-8 -*-
import json
import commands
(status,output) = commands.getstatusoutput("""sudo netstat -tlnp| grep mysqld |awk '{print $4}'|awk -F':' '{print $(NF)}'|sort | uniq""")
outputs = output.split('\n')
#print((status,outputs))
result = []
for one in outputs:
result.append( {'{#ONE}': one} )
#print(result)
print( json.dumps({'data':result},sort_keys=True,indent=4) )
Zabbix添加Sudo權(quán)限(visudo)
zabbix ALL= NOPASSWD: /bin/netstat
Defaults:zabbix !requiretty
Zabbix自定義Key配置
UserParameter=mysql.discovery,python /usr/local/zabbix/discovery_mysql.py
重啟Agent

測(cè)試能否獲取到值
zabbix_get -s xxx -k mysql.discovery
使用自動(dòng)發(fā)現(xiàn)監(jiān)控Mysql
mysql.status[3306,Threads_connected]
mysql.status[3306,Com_insert]




三、Zabbix監(jiān)控Mysql主從同步
Mysql主從監(jiān)控的必要性
如果發(fā)生主從同步異常,業(yè)務(wù)會(huì)出問(wèn)題
如果從庫(kù)是用來(lái)備份的,會(huì)導(dǎo)致數(shù)據(jù)丟失
Mysql主從同步監(jiān)控說(shuō)明
從庫(kù)運(yùn)行show slave status\G可以來(lái)查看主從同步信息
Slave IO Running可以觀察從庫(kù)的IO進(jìn)程是否正常,IO進(jìn)程用于同步二進(jìn)制日志
Slave SQL Running可以觀察從庫(kù)的SQL進(jìn)程是否正常,SQL進(jìn)程用于執(zhí)行二進(jìn)制日志
Seconds Behind Master代表主從同步的延時(shí)時(shí)間
主從監(jiān)控權(quán)限用戶(hù)的創(chuàng)建(在被監(jiān)控端用root賬號(hào)創(chuàng)建用戶(hù))
grant usage,replication client on *.* to 'monitor'@'127.0.0.1' identified by 'shijiangepwd';
flush privileges;
監(jiān)控Mysql主從的Shell腳本check_mysql_slave.sh
port=$1
key=$2
mysql -umonitor -pshijiangepwd -h 127.0.0.1 -P${port} -e "show slave status\G"|grep "${key}\:"|awk '{print $2}'

Shell腳本測(cè)試
sh check_mysql_slave.sh 3306 Slave_SQL_Running
Zabbix自定義Key監(jiān)控Mysql主從
UserParameter=mysql.slave.status[*],sh /etc/zabbix/check_mysql_slave.sh 2 2>/dev/null
重啟Agent


創(chuàng)建監(jiān)控模板,新建一個(gè)監(jiān)控模板
監(jiān)控模板名稱(chēng):Template Mysql Slave Status
mysql.slave.status[3306,Slave_IO_Running]
mysql.slave.status[3306,Slave_SQL_Running]
mysql.slave.status[3306,Seconds_Behind_Master]


也能使用自動(dòng)發(fā)現(xiàn)監(jiān)控
定義解決器來(lái)判斷主從同步是否異常
兩個(gè)狀態(tài)都要為Yes: {Template Mysql Slave Status:mysql.slave.status[3306,Slave_IO_Running].str(Yes)}=0 or {Template Mysql Slave Status:mysql.slave.status[3306,Slave_SQL_Running].str(Yes)}=0
延時(shí)不能超過(guò)100:{Template Mysql Slave Status:mysql.slave.status[3306,Seconds_Behind_Master].last()}<100

自動(dòng)發(fā)現(xiàn)
嘗試使用自動(dòng)發(fā)現(xiàn)去監(jiān)控Mysql主從狀態(tài)
最重要的是發(fā)現(xiàn)端口