1. 程式人生 > >基於zabbix的Mysql自定義監控

基於zabbix的Mysql自定義監控

數據監控 ott back 自帶 str ups zha mysql服務器 inux

Mysql自定義監控

需求:公司需要做mysql的數據監控,對mysql的狀態,流量進行監控。

分析:zabbix自動就有Template App MySQL模版,我們只要添加mysql監控腳本就可以實現自定義監控。

配置如下:

zabbix的服務端搭建,這裏不再演示,我這裏的zabbixserver已經配置好的了,直接進入mysql監控構建。

1、建立mysql host groups組

mysql模板是 zabbix系統提供的,進入 zabbix web 後臺,配置-->主機群組-->點擊“創建主機群組”-->選擇template群組,選擇模板“TemplateApp MySQL,Templdate OS Linux”,TemplateApp Zabbix Agen;TemplateApp MySQL依賴於模板TemplateApp Zabbix Agent所以也要添加。如圖1、圖2所示:

技術分享圖片

圖1

技術分享圖片

圖2

2、部署agent客戶端,使用ansible一健安裝,詳細可以參考我安裝過程http://blog.51cto.com/xiaozhagn/1975084

3、建立主機,添加zabbix戶端主機,添加模板。

配置-->主機-->點擊創建主機--> 創建zabbix客戶機(我這裏是node2.1)-->選擇模板選項,選擇模板“Template App MySQL”、

“Templdate OS Linux”,“TemplateApp Zabbix Agent“,最後點擊左邊的“添加”按鈕,最後點擊“更新”完成創建。如圖3、圖4所示:

技術分享圖片

圖3

技術分享圖片

圖4

4,開啟mysql性能監控。

這裏可以采用zabbix自帶的mysql模版,但是也需要在mysql服務器上準備獲取mysql status的腳本chk_mysql.sh,zabbix通過調用這個腳本來獲取mysql的運行信息。

在配置zabbix客戶端文件zabbix_agentd.conf裏面添加mysql監控信息:

[root@node2 ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf

#添加以下內容

UserParameter=mysql.version,mysql -V
UserParameter=mysql.status[*],/usr/local/zabbix/scripts/chk_mysql.sh $1      #這個是放腳本的路徑
UserParameter=mysql.ping,netstat -ntpl |grep 3306 |grep mysql |wc |awk '{print $1}'


5、進入數據庫添加mysql帳號,(我這裏的數據庫是用yum裝的)

MariaDB [(none)]> GRANT PROCESS,SUPER,REPLICATION CLIENT ON *.* TO zabbix@'127.0.0.1' IDENTIFIED BY 'xiaozhang';


6、接下來準備mysql的運行信息監控,需要準備新的mysql監控腳本chk_mysql.sh。(名稱要與在zabbix客戶端添加的腳本路徑的名稱一致)

[root@node2 scripts]# mkdir /usr/local/zabbix/scripts/

[root@node2 scripts]# cat /usr/local/zabbix/scripts/chk_mysql.sh

#!/bin/sh
# -------------------------------------------------------------------------------
# FileName:    check_mysql.sh
# Date:        2018/1/10
# Author:     xiaozhang
# Email:       [email protected]
MYSQL_SOCK="/var/lib/mysql/mysql.sock"
MYSQL_USER='zabbix'
MYSQL_PWD='xiaozhang'
MYSQL_HOST='127.0.0.1'
MYSQL_PORT='3306'
ARGS=1
if [ $# -ne "$ARGS" ];then
    echo "Please input one arguement:"
fi
case $1 in
    Uptime)
        result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK status|cut -f2 -d":"|cut -f1 -d"T"`
            echo $result
            ;;
        Com_update)
            result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_update"|cut -d"|" -f3`
            echo $result
            ;;
        Slow_queries)
        result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK status |cut -f5 -d":"|cut -f1 -d"O"`
                echo $result
                ;;
    Com_select)
        result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_select"|cut -d"|" -f3`
                echo $result
                ;;
    Com_rollback)
        result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_rollback"|cut -d"|" -f3`
                echo $result
                ;;
    Questions)
        result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK status|cut -f4 -d":"|cut -f1 -d"S"`
                echo $result
                ;;
    Com_insert)
        result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_insert"|cut -d"|" -f3`
                echo $result
                ;;
    Com_delete)
        result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_delete"|cut -d"|" -f3`
                echo $result
                ;;
    Com_commit)
        result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_commit"|cut -d"|" -f3`
                echo $result
                ;;
    Bytes_sent)
        result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Bytes_sent" |cut -d"|" -f3`
                echo $result
                ;;
    Bytes_received)
        result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Bytes_received" |cut -d"|" -f3`
                echo $result
                ;;
    Com_begin)
        result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -S $MYSQL_SOCK extended-status |grep -w "Com_begin"|cut -d"|" -f3`
                echo $result
                ;;
                       
        *)
        echo "Usage:$0(Uptime|Com_update|Slow_queries|Com_select|Com_rollback|Questions)"
        ;;
esac


7、添加chec_mysql腳本權限:

 [root@node2 ~]#chmod u+x /usr/local/zabbix/scripts/chk_mysql.sh
 [root@node2 ~]#chown -R zabbix.zabbix /usr/local/zabbix/scripts/chk_mysql.sh


8、重啟agent,在zabbix服務器上面檢查基本mysql服務器信息是否能正常獲取到。

重啟客戶端

[root@node2 ~]# /etc/init.d/zabbix_agentd restart

服務測試,獲取mysql監控數據

[root@node1 ~]# zabbix_get -s 172.25.0.30 -p10050 -k "system.cpu.load[all,avg15]";  
0.050000 
[root@node1 ~]# zabbix_get -s 172.25.0.30 -p10050 -k mysql.status[Com_update]  
0
[root@node1 ~]#  zabbix_get -s 172.25.0.30 -p10050 -k mysql.status[Com_insert]
0


9、監控mysql性能圖添加

監控腳本運行正常後,就會在zabbix-server的“監控中”的下面的“圖形“裏面看到mysql的監控性能視圖,選擇選擇主機node2.1(zabbix_agent),圖形選擇MySQL operations可以看到性能監控視圖,如圖5所示:

技術分享圖片

圖5

10、zabbix自帶模版默認有2個性能圖,當然也可以新建其他圖,只需要找到主機所在,創建圖形就可以了,如圖6、圖7所示:

技術分享圖片

圖6

技術分享圖片

圖7


基於zabbix的Mysql自定義監控