給大家介紹了如何通過固定端口監控mysql(位址http://dl528888.blog.51cto.com/2382721 /1346590)與使用lld監控mysql性能(位址http://dl528888.blog.51cto.com/2382721 /1357713),現在我在給大家介紹一下如何監控mysql主從狀态的。
下面是監控效果圖:
如何實作:
一、用戶端
1、監控内容的json化
在用戶端裡,需要把監控的内容json化展示,然後服務端可以通過正則來過濾出結果
下面在是我的json監控mysql的json展示
腳本内容如下:
<code>#!/bin/bash</code>
<code>#Fucation:mysql low-level discovery</code>
<code>#Script_name mysql_low_discovery.sh</code>
<code>mysql() {</code>
<code> </code><code>port=($(</code><code>sudo</code> <code>netstat</code> <code>-tpln | </code><code>awk</code> <code>-F </code><code>"[ :]+"</code> <code>'/[m]ysql/ && /0.0.0.0/ {print $5}'</code><code>))</code>
<code> </code><code>printf</code> <code>'{\n'</code>
<code> </code><code>printf</code> <code>'\t"data":[\n'</code>
<code> </code><code>for</code> <code>key </code><code>in</code> <code>${!port[@]}</code>
<code> </code><code>do</code>
<code> </code><code>if</code> <code>[[ </code><code>"${#port[@]}"</code> <code>-gt 1 && </code><code>"${key}"</code> <code>-</code><code>ne</code> <code>"$((${#port[@]}-1))"</code> <code>]];</code><code>then</code>
<code> </code><code>socket=`</code><code>ps</code> <code>aux|</code><code>grep</code> <code>${port[${key}]}|</code><code>grep</code> <code>-</code><code>v</code> <code>grep</code><code>|</code><code>awk</code> <code>-F </code><code>'='</code> <code>'{print $10}'</code><code>|</code><code>cut</code> <code>-d </code><code>' '</code> <code>-f 1`</code>
<code> </code><code>printf</code> <code>'\t {\n'</code>
<code> </code><code>printf</code> <code>"\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n"</code>
<code> </code><code>else</code> <code>[[ </code><code>"${key}"</code> <code>-</code><code>eq</code> <code>"((${#port[@]}-1))"</code> <code>]]</code>
<code> </code><code>printf</code> <code>"\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n"</code>
<code> </code><code>fi</code>
<code> </code><code>done</code>
<code> </code><code>printf</code> <code>'\t ]\n'</code>
<code> </code><code>printf</code> <code>'}\n'</code>
<code>}</code>
<code>$1</code>
把此檔案存放到/usr/local/zabbix/bin裡,然後給與755權限,并修改使用者與組為zabbix,同時允許zabbix使用者無密碼運作netstat
<code>echo</code> <code>"zabbix ALL=(root) NOPASSWD:/bin/netstat"</code><code>>></code><code>/etc/sudoers</code>
#Disable requiretty
<code>sed</code> <code>-i </code><code>'s/^Defaults.*.requiretty/#Defaults requiretty/'</code> <code>/etc/sudoers</code>
不關閉的話,會無法擷取資料,并且zabbix日志裡報
2、修改zabbix_agentd.conf檔案
在zabbix_agentd.conf最後添加以下内容
<code>UserParameter=zabbix_low_discovery[*],</code><code>/bin/bash</code> <code>/usr/local/zabbix/bin/mysql_low_discovery</code><code>.sh $1</code>
<code>UserParameter=mysql_stats[*],mysql -h localhost -P $1 -uzabbix -pzabbix -e </code><code>"show global status"</code><code>|</code><code>grep</code> <code>"\<$2\>"</code><code>|</code><code>cut</code> <code>-f2</code>
<code>UserParameter=mysql_stats_slave[*],mysql -h localhost -P $1 -uzabbix -pzabbix -e </code><code>"show slave status\G"</code><code>|</code><code>grep</code> <code>"\<$2\>"</code><code>|</code><code>awk</code> <code>'{if($NF=="Yes") {print 1} else {print 0}}'</code>
3、測試
如果你能通過/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]指令擷取資料就代表沒問題,下面是我的測試結果
<a href="http://s3.51cto.com/wyfs02/M01/39/1E/wKioL1O2CTnjlCd-AAEHXuUCuqU182.jpg" target="_blank"></a>
4、mysql授權
<code>GRANT PROCESS,REPLICATION CLIENT ON *.* TO </code><code>'zabbix'</code><code>@</code><code>'localhost'</code> <code>identified BY </code><code>'zabbix'</code><code>;</code>
<code>Flush privileges;</code>
5、重新開機zabbix服務
<code>ps</code> <code>-ef|</code><code>grep</code> <code>zabbix|</code><code>grep</code> <code>-</code><code>v</code> <code>grep</code><code>|</code><code>awk</code> <code>'{print $2}'</code><code>|</code><code>xargs</code> <code>kill</code> <code>-9</code>
<code>/usr/local/zabbix/sbin/zabbix_agentd</code> <code>-c </code><code>/usr/local/zabbix/conf/zabbix_agentd</code><code>.conf</code>
二、服務端
1、模闆導入
把Template Mysql Auto Discovery導入到zabbix裡(模闆在附件),具體操作不介紹。
2、設定正則
在“管理”=》“一般”=》“正規表達式”裡,選擇“新的正規表達式”
然後設定類似如下
我這是運作3301到3309這9個mysql執行個體
3、主機關聯模闆
把需要監控mysql執行個體的主機管理模闆即可監控,預設是3600秒後自動更新,如下圖
為 什麼設定3600秒?原因是如果設定時間過短,比如你設定60s,一個是伺服器的壓力大,一個是如果你檢測的端口突然當掉了,還沒有來的急報警,主機通過 json來擷取不到這個資訊,就認為沒有這個端口,模闆裡會自動關閉這個監控項的内容(預設保留30天,然後自動删除),這樣報警功能就基本沒有了,是以 還是發現的間隔時間長一些比較好
本文轉自 15816815732 51CTO部落格,原文連結:http://blog.51cto.com/68686789/1740570