MySQL监控脚本

Posted wzy0623

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL监控脚本相关的知识,希望对你有一定的参考价值。

mysqld_monitor.sh

#!/bin/bash
#v0.1 process_list long_query slave_copy_time errorlog
#v0.2 slave_copy_status
#v0.3 deadlock 
passwd=123456
user=monitor
cmd1='select count(*) from information_schema.processlist\\G'
cmd2="select count(*) from information_schema.processlist where time > 600 and command='Query'\\G"
cmd3="show variables like 'log_error'\\G"
cmd4="show slave status\\G"
cmd5="show variables like '%log_error%'\\G"
cmd6="select substr(host,1,instr(host,':')-1) ip,count(*) from information_schema.processlist group by substr(host,1,instr(host,':')-1) order by count(*) desc;"
export ports=`ps axu | grep mysql[d] | grep -o port=..... |awk -F'=' 'print $NF'`
[[ -n $port ]] || export ports=`netstat -tnulp | grep mysqld | grep -v 33060 |awk 'print $4' |awk -F':' 'print $NF'`
export hostip=127.0.0.1
export endpoint=$(hostname)
export t=$(date +%s)
export tags=

function post_curl () 
    curl --connect-timeout 5 -s -X POST -d "[\\"metric\\": \\"$metric\\", \\"endpoint\\": \\"$endpoint\\", \\"timestamp\\": $t,\\"step\\": 60,\\"value\\": $value,\\"counterType\\": \\"GAUGE\\",\\"tags\\": \\"$tags\\"]" http://127.0.0.1:1988/v1/push >/dev/null


function put_falcon()
metric=mysqld_$1
value=$3
tags=$2
echo "[\\"metric\\": \\"$metric\\", \\"endpoint\\": \\"$endpoint\\", \\"timestamp\\": $t,\\"step\\": 60,\\"value\\": $value,\\"counterType\\": \\"GAUGE\\",\\"tags\\": \\"$tags\\"]"
post_curl

export -f post_curl
export -f put_falcon

while read port;do
#进程总数
value=$(echo process_list port=$port,mail=mysqldb ; /home/mysql/mysql/bin/mysql  -h$hostip -P$port -u$user -p$passwd -e "$cmd1"| grep ':' | grep -v 'Variable_name' |sed 's/ //g'|awk -F':' 'print $2' )
echo $value | xargs -n 3 -i bash -c "put_falcon "
#慢查询
value=$(echo long_query port=$port,mail=mysqldb ; /home/mysql/mysql/bin/mysql  -h$hostip -P$port -u$user -p$passwd -e "$cmd2"| grep ':' | grep -v 'Variable_name' |sed 's/ //g'|awk -F':' 'print $2' )
echo $value | xargs -n 3 -i bash -c "put_falcon "
#Slave复制时间
value=$(echo slave_copy_time port=$port,mail=mysqldb ; /home/mysql/mysql/bin/mysql  -h$hostip -P$port -u$user -p$passwd -e "$cmd4"| grep ':' | grep 'Seconds_Behind_Master' |sed 's/ //g'|awk -F':' 'print $2' )
echo $value | xargs -n 3 -i bash -c "put_falcon "

errorlog=$(/home/mysql/mysql/bin/mysql  -h$hostip -P$port -u$user -p$passwd -e "$cmd5"| grep ':' | grep -A1 'log_error$' |tail -n1 |sed 's/ //g'|awk -F':' 'print $2')
if [ -f $errorlog ];then
    value=2
    tac $errorlog | sed -n '1,/....-..-../p' | grep ERROR && ( cp $errorlog $errorlog.$(date +%s) && > $errorlog ) || value=0
    _value=2
    tac $errorlog | grep "transactions deadlock detected" && ( cp $errorlog $errorlog.$(date +%s) && > $errorlog ) || _value=0
else
    value=0
    _value=0
fi
#ERROR
value=$(echo errorlog port=$port,mail=mysqldb $value)
echo $value | xargs -n 3 -i bash -c "put_falcon "
#死锁
value=$(echo deadlock port=$port,mail=mysqldb $_value)
echo $value | xargs -n 3 -i bash -c "put_falcon "

date "+%Y-%m-%d %H:%M:%S" >>  /tmp/io_status/mysql_client_connection_num_$(date +%Y_%m_%d).log
/home/mysql/mysql/bin/mysql  -h$hostip -P$port -u$user -p$passwd -e "$cmd6" >> /tmp/io_status/mysql_client_connection_num_$(date +%Y_%m_%d).log

Slave_IO_Running_S=$(/home/mysql/mysql/bin/mysql  -h$hostip -P$port -u$user -p$passwd -e "$cmd4" | grep -Po '(?<=Slave_IO_Running: )(?:.*)')
Slave_SQL_Running_S=$(/home/mysql/mysql/bin/mysql  -h$hostip -P$port -u$user -p$passwd -e "$cmd4" | grep -Po '(?<=Slave_SQL_Running: )(?:.*)')
[ -z "$Slave_IO_Running_S" -o -z "$Slave_SQL_Running_S" ] && continue
[[ $Slave_IO_Running_S == "Yes" ]] && S1=1 || S1=0
[[ $Slave_SQL_Running_S == "Yes" ]] && S2=1 || S2=0
if [[ $S1 == 1 ]] && [[ $S2 == 1 ]];then
    value=1
else
    value=0
fi
#Slave复制状态
value=$(echo slave_copy_status port=$port,mail=mysqldb $value)
echo $value | xargs -n 3 -i bash -c "put_falcon "

done < <(echo $ports |xargs -n1)

crontab调度:

*/1 * * * * bash /home/appmon/agent/mysqld_monitor.sh 2>&1 | egrep -v "Warning|detected" >/dev/null 2>&1
*/1 * * * * cd /home/appmon/agent/mysqld && ./mymon -c mon.cfg >/dev/null 2>&1
cat /home/appmon/agent/mysqld/mon.cfg 
[default]
log_file=mymon.log
# Panic 0
# Fatal 1
# Error 2
# Warn 3
# Info 4
# Debug 5
log_level=4

falcon_client=http://127.0.0.1:1988/v1/push

#自定义endpoint
endpoint=

[mysql]
user=monitor
password=123456
host=127.0.0.1
port=3306

mymon下载地址:GitHub - open-falcon/mymon: MySQL Monitor Script

以上是关于MySQL监控脚本的主要内容,如果未能解决你的问题,请参考以下文章

mysql主从状态监控脚本报警脚本

Python脚本监控mysql数据库,Python脚本监控mongo数据库

mysql主从同步脚本监控脚本

mysql主从同步监控脚本

MySQL的keepalived高可用监控脚本

zabbix监控mysql主从状态