Zabbix 自動發(fā)現(xiàn)并監(jiān)控 MySQL
一、方案需求及思路
因跑MySQL服務的服務器比較多,并且每臺服務器可能會運行多個不同端口的數(shù)據庫,如果單獨手動一臺一臺去修改agent.conf,web添加監(jiān)控,這樣太麻煩,費時費力。此時有兩種方案;其一:在每臺跑mysql的服務器上部署一個自動發(fā)現(xiàn)腳本,修改agent.conf 并自定義KEY;其二:統(tǒng)一由一臺服務器來監(jiān)控所有服務器上所有運行的mysql服務。發(fā)現(xiàn)好像方案二比較更簡便些。
方案二思路:
假設有A、B、C、D、E五臺服務器,上面都跑有mysql,并且每臺都跑有2+個mysql,在此假定由A服務器來監(jiān)控所有服務器上mysql的狀態(tài)。此時需要先把五臺服務器的IP及其上mysql服務所占用的port 記錄下來,統(tǒng)一寫到一個文件里:eg:
- 192.168.12.14 3306
- 192.168.12.14 3307
- 192.168.12.15 3308
- 192.168.12.15 3380
- ……
把該文件放到zabbix 目錄下的某一個目錄,并賦權限,再寫一個json的腳本來調取此文件,并且需要在執(zhí)行腳本文件的時候來進行IP傳值并輸出該IP上所有的port。
添加自定義key。其中需要定義一個自動發(fā)現(xiàn)的key,然后定義一個根據IP查詢此服務器上所有端口的mysql狀態(tài)的key。重啟zabbix_agentd,通過zabbix_get來獲取參數(shù)看看是否正常。
配置web界面。在web配置界面中,創(chuàng)建一個主機,該主機的ip指向A服務器的IP,切該服務器的[HOST.NAME] 指向所要監(jiān)控mysql的IP,([HOST.NAME]一般指的是”Visable name”),把監(jiān)控mysql的服務器都指向一個組,然后調用自動發(fā)現(xiàn)mysql模版。之后在創(chuàng)建剩下的幾臺服務器即可。
此方案也不是一個很好的方案,但相對來說還是不錯的,以后若有新增加的mysql服務器,只需要修改寫有IP和PORT的列表文件即可,不需要重啟agent。
二、配置Agent:
1、編輯mysqld文件
- # cat /usr/local/zabbix/bin/mysqld
- 172.16.8.250 3306
- 172.16.8.250 3309
- 172.16.8.252 3306
- 172.16.8.252 3307
注:本文均在8.250上實現(xiàn)監(jiān)控252上的數(shù)據庫及本地250的數(shù)據庫
2、mysql賦權限
分別將四個數(shù)據庫都賦給172.16.8.250主機以用戶zabbix,密碼111的訪問,show global status權限。
3、編輯discovery_mysql.sh
- # cat /usr/local/zabbix/bin/discovery_mysql.sh
- #!/bin/bash
- #mysql low-level discovery
- #Script_name discovery_mysql.sh
- res=`cat /usr/local/zabbix/bin/mysqld|grep $1|grep -v "^#"|awk '{print $2}'`
- port=($res)
- printf '{\n'
- printf '\t"data":[\n'
- for key in ${!port[@]}
- do
- if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
- printf '\t {\n'
- printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n"
- else [[ "${key}" -eq "((${#port[@]}-1))" ]]
- printf '\t {\n'
- printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n"
- fi
- done
- printf '\t ]\n'
- printf '}\n'
賦執(zhí)行權限:
- # chmod +x /usr/local/zabbix/bin/discovery_mysql.sh
測試執(zhí)行效果:
- # sh /usr/local/zabbix/bin/discovery_mysql.sh 172.16.8.250
- {
- "data":[
- {
- "{#MYSQLPORT}":"3306"},
- {
- "{#MYSQLPORT}":"3309"}
- ]
- }
把上述結果粘貼到json檢測網站,查看結果是否正確 http://jsonlint.com/
4、修改agentd.conf
開啟include選項
- Include=/usr/local/zabbix/etc/zabbix_agentd/
添加mysql自動發(fā)現(xiàn)規(guī)則,自定義key
- # cat /usr/local/zabbix/etc/zabbix_agentd/mysql_discovery.conf
- #### $1 ==IP $2 == PORT $3==COMMAND
- UserParameter=zabbix_low_discovery[*],/bin/bash /usr/local/zabbix/bin/discovery.sh $1
- UserParameter=mysql_stats[*],mysql -uzabbix -p111 -P$2 -h$1 -e "show global status"|grep "\<$3\>"|cut -f2
- UserParameter=mysql.alive[*],mysqladmin -uzabbix -p111 -h$1 -P$2 ping|grep -c alive
5、測試:
重啟zabbix_agentd,在zabbix server中通過zabbix_get測試zabbix mysql自動發(fā)現(xiàn)規(guī)則是否正確。
注:172.16.8.250是zabbix server,agent地址為127.0.0.1,請根據自己情況修改下面命令。
- # zabbix_get -s 127.0.0.1 -k zabbix_log_discovery[172.16.8.250]
- {
- "data":[
- {
- "{#MYSQLPORT}":"3306"},
- {
- "{#MYSQLPORT}":"3309"}
- ]
- }
- # zabbix_get -s 127.0.0.1 -k mysql_stats[172.16.8.250,3306,Uptime]
可正確取得數(shù)據便為正確,
轉載請注明原文出處:http://www.minunix.com/2014/04/zabbix_low_discovery_mysql_01/
三、Zabbix WEB 添加主機
1、導入模版discovery_mysql.xml
2、添加主機:
鏈接模版:
注:因模版定義的更新時間為3600s,如需快速看到效果,可先修改模版自定義規(guī)則的“Interval”更新時間改為60,之后便可再”last data”中看到數(shù)據。
監(jiān)控172.16.8.252,只需要創(chuàng)建主機,將visable name 的值172.16.8.250 改為172.16.8.252即可。