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监控脚本的主要内容,如果未能解决你的问题,请参考以下文章