zabbix企业应用之low level discovery监控mysql
之前介紹了使用zabbix監控固定3306端口的mysql(文章地址為http://dl528888.blog.51cto.com/2382721/1346590),有個不好的地方是只能監控固定的3306端口,如果是非3306端口的話,需要修改模板,如果主機有多個mysql實例的話,需要具有不同的mysql模板,然后在管理監控,很是麻煩,為了解決這個問題,我使用lld(low level discovery)方式監控mysql,只需要你在正則表達式里把需要監控的端口標上,就可以監控mysql多實例。
下面是監控效果圖:
1、整體圖
可以看到我這里是監控了3306與3307這2個mysql的實例,在圖形上,是根據端口來進行區分。
下面我只列舉3307端口的監控效果圖
2、Mysql Sort of 3307 Port
3、Mysql Bytes_sent Bytes_received of 3307 Port
4、Mysql Com of 3307 Port
5、Mysql Connectionsof 3307 Port
6、Mysql Create tmp of 3307 Port
7、Mysql Innodb of 3307 Port
8、Mysql Key of 3307 Port
9、Mysql Qcache of 3307 Port
10、Mysql Queries and Questions of 3307 Port
11、Mysql Slow of 3307 Port
12、Mysql Sort of 3307 Port
13、Mysql Uptime of 3307 Port
如何實現:
一、客戶端
1、監控內容的json化
在客戶端里,需要把監控的內容json化展示,然后服務端可以通過正則來過濾出結果
下面在是我的json監控mysql的json展示
腳本內容如下:
#!/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[@]}doif [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];thensocket=`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"fidoneprintf '\t ]\n'printf '}\n' } $1把此文件存放到/usr/local/zabbix/bin里,然后給與755權限,并修改用戶與組為zabbix,同時允許zabbix用戶無密碼運行netstat
#Disable requiretty
sed -i 's/^Defaults.*.requiretty/#Defaults requiretty/' /etc/sudoers不關閉的話,會無法獲取數據,并且zabbix日志里報
2、修改zabbix_agentd.conf文件
在zabbix_agentd.conf最后添加以下內容
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測試
如果你能通過/usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k zabbix_low_discovery[mysql]命令獲取數據就代表沒問題
[root@zabbix1 bin]# /usr/local/zabbix/bin/zabbix_get -s 127.0.0.1 -k zabbix_low_discovery[mysql] {"data":[{"{#MYSQLPORT}":"3306"}] }3、mysql授權
4、重啟zabbix服務
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二、服務端
1、模板導入
把Template Mysql Auto Discovery導入到zabbix里(模板在附件),具體操作不介紹。
2、設置正則
在“管理”=》“一般”=》“正則表達式”里,選擇“新的正則表達式”
然后設置類似如下
我這是運行3301到3309這9個mysql實例
3、主機關聯模板
把需要監控mysql實例的主機管理模板即可監控,默認是3600秒后自動更新,如下圖
為什么設置3600秒?原因是如果設置時間過短,比如你設置60s,一個是服務器的壓力大,一個是如果你檢測的端口突然當掉了,還沒有來的急報警,主機通過json來獲取不到這個信息,就認為沒有這個端口,模板里會自動關閉這個監控項的內容(默認保留30天,然后自動刪除),這樣報警功能就基本沒有了,所以還是發現的間隔時間長一些比較好。
總結
以上是生活随笔為你收集整理的zabbix企业应用之low level discovery监控mysql的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UpdatePanel的内容中出现自定义
- 下一篇: PingingLab传世经典系列《CCN