配置mysql多實例
注釋:自動發現:創建監控主機;低級自動發現:創建監控項
mysql單實例是直接yum安裝,開啟mysql多實例
準備配置文件
#mysql3307實例
cp /etc/my.cnf /etc/my3307.cnf
vim /etc/my3307.cnf
[mysqld]
datadir=/data/3307/
socket=/data/3307/mysql.sock
port=3307
user=mysql
symbolic-links=0
[mysqld_safe]
log-error=/data/3307/mysqld.log
pid-file=/data/3307/mysqld.pid#mysql3308實例
cp /etc/my3307.cnf /etc/my3308.cnf
sed -i 's#3307#3308#g' /etc/my3308.cnf#創建mysql實例路徑
mkdir -p /data/{3307,3308}初始化數據庫3307
mysql_install_db --user=mysql --defaults-file=/etc/my3307.cnf
啟動數據
mysqld_safe --defaults-file=/etc/my3307.cnf &初始化數據庫3308
mysql_install_db --user=mysql --defaults-file=/etc/my3308.cnf
啟動數據
mysqld_safe --defaults-file=/etc/my3308.cnf &
檢查多實例mysql狀態正常,多實例mysql準備完成。
配置低級自動發現
創建一個鍵值,定義key就是mysql.discovery
vim /etc/zabbix/zabbix_agentd.d/mysql.discovery.conf
UserParameter=mysql.discovery,/bin/bash /server/scripts/mysql.discovery.sh
#創建腳本實現json格式的文件內容
vim /server/scripts/mysql.discovery.sh
#!/bin/bash
#mysql low-level discovery
res=`netstat -lntp|awk -F "[ :\t]+" '/mysqld/{print$5}'`
port=($res)
printf '{'
printf '"data":['
for key in ${!port[@]}
do
if [[ "${#port[@]}" -gt 1 && "${key}" -ne "$((${#port[@]}-1))" ]];then
printf '{'
printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"},"
else [[ "${key}" -eq "((${#port[@]}-1))" ]]
printf '{'
printf "\"{#MYSQLPORT}\":\"${port[${key}]}\"}"
fi
done
printf ']'
printf '}\n'
執行腳本mysql.discovery.sh實現json格式內容,實現對應的mysql端口
測試取值成功,注意:默認情況下載,zabbix會以zabbix用戶的身份執行剛才的discover.sh腳本, netstat -lntup需要root用戶的權限,所以這里我們使用suid來解決這個問題
chmod u+s /usr/bin/netstat
zabbix界面上創建自動發現規則
規則創建完成,如果要給mysql.discovery該規則添加一個過濾器,則需要創建一個正則表達式
配置一個過濾器的正則表達式,結果為假,意思就是說,將3306該MySQL的端口去掉。
標簽里面的宏值,就是上面執行腳本輸出的json格式內容的{#MYSQLPORT}
配置監控原型
我這里調用原來配置文件:userparameter_mysql.conf里面的key就是mysql.status[*]
拿出一條對應參考,到命令行中執行測試,
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'
測試取值成功
$1就是zabbix系統中模板對應的mysql的鍵值內容;
$$2就是防止出現與系統中的變量發生沖突。
home就是一個變量,沒有實際意義
其他說明,命令行中直接獲取數據庫中信息,兩個中方法:
#方法一:
echo "select version()" |mysql
#方法二:
mysql -e "select version()"
數據庫中查看sock文件路徑
#進入指定的數據庫
mysql -h 127.0.0.1 -P 3307
#查看sock文件路徑
show VARIABLES like '%sock%';
修改配置文件:userparameter_mysql.conf,加入指定的主機的地址和指定端口,端口使用$2進行傳參即可。
重啟zabbix-agent服務器
systemctl restart zabbix-agent.service
#測試取值3307和3308均有值
zabbix_get -s 127.0.0.1 -k mysql.status[Uptime,3307]
解釋:根據配置文件中對應:mysql.status[*]定義一個key
Uptime(啟動時間)傳參$1
3307傳參為$2
創建監控項原型名稱不能一致,鍵值里面,啟動時間一個,mysql端口是變量,因有過濾3306。所以每個uptime對應兩個值。
添加一個應用集mysqls。然后點擊添加
驗證,查看監測-最新數據,選擇對應主機和應用集,查看最新數據即可,對應兩條監控項,包含3307和3308數據庫。