天天看點

zabbix企業應用之Mysql主從監控

給大家介紹了如何通過固定端口監控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/ &amp;&amp; /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 &amp;&amp; </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>&gt;&gt;</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>"\&lt;$2\&gt;"</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>"\&lt;$2\&gt;"</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