天天看點

zabbix應用之low-level discovery監控mysql

    當一台伺服器上MySQL有多個執行個體的時候,MySQL占用多個不同端口。利用zabbix的low-level discovery可以輕松監控。

    下面我寫了一個簡單的腳本,用于一鍵部署mysql監控。

    一、用戶端

    在被監控端運作此腳本,前提條件已經安裝好了zabbix agent(推薦yum安裝)。腳本已在CentOS6.2 x86_64環境下測試通過。腳本在附件提供下載下傳。

<code>#!/bin/sh</code>

<code>#</code>

<code># Filename:    autoMonitorMysql.sh</code>

<code># Revision:    1.0</code>

<code># Date:        2014/08/12</code>

<code># Author:      Qicheng</code>

<code># Email:</code>

<code># Website:     http://qicheng0211.blog.51cto.com/</code>

<code># Description: zabbix low level discovery監控MySQL</code>

<code># Notes: 在被監控用戶端運作此腳本,前提條件已經安裝好zabbix agent</code>

<code>ROOT_UID=0</code>

<code>if</code> <code>[ </code><code>"$UID"</code> <code>-</code><code>ne</code> <code>"$ROOT_UID"</code> <code>];</code><code>then</code>

<code>    </code><code>echo</code> <code>"Error: 必須以root使用者運作此程式!"</code>

<code>    </code><code>exit</code> <code>1</code>

<code>fi</code>

<code># 自行修改為你的zabbix agent配置檔案路徑</code>

<code>AGENT_CONF=</code><code>"/etc/zabbix/zabbix_agentd.conf"</code>

<code>mkdir</code> <code>-p </code><code>/etc/zabbix/monitor_scripts</code>

<code># 建立 mysql low-level discovery 腳本</code>

<code>cat</code> <code>&gt; </code><code>/etc/zabbix/monitor_scripts/mysql_port_discovery</code><code>.sh &lt;&lt; </code><code>'EOF'</code>

<code>#!/bin/bash</code>

<code>#Function: mysql low-level discovery</code>

<code>#Script_name: mysql_port_discovery.sh</code>

<code>mysql() {</code>

<code>    </code><code>port=(`</code><code>sudo</code> <code>/bin/netstat</code> <code>-tpln | </code><code>awk</code> <code>-F </code><code>"[ :]+"</code> <code>'/mysql/ &amp;&amp; /0.0.0.0/ {print $5}'</code><code>`)</code>

<code>    </code><code>max_index=$[${</code><code>#port[@]}-1]</code>

<code>    </code><code>printf</code> <code>'{\n'</code>

<code>    </code><code>printf</code> <code>'\t"data":['</code>

<code>    </code><code>for</code> <code>key </code><code>in</code> <code>${!port[@]}</code>

<code>    </code><code>do</code>

<code>        </code><code>printf</code> <code>'\n\t\t{'</code>

<code>        </code><code>printf</code> <code>"\"{#MYSQLPORT}\":\"${port[${key}]}\"}"</code>

<code>    </code><code>if</code> <code>[ $key -</code><code>ne</code> <code>$max_index ];</code><code>then</code>

<code>            </code><code>printf</code> <code>","</code>

<code>        </code><code>fi</code>

<code>    </code><code>done</code>

<code>    </code><code>printf</code> <code>'\n\t]\n'</code>

<code>    </code><code>printf</code> <code>'}\n'</code>

<code>}</code>

<code>case</code> <code>"$1"</code> <code>in</code>

<code>    </code><code>mysql)</code>

<code>        </code><code>"$1"</code>

<code>        </code><code>;;</code>

<code>    </code><code>*)</code>

<code>        </code><code>echo</code> <code>"Bad Parameter."</code>

<code>        </code><code>echo</code> <code>"Usage: $0 mysql"</code>

<code>        </code><code>exit</code> <code>1</code>

<code>esac</code>

<code>EOF</code>

<code>chown</code> <code>-R zabbix:zabbix </code><code>/etc/zabbix/monitor_scripts</code>

<code>chmod</code> <code>+x </code><code>/etc/zabbix/monitor_scripts/mysql_port_discovery</code><code>.sh</code>

<code># 判斷配置檔案是否存在</code>

<code>[ -f </code><code>"${AGENT_CONF}"</code> <code>] || { </code><code>echo</code> <code>"ERROR: File ${AGENT_CONF} does not exist."</code><code>;</code><code>exit</code> <code>1;}</code>

<code>include=`</code><code>grep</code> <code>'^Include'</code> <code>${AGENT_CONF} | </code><code>cut</code> <code>-d</code><code>'='</code> <code>-f2`</code>

<code># 在配置檔案中添加自定義參數</code>

<code>if</code> <code>[ -d </code><code>"$include"</code> <code>];</code><code>then</code>

<code>    </code><code>cat</code> <code>&gt; $include</code><code>/mysql_lld</code><code>.conf &lt;&lt; </code><code>'EOF'</code>

<code>UserParameter=mysql_port_discovery[*],</code><code>/bin/bash</code> <code>/etc/zabbix/monitor_scripts/mysql_port_discovery</code><code>.sh $1</code>

<code>UserParameter=mysql_status[*],mysql -h 127.0.0.1 -P $1 -uzabbix -pzabbix -N -e </code><code>"show global status  where Variable_name='$2'"</code> <code>2&gt;</code><code>/dev/null</code> <code>| </code><code>cut</code> <code>-f2</code>

<code>UserParameter=mysql_ping[*],mysqladmin -h 127.0.0.1 -P $1 -uzabbix -pzabbix </code><code>ping</code> <code>2&gt;</code><code>/dev/null</code> <code>| </code><code>grep</code> <code>-c alive</code>

<code>else</code>

<code>    </code><code>grep</code> <code>-q </code><code>'^UserParameter=mysql_port_discovery'</code> <code>${AGENT_CONF} || </code><code>cat</code> <code>&gt;&gt; ${AGENT_CONF} &lt;&lt; </code><code>'EOF'</code>

<code># 手動MySQL授權,添加zabbix賬戶</code>

<code>echo</code> <code>"請在所有MySQL執行個體中添加zabbix賬戶,執行&gt; GRANT PROCESS ON *.* TO 'zabbix'@'127.0.0.1' identified BY 'zabbix';flush privileges;"</code>

<code># 重新開機agent服務</code>

<code>[ -f </code><code>'/etc/init.d/zabbix-agent'</code> <code>] &amp;&amp; </code><code>/etc/init</code><code>.d</code><code>/zabbix-agent</code> <code>restart || </code><code>echo</code> <code>"需手動重新開機zabbix agent服務."</code>

<code># 授權zabbix使用者無密碼運作netstat指令</code>

<code>chmod</code> <code>+w </code><code>/etc/sudoers</code> 

<code>sed</code> <code>-i </code><code>'s/^\(Defaults\s\+requiretty\)/#\1/'</code> <code>/etc/sudoers</code>

<code>grep</code> <code>-q </code><code>'^zabbix ALL=(ALL).*netstat'</code> <code>/etc/sudoers</code> <code>|| </code><code>echo</code> <code>'zabbix ALL=(ALL)       NOPASSWD: /bin/netstat'</code> <code>&gt;&gt; </code><code>/etc/sudoers</code>

<code>chmod</code> <code>440 </code><code>/etc/sudoers</code>

<code># 關閉SELinux</code>

<code>setenforce 0</code>

<code>sed</code> <code>-i </code><code>'/^SELINUX=/c\SELINUX=disabled'</code> <code>/etc/sysconfig/selinux</code>

<code>sed</code> <code>-i </code><code>'/^SELINUX=/c\SELINUX=disabled'</code> <code>/etc/selinux/config</code>

    腳本執行完畢後,還需要手動MySQL授權,在所有執行個體中添加zabbix賬戶:

<code>mysql&gt; GRANT PROCESS ON *.* TO </code><code>'zabbix'</code><code>@</code><code>'127.0.0.1'</code> <code>identified BY </code><code>'zabbix'</code><code>;</code>

<code>mysql&gt; flush privileges;</code>

    在zabbix server端執行zabbix_get指令測試:

<code>shell</code><code># zabbix_get -s 115.238.xxx.xxx -k 'mysql_port_discovery[mysql]'</code>

<code>{</code>

<code>    </code><code>"data"</code><code>:[</code>

<code>        </code><code>{</code><code>"{#MYSQLPORT}"</code><code>:</code><code>"3306"</code><code>}</code>

<code>    </code><code>]</code>

<code>shell</code><code># zabbix_get -s 115.238.xxx.xxx -k 'mysql_status[3306,Uptime]'</code>

<code>1295092</code>

<code>shell</code><code># zabbix_get -s 115.238.xxx.xxx -k 'mysql_ping[3306]'</code>

<code>1</code>

    都能傳回資料,說明用戶端的MySQL監控部署好了。

    二、WEB端

    1、導入模闆

下載下傳附件模闆檔案(Template App MySQL used LLD.xml)後,導入到zabbix裡。

<a href="http://s3.51cto.com/wyfs02/M02/45/B6/wKioL1Pp4kSyoHKjAAGXWh7Zy8s473.jpg" target="_blank"></a>

    2、建立主機并連結模闆

<a href="http://s3.51cto.com/wyfs02/M01/45/B5/wKiom1Pp4cShB-e7AAGzKCOtQms583.jpg" target="_blank"></a>

    3、資料展示

<a href="http://s3.51cto.com/wyfs02/M00/45/B6/wKioL1Pp42OwPPWPAAbiWNEsyIs158.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/45/B5/wKiom1Pp5c3TKkJoAAQ8Pf6e16I805.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M02/45/B6/wKioL1Pp5yzSM7j0AAUMjs2XGA0952.jpg" target="_blank"></a>

<a href="http://down.51cto.com/data/2364742" target="_blank">附件:http://down.51cto.com/data/2364742</a>

本文轉自 張斌_青島 51CTO部落格,原文連結:http://blog.51cto.com/qicheng0211/1539101