新聞中心
一臺機(jī)器上部署了多個(gè)MySQL實(shí)例,每個(gè)實(shí)例使用不同的端口,需要通過zabbix將其都納入監(jiān)控中,下面為大家分享一下zabbix監(jiān)控mysql多實(shí)例具體方法。

創(chuàng)新互聯(lián)公司專注于中大型企業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計(jì)客戶成百上千,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運(yùn)用,我們將一直專注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進(jìn)的路上,與客戶一起成長!
用到的主要工具: 宏(分為模板宏,主機(jī)宏,自動發(fā)現(xiàn)宏)
主機(jī)宏格式:$MACRO (直接就可以 填 值)
自動發(fā)現(xiàn)宏:#MACRO (需要配合 創(chuàng)建的 key 取值)
大體架構(gòu)
1.agent主機(jī) — agent 主機(jī)創(chuàng)建 宏變量 $MYSQLPORT ,宏變量的值為 Discovery rules的 自動發(fā)現(xiàn)腳本參數(shù) 2.模板 — 模板里創(chuàng)建自動發(fā)現(xiàn)規(guī)則,靠的是自動發(fā)現(xiàn)腳本,得到自動發(fā)現(xiàn)宏變量。 3.監(jiān)控項(xiàng)– 在Discovery rules 里創(chuàng)建監(jiān)控項(xiàng),監(jiān)控項(xiàng)名稱和key值里都有自動發(fā)現(xiàn)宏變量,會自動生成相關(guān)端口的監(jiān)控項(xiàng) 4.客戶端 腳本和鍵創(chuàng)建,來支持整個(gè)架構(gòu)運(yùn)行
搭建步驟
1.創(chuàng)建模板
因?yàn)檫@個(gè)模板是 克隆 的默認(rèn) mysql監(jiān)控模板,可以忽略 items,triggers。 監(jiān)控項(xiàng)都在 Discovery rules 里。
2.為模板添加 自動發(fā)現(xiàn)宏(自動發(fā)現(xiàn)宏聲明的途徑就是下圖的腳本,腳本里只有生成固定的格式,zabbix就會認(rèn)定他是 自動發(fā)現(xiàn)宏)
上圖 里的 mysql.discovery 就是獲取 自動發(fā)現(xiàn)宏的 腳本,腳本是放在 agent端。
后面的 為此腳本執(zhí)行時(shí)帶的參數(shù),MYSQLPORT 是主機(jī)宏。
discovery rule 右邊的 filters 是過濾規(guī)則的意思,比方你 只想取腳本里的 某某 自動發(fā)現(xiàn)宏,就可以在里面設(shè)置。 這里就只有一個(gè)自動發(fā)現(xiàn)宏,所有不做 配置。
3.創(chuàng)建監(jiān)控項(xiàng)(監(jiān)控項(xiàng)和監(jiān)控的腳本都是要改的,因?yàn)樽詣影l(fā)現(xiàn)功能,至少腳本會多了一個(gè)參數(shù))
4.創(chuàng)建 主機(jī)宏
點(diǎn)開主機(jī),添加主機(jī)宏,宏名稱是 自動發(fā)現(xiàn)腳本里的 參數(shù), 宏的值就是 此 主機(jī)上需要監(jiān)控的端口。
這樣就實(shí)現(xiàn)了 只要改動主機(jī)宏的 值,就可以改變主機(jī)宏的監(jiān)控項(xiàng)。
腳本展示
1.discovery_mysql.sh 自動發(fā)現(xiàn)端口腳本 (網(wǎng)上抄的腳本做了修改)
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'
執(zhí)行實(shí)例: 以_ 為分隔符,格式化輸出 自動發(fā)現(xiàn)宏 ./discovery_mysql.sh 3306_3307_3308
{
"data":[
{
"{#MYSQLPORT}":"3306"},
{
"{#MYSQLPORT}":"3307"},
{
"{#MYSQLPORT}":"3308"}
]
}
2.mysql_filestype.sh 監(jiān)控mysql的一些掛載盤
var=$1
MYSQL_PORT=$2
MYSQL_NAME=`ps -ef |grep '/mysql/app/bin/mysqld'| grep "$MYSQL_PORT" |grep -v grep | awk -F" " '{print $11}' |awk -F"/" '{print $2}'` ;
MYSQL_SOCk_DIR="/$MYSQL_NAME/" ;
df -h "${MYSQL_SOCk_DIR}${var}" |grep -v Filesystem |awk -F" " '{print $5}' | awk -F"%" '{print $1}' ;
3.mysql_ping.sh 監(jiān)控mysql狀態(tài)
MYSQL_PORT=$1;
[ "${MYSQL_USER}" = '' ] && MYSQL_USER=xxx
[ "${MYSQL_PASSWORD}" = '' ] && MYSQL_PASSWORD=xxxxx
mysqladmin=/mysql/app/bin/mysqladmin ;
MYSQL_SOCk_DIR=`ps -ef |grep 'mysql'| grep "${MYSQL_PORT}" |grep -v 'grep' | awk -F" " '{print $16}'` ;
${mysqladmin} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_SOCk_DIR} ping 2> /dev/null |grep 'alive'|wc -l ;
注意: 這邊連接實(shí)例 都是 mysql -u -p -S /xxx/mysql.sock
但是后來發(fā)現(xiàn)部分客戶端總是無法正確顯示值,而且就是這條 語句報(bào)錯, 感覺是環(huán)境變量的問題
所以拿 –socket=/xxx/mysql.sock 來代替 -S/xxx/mysql.sock 。 這里的變量${MYSQL_SOCk_DIR} 就是–socket=/xxx/mysql.sock 。
4.mysql_repl.sh mysql主從狀態(tài)監(jiān)控
var=$1
MYSQL_PORT=$2
MYSQL_SOCk_DIR=`ps -ef |grep 'mysql'| grep "${MYSQL_PORT}" |grep -v 'grep' | awk -F" " '{print $16}'` ;
mysql=/mysql/app/bin/mysql
[ "${MYSQL_USER}" = '' ] && MYSQL_USER=xxx
[ "${MYSQL_PASSWORD}" = '' ] && MYSQL_PASSWORD=xxxx
${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_SOCk_DIR} -e "show slave status\G;" 2> /dev/null |grep "\b${var}\b"|awk -F" " '{print $2}' ;
主從狀態(tài) 有幾個(gè)端口的值是 空的, 這個(gè)得 具體問題具體設(shè)置
5.mysql_status2 mysql性能之類的監(jiān)控
mysql=/mysql/app/bin/mysql
var=$1
MYSQL_PORT=$2
[ "${MYSQL_USER}" = '' ] && MYSQL_USER=xxx
[ "${MYSQL_PASSWORD}" = '' ] && MYSQL_PASSWORD=xxxxx
MYSQL_SOCk_DIR=`ps -ef |grep 'mysql'| grep "${MYSQL_PORT}" |grep -v 'grep' | awk -F" " '{print $16}'` ;
${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_SOCk_DIR} -e "show global status;" 2> /dev/null |grep -v Variable_name|grep "\b${var}\b"|awk '{print $2}' ;
發(fā)現(xiàn)有些監(jiān)控項(xiàng) 或因?yàn)閿?shù)字過長而無法顯示,待解決
6.mysql_version.sh mysql版本監(jiān)控
MYSQL_PORT=$1;
MYSQL_SOCk_DIR=`ps -ef |grep 'mysql'| grep "${MYSQL_PORT}" |grep -v 'grep' | awk -F" " '{print $16}'` ;
mysql=/mysql/app/bin/mysql ;
[ "${MYSQL_USER}" = '' ] && MYSQL_USER=xxx
[ "${MYSQL_PASSWORD}" = '' ] && MYSQL_PASSWORD=xxxx
${mysql} -u${MYSQL_USER} -p${MYSQL_PASSWORD} ${MYSQL_SOCk_DIR} -e "select version();" 2> /dev/null |awk 'END {print}'
7.mysql_status_many.conf 生成可用鍵 配置文件
UserParameter=mysql.discovery[*],/patrol/zabbix/bin/duoshili_discovery/discovery_mysql.sh $1
UserParameter=mysql.status_many[*],/patrol/zabbix/bin/duoshili_discovery/mysql_status2 $1 $2
UserParameter=mysql.ping_many[*],/patrol/zabbix/bin/duoshili_discovery/mysql_ping.sh $1
UserParameter=mysql.version_many[*],/patrol/zabbix/bin/duoshili_discovery/mysql_version.sh $1
UserParameter=mysqlcheck_repl[*],/patrol/zabbix/bin/duoshili_discovery/mysql_repl.sh $1 $2
UserParameter=mysql.filestyle_many[*],/patrol/zabbix/bin/duoshili_discovery/mysql_filestype
網(wǎng)頁題目:使用zabbix監(jiān)控mysql多實(shí)例
網(wǎng)頁URL:http://www.dlmjj.cn/article/cdeidpe.html


咨詢
建站咨詢
