Zabbix 3.2.6-Mysql多實例監控-Percona Monitoring Plugins自動發現


mysql多實例監控實錄
 
系統環境:
cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)
內核版本:
uname -r
3.10.0-514.el7.x86_64
docker版本:
docker -v
Docker version 1.12.6, build 3a094bd/1.12.6
docker 相關鏡像版本:
docker.io/zabbix/zabbix-web-nginx-mysql latest
docker.io/zabbix/zabbix-server-mysql latest
docker.io/mysql 5.7
被監控mysql應用版本:
mysql-5.7.17-linux-glibc2.5-x86_64
Percona Monitoring Plugins版本:
 
寫在最前:如果zabbix server和zabbix agent已經通過其他方式安裝,可以直接跳過1、2步,直接從第3步開始看。
 
1、zabbix服務端我們運行在docker容器內
所以服務器端先安裝docker服務
yum install -y epel-release
yum install -y docker #centos6.x版本的命令是yum install -y docker-io
 
然后運行docker服務
systemctl start docker
docker加入開機自啟動
systemctl enable docker
查看docker是否成功啟動
systemctl status docker
注:使用docker需要使用加速器,否則那龜速,自己體會吧。加速器daocloud和阿里雲都可以,我使用的前者。
 
2.安裝相關容器
2.1. mysql 容器
docker run --name mysql-server -t \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="ywwd.net" \
      -e MYSQL_ROOT_PASSWORD="ywwd.net" \
      -v /data/container/mysql/zabbix:/var/lib/mysql \
      -v /etc/localtime:/etc/localtime:ro \
      --restart=always \
      -d mysql:5.7 \
      --character-set-server=utf8 --collation-server=utf8_general_ci --sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
 
2.2. zabbix-server 容器
docker run --name zabbix-server-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="ywwd.net" \
      -e MYSQL_ROOT_PASSWORD="ywwd.net" \
      --link mysql-server:mysql \
      -p 10051:10051 --restart=always \
      -v /etc/localtime:/etc/localtime:ro \
      -d zabbix/zabbix-server-mysql:latest
 
2.3. zabbix-web 容器(nginx)
docker run --name zabbix-web-nginx-mysql -t \
      -e DB_SERVER_HOST="mysql-server" \
      -e MYSQL_DATABASE="zabbix" \
      -e MYSQL_USER="zabbix" \
      -e MYSQL_PASSWORD="ywwd.net" \
      -e MYSQL_ROOT_PASSWORD="ywwd.net" \
      --link mysql-server:mysql \
      --link zabbix-server-mysql:zabbix-server \
      -v /etc/localtime:/etc/localtime:ro \
      -p 80:80 \
      --restart=always \
      -d zabbix/zabbix-web-nginx-mysql:latest
 
注意:這里有個小問題,zabbix-web-nginx-mysql的啟動腳本/run_zabbix_component.sh中,指定了時區,不是中國的Asia/Shanghai,所以我們要進入zabbix-web-nginx-mysql進行修改
2.4. 修改zabbix-web的時區
docker exec -it zabbix-web-nginx-mysql /bin/bash
TZ=${TZ:-"Asia/Shanghai"} 這里改為Asia/Shanghai,否則zabbix-web端的時間會慢5個小時
sed -in 's#Europe/Riga#Asia/Shanghai#g' /run_zabbix_component.sh
修改時區后,需要重啟容器
docker restart zabbix-web-nginx-mysql
2.5. 在firewall防火牆放開zabbix-server和zabbix-agent的服務端口號
firewall-cmd --permanent --add-port=10050-10051/tcp
#--permanent永久生效,10050zabbix-agent服務端口,10051zabbix-server服務端口
firewall-cmd --reload
#更改后需要重新加載firewall防火牆
firewall-cmd --list-all
#最后查看配置是否生效
 
這樣zabbix-server端就已經安裝完畢
接下來客戶端我們采用rpm包進行安裝
rpm -ivh zabbix-agent-3.2.6-1.el7.x86_64.rpm
同樣需要放開zabbix-agent端口
firewall-cmd --permanent --add-port=10050/tcp
firewall-cmd --reload
 
然后對zabbix-agent端進行配置
egrep -v '^$|^#' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
Server=10.0.0.106 # <====zabbix-server端的IP地址
ServerActive=10.0.0.106 #<====zabbix-server端的IP地址,主動方式
Hostname=10.0.0.107 #<====zabbix-agent端的IP地址或者主機名
Include=/etc/zabbix/zabbix_agentd.d/*.conf
 
然后在zabbix-server端的web界面進行主機添加
 
1)修改主機名稱,要跟zabbix-agent的配置文件中的Hostname相對應
2)選擇你想設置的群組,如果群組不存在,可以在下面一欄新的群組中進行添加
3)指定zabbix-agent端的IP地址或者域名(端口號一般變)
其他保持默認,點擊添加即可
 
3、利用Percona Monitoring Plugins插件進行MySQL多實例的監控
1)percona監控zabbix的腳本是使用php寫的,所以需要准備好php運行環境,這里直接用yum安裝就可以滿足要求了:
yum install -y php php-mysql
2)安裝percona-zabbix-templates
 
也可配置Percona yum倉庫后安裝,建議配置percona的yum源,因為作為一個DBA你肯定會用到percona toolkit套件。 注:我沒有用這種方式,percona toolkit我是通過源碼包安裝的。
yum install -y https://www.percona.com/redir/downloads/percona-release/redhat/latest/percona-release-0.1-3.noarch.rpm
yum install -y percona-zabbix-templates
 
4、yum安裝的shell為單實例版,所以我們要進行相關修改,這里已經有小伙伴進行了修改,我們直接克隆,進行對比,需要先安裝git
 
1)對比后,我們發現在get_mysql_stats_wrapper.sh腳本中,添加了相關參數
PORT=$2
HOST=127.0.0.1
 
2)CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items $ITEM --port $PORT"
CMD變量的php路徑一定要指定正確,否則會報錯,我們在后面添加了 --port $PORT
CACHEFILE改為判斷
if [ $PORT == 3306 ];then
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"
else
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt":$PORT
fi
 
3)running-slave進行如下修改,此處報警跟模板中的另一個Slave Stopped是重疊的,不過這個比Slave Stopped要靈敏,大概提前3分鍾左右報警,不過需要在/etc/my.cnf以及腳本中添加mysql的賬號和密碼等信息,各有利弊吧
 
if [ "$ITEM" = "running-slave" ]; then
# Check for running slave
RES=`HOME=~zabbix /usr/local/mysql/bin/mysql -P$PORT -h127.0.0.1 -uzabbix -e 'SHOW SLAVE STATUS\G' | egrep '(Slave_IO_Running|Slave_SQL_Running):' | grep -i yes|wc -l `
if [ "$RES" -ne 2 ]; then
echo 1
else
echo 0
fi
exit
並在/etc/my.cnf中添加
[mysql]
password=123456 #存在安全隱患,但是如果把權限改小,可能會獲取不到值,因為是通過zabbix用戶去運行的腳本,里面只是密碼,而且賬號只能本機登錄,所以問題也不大,但是要嚴格控制其他3個shell腳本的權限。
 
4)#cat $CACHEFILE | sed 's/ /\n/g; s/-1/0/g'| grep $ITEM | awk -F: '{print $2}'
這一列改為:
cat $CACHEFILE | sed 's/ /\n/g'| grep $ITEM | awk -F: '{print $2}' 或者
cat $CACHEFILE | sed 's/ /\n/g; s/-1/1/g'| grep $ITEM | awk -F: '{print $2}'
改為第一個,在zabbix-server的web端配置報警閾值為小於0,或者等於1的時候報警,
改為第二行,可以統一設置報警閾值為等於1,因為這個問題,困擾了我好久
 
5、修改自動發現腳本
cat mysql_low_discovery.sh
#!/bin/bash
#Fucation:mysql low-level discovery
#Script_name mysql_low_discovery.sh
discovery() {
port=($(sudo ss -tpln | awk -F "[ :]+" '/[m]ysql/ {print $4}'))
printf '{\n'
printf '\t"data":[\n'
for key in ${!port[@]}
do
if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $9}'|cut -d ' ' -f 1`
printf '\t {\n'
printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"},\n"
else [[ "${key}" -eq "((${#port[@]}-1))" ]]
socket=`ps aux|grep ${port[${key}]}|grep -v grep|awk -F '=' '{print $9}'|cut -d ' ' -f 1`
printf '\t {\n'
printf "\t\t\t\"{#MYSQLPORT}\":\"${port[${key}]}\"}\n"
fi
done
printf '\t ]\n'
printf '}\n'
}
discovery
 
注意:由於此處使用了 sudo ,所以要把zabbix用戶加上sudo權限,且只能執行 ss命令
echo 'zabbix ALL=(ALL) NOPASSWD:/usr/sbin/ss'>>/etc/sudoers
 
修改ss_get_mysql_stats.php腳本
$mysql_user = 'zabbix'; <=====此為php登錄mysql的用戶
$mysql_pass = 123456; <=====此為php登錄mysql的密碼
$mysql_port = NULL; <=====端口和socket要改為NULL
$mysql_socket = NULL;
 
修改userparameter_percona_mysql.conf 配置文件
把每行中的逗號',' 替換為[*],
sed -in 's#,#[*],#g' userparameter_percona_mysql.conf
在每行后面添加 $1
sed -in 's#$#$1#g' userparameter_percona_mysql.conf
最后在首行添加端口自動發現腳本
sed -in '1i UserParameter=MySQL.discovery,/bin/bash /var/lib/zabbix/percona/scripts/mysql_low_discovery.sh' userparameter_percona_mysql.conf
 
6、復制腳本文件並執行權限
mkdir -p /var/lib/zabbix/percona/scripts/
cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
cp get_mysql_stats_wrapper.sh /var/lib/zabbix/percona/scripts/
cp mysql_low_discovery.sh /var/lib/zabbix/percona/scripts/
cp ss_get_mysql_stats.php /var/lib/zabbix/percona/scripts/
chmod 700 /var/lib/zabbix/percona/scripts/*
chown -R zabbix. /var/lib/zabbix/
7、最后一定要在所有的庫上面做授權操作,否則拿不到監控數據
GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT ON *.* TO 'zabbix'@'localhost' identified by '123456';
flush privileges;
 
8、最后把模板Mysql_Multiport.xml導入到zabbix-server內,所有用到的腳本文件都已經添加到附件中,大家可以下載使用。
創建觸發器原型
 
在zabbix-server端,添加觸發器
依次點擊 主機===>自動發現===>觸發器類型===>點擊右上角的創建觸發器原型
分配報警級別,點擊表達式欄的添加,選擇選擇原型
然后選擇 例如: MySQL.slave-stopped[{#MYSQLPORT}]
選擇最新的T值小於N
N為0
注:如果在第4.4中指定的是cat $CACHEFILE | sed 's/ /\n/g; s/-1/1/g'| grep $ITEM | awk -F: '{print $2}'
選擇最新的T值等於N
N為1
 
然后我們可以手動停止主從復制,稍等片刻,就會發了報警信息
 
博客園不允許放附件,所以我只能把附件放在百度雲了
http://pan.baidu.com/s/1slFGVoT
 
參考文章:
https://github.com/hc-dba/Mysql_Multiport_monitor_used_zabbix
 
另外可以添加微信和郵件告警,這里推薦下面的博文
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM