給你們介紹瞭如何經過固定端口監控mysql(地址http://dl528888.blog.51cto.com/2382721 /1346590)與使用lld監控mysql性能(地址http://dl528888.blog.51cto.com/2382721 /1357713),如今我在給你們介紹一下如何監控mysql主從狀態的。mysql
下面是監控效果圖:正則表達式
一、Mysql Slave Status of 3306 Port這 個也是使用low level discovery進行監控,而且已經跟以前的lld監控mysql的模板合成了一個模板(因此我本文就只介紹mysql主從狀態,其餘的性能,這樣使用 一個模板既能監控mysql性能,又能自動的監控mysql主從狀態,若是io或者sql任何一個狀態不爲yew,就會報警。sql
如何實現:json
1、客戶端bash
一、監控內容的json化
服務器
在客戶端裏,須要把監控的內容json化展現,而後服務端能夠經過正則來過濾出結果socket
下面在是個人json監控mysql的json展現ide
腳本內容以下:性能
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日誌裏報
二、修改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]命令獲取數據就表明沒問題,下面是個人測試結果
四、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裏(模板在附件),具體操做不介紹。
二、設置正則
在「管理」=》「通常」=》「正則表達式」裏,選擇「新的正則表達式」
而後設置相似以下
我這是運行3301到3309這9個mysql實例
三、主機關聯模板
把須要監控mysql實例的主機管理模板便可監控,默認是3600秒後自動更新,以下圖
爲 什麼設置3600秒?緣由是若是設置時間太短,好比你設置60s,一個是服務器的壓力大,一個是若是你檢測的端口忽然當掉了,尚未來的急報警,主機經過 json來獲取不到這個信息,就認爲沒有這個端口,模板裏會自動關閉這個監控項的內容(默認保留30天,而後自動刪除),這樣報警功能就基本沒有了,因此 仍是發現的間隔時間長一些比較好