zabbix監控MySQL多實例實踐

一、實踐背景:
一臺機器上部署了多個MySQL實例,每個實例使用不同的端口,需要通過zabbix將其都納入監控中。

二、實踐方法及原理說明:
1.在Zabbix上創建監控MySQL數據庫使用的模版,導入案例模版:
鏈接: https://pan.baidu.com/s/1nXooNPMXrmaAQidRrxVOLg 提取碼: ure1

2.在模版上創建自動發現的規則,在自動發現規則中需要定義兩個東西:
a.鍵值 用來自動獲取MySQL實例的端口,需要使用到主機宏{$MYSQLPORT}
zabbix監控MySQL多實例實踐

b.監控項原型 根據獲取的端口來生成對應的監控項,需要使用到自動發現宏{#MYSQLPORT}
zabbix監控MySQL多實例實踐

3.在需要監控的主機上定義一個宏{$MYSQLPORT},對應要監控的端口,如3306_3307
zabbix監控MySQL多實例實踐

4.在Zabbix agent上創建自動發現端口的腳本、狀態監控腳本。

原理說明:
通過自動發現規則來獲取MySQL實例的端口,自動發現規則上的{$MYSQLPORT}是要傳遞給agent自動發現腳本的參數,這個值是從主機定義的宏{$MYSQLPORT}獲取過來的,自動發現的腳本將其解析成{#MYSQLPORT}: 端口的形式,監控項原型再根據{#MYSQLPORT}的值來生成監控項,大致流程如下:
主機定義宏{$MYSQLPORT}->自動發現規則鍵值{$MYSQLPORT}->調用agent上自動發現腳本並解析成{#MYSQLPORT} : 端口 ->監控項原型{#MYSQLPORT}->自動生成主機監控項

三、環境說明:
OS:CentOS Linux release 7.6.1810 (Core)
Zabbix Server 版本:4.2.4
MySQL端口:3306,3307
3306 socket:/tmp/mysql3306.sock
3307 socket:/tmp/mysql3307.sock
腳本路徑:/etc/zabbix/scripts/

四、在agent創建監控用的腳本
1.自動發現腳本:/etc/zabbix/scripts/discovery_mysqlport.sh
#!/bin/bash
res=`echo $1| sed "s/
/\n/g"`;
port=($res)
printf '{\n'
printf '\t"data":[\n'
for key in ${!port[@]}
do
if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];
then
printf '\t {\n'
printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n"

else [[ "${key}" -eq "((${#port[@]}-1))" ]]
printf '\t {\n'
printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n"
fi
done
printf '\t ]\n'
printf '}\n'

執行效果
zabbix監控MySQL多實例實踐

2.狀態檢查腳本:/etc/zabbix/scripts/mysql_status.sh
#!/bin/bash
var=$1
MYSQL_USER="zabbix"
MYSQL_PASSWORD=123456
MYSQL_SOCK_DIR="/tmp/mysql$2.sock"

${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} -S ${MYSQL_SOCK_DIR} -e "show global status;" 2> /dev/null |grep -v Variable_name|grep "\b${var}\b"|awk '{print $2}'

3.在agent上添加監控項
UserParameter=mysql_discovery[],/etc/zabbix/scripts/discovery_mysql_port.sh $1
UserParameter=mysql.status[
],/etc/zabbix/scripts/mysql_status.sh $1 $2

4.重啓agent服務
systemctl restart zabbix-agent

自動生成的監控項效果圖:
zabbix監控MySQL多實例實踐

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章