Zabbix監控MySQL以及主從狀態
環境
MySQL主庫:192.168.253.128
MySQL從庫:192.168.253.140
Zabbix主機的ip:192.168.253.133
Zabbix版本:3.0
系統:CentOS7
第一步:安裝Zabbix3.0
下載連結:https://www.zabbix.com/download?zabbix=3.0&os_distribution=centos&os_version=7&db=MySQL
官方文件: https://www.zabbix.com/documentation/3.0/manual
安裝相關依賴包
yum install httpd php php-mysql php-mbstring php-gd php-bcmath php-ldap php-xml mariadb mariadb-server -y
安裝zabbix agent和zabbix server
rpm -i https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix-get -y
第二步:配置資料庫
安裝資料庫
systemctl start mariadb #啟動資料庫 ln -sv /var/lib/mysql/mysql.sock /tmp/mysql.sock mysql -uroot #進入mysql
建立資料庫和授權使用者
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to [email protected] identified by 'password';
MariaDB [(none)]> quit;
匯入表結構
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -ppassword zabbix
第三步:配置php時區
修改/etc/php.ini
date.timezone = Asia/Shanghai
第四步:修改Zabbix配置檔案
修改/etc/zabbix/zabbix_server.conf
ListenPort=10051 ##監聽的埠
LogType=file ##日誌的記錄的型別,這裡表示記錄在檔案中
LogFile=/var/log/zabbix/zabbix_server.log #日誌路徑
LogFileSize=0 #日誌大小,超過則會進行切割,0表示不切割
PidFile=/var/run/zabbix/zabbix_server.pid #pid檔案路徑
DBHost=localhost #資料庫位置 必填
DBName=zabbix #資料庫名稱 必填
DBUser=zabbix #連線資料庫的使用者名稱 必填
DBPassword=password #連線資料庫對應的密碼 必填
DBSocket=/tmp/mysql.sock #socket檔案路徑
DBPort=3306 #資料庫開放的埠 必填
第五步:啟動zabbix server和httpd
systemctl start httpd
zabbix_server -c /etc/zabbix/zabbix_server.conf
訪問http://192.168.253.133/zabbix
初始賬號密碼為Admin/zabbix
第六步:在MySQL上安裝zabbix-agent
在主庫與從庫安裝yum源和zabbix-agent
rpm -i https://repo.zabbix.com/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm
yum install zabbix-agent -y
修改配置檔案/etc/zabbix/zabbix_agentd.conf
Server=192.168.253.133 #這裡的ip是zabbix的Server端ip
Hostname=192.168.253.128 #這裡是主機名,必須唯一所以用ip代替
從庫也做對應的修改
啟動zabbix-agent
systemctl start zabbix-agent
第八步:安裝percona公司提供的監控模版
官方文件:https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html
下載地址: https://www.percona.com/downloads/percona-monitoring-plugins/LATEST/
需要建立一個使用者用於監控,只需要在主庫建立就可以了,因為主從同步這樣從庫也會同步過去。
mysql> GRANT ALL ON *.* TO 'monitor'@'192.168.253.%' IDENTIFIED BY '123456';
由於獲取MySQL資料的方式是通過PHP的,所以還需要下載相關的依賴
yum install php php-mysql -y
下載rpm包然後上傳到MySQL主庫和從庫的虛擬機器上
rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
安裝完成後會多兩個目錄
/var/lib/zabbix/percona/scripts #這個目錄是獲取資料的指令碼目錄
/var/lib/zabbix/percona/templates #這個是存放模版和配置項的目錄
設定配置檔案
mkdir -p /etc/zabbix_agentd.conf.d/
cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix_agentd.conf.d/userparameter_percona_mysql.conf
修改主配置檔案/etc/zabbix/zabbix_agentd.conf ,新增下面一行
Include=/etc/zabbix_agentd.conf.d/
修改檔案/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
HOST=192.168.253.128 #需要改成監控的主機,從庫則寫從庫的IP地址
修改檔案/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php
$mysql_user = 'monitor'; #用於監控的使用者
$mysql_pass = '123456'; #密碼
測試是否能成功獲取資料
/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
獲取到資料就表示成功
重啟agent
systemctl restart zabbix-agent
從庫也做對應的修改,即可
第九步:建立主機,匯入模版檔案
需要上傳模版檔案到主機
sz /var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml
然後建立主機
再建立個從庫的主機
匯入模版
選擇檔案就選剛才上傳的檔案
匯入的時候出現了一個問題
Invalid tag "/zabbix_export/date": "YYYY-MM-DDThh:mm:ssZ" is expected.
這是由於Percona公司的模版適用於Zabbix的2.x系列的,而我們這裡用的是3.0版本所以不相容,解決方法也很簡單,把這個模版匯入zabbix2.4然後再匯出來就可以了。
從zabbix2.4匯出的就可以再匯入zabbix3.0了
這次就匯入成功了
然後關聯相關的模版
點選Update,然後在從庫的主機也關聯一下
發現有一些錯誤
原因:在獲取資料的時候,會建立一個檔案/tmp/192.168.253.140-mysql_cacti_stats.txt,在這個檔案裡存放資料,而這個檔案的屬主和屬組是root
所以需要改一下許可權就可以了
chown -R zabbix:zabbix /tmp/192.168.253.128-mysql_cacti_stats.txt
類似的也修改一下從庫的檔案許可權
這樣就可以了
第十步:自定義指令碼監控主從狀態
這部分只需要在從庫的主機上做就可以了
指令碼內容
#!/bin/bash
#連線資料庫的密碼需要放在/etc/my.cnf中,不然會連線失敗
#表示連線的主機
DBHost=192.168.253.140
#指令碼名稱
prog=$(basename $0)
#用於獲取主從延遲時間的函式
Seconds_Behind_Master(){
Num=$(mysql -h $DBHost -e "show slave status \G;"|grep "Seconds_Behind_Master:" | awk -F: '{print $2}')
echo $Num
}
#檢查主從是否正常連線,如果正常返回50,如果連線失敗錯誤,則返回100,後續可以根據這個值設定觸發器
Master_Slave_Check(){
Num1=$(mysql -h $DBHost -e "show slave status\G;" | grep "Slave_IO_Running" | awk -F: '{print $2}' | sed 's/^[ \t]*//g')
Num2=$(mysql -h $DBHost -e "show slave status\G;" | grep "Slave_SQL_Running:" | awk -F: '{print $2}' | sed 's/^[ \t]*//g' )
if [[ $Num1 == "Yes" && $Num2 == "Yes" ]]
then
echo 50
else
echo 100
fi
}
#當用戶輸入錯誤,輸出提示資訊
usage() {
echo "Usage: $prog {Seconds_Behind_Master|Master_Slave_Check}"
}
main(){
case $1 in
Seconds_Behind_Master)
Seconds_Behind_Master;
;;
Master_Slave_Check)
Master_Slave_Check;
;;
*)
usage
exit 1
;;
esac
}
main $1
監控主從主要監控幾個項
Slave_IO_Running: Yes #表示IO執行緒正在執行
Slave_SQL_Running: Yes #表示SQL執行緒正在執行
Seconds_Behind_Master: 0 #表示延遲了多久
然後就可以通過下面這個指令碼進行監控了。使用的時候還需要注意一下,為了安全,把連線的賬號密碼放到了/etc/my.cnf檔案中,新增下面幾行
[client]
user=monitor
password=123456
測試指令碼能否成功獲取資料MySQL_Monitor.sh
需要給指令碼加上執行許可權
chmod +x MySQL_Monitor.sh
mkdir -p /etc/zabbix/zabbix_agentd_scripts/ #建立一個目錄存放指令碼
mv MySQL_Monitor.sh /etc/zabbix/zabbix_agentd_scripts/
建立配置檔案,自定義鍵
[[email protected] scripts]# cat /etc/zabbix/zabbix_agentd.d/monitor.conf
UserParameter=mysql_monitor[*],/etc/zabbix/zabbix_agentd_scripts/MySQL_Monitor.sh "$1"
然後再重啟zabbix-agent
systemctl restart zabbix-agent
在192.168.253.133上,獲取鍵值測試一下
[[email protected] ~]# zabbix_get -s 192.168.253.140 -k "mysql_monitor[Master_Slave_Check]"
50
[[email protected] ~]# zabbix_get -s 192.168.253.140 -k "mysql_monitor[Seconds_Behind_Master]"
0
然後再zabbix中自定義鍵就行了
可以看到成功獲取到資料了。