脚本监控MySQL服务器

http://blog.itpub.net/29254281/viewspace-1203311/

使用Redis监控的方式,监控MySQL服务器
#! /bin/bash
#告警条件:
#磁盘使用率超过70%
#内存使用率超过50%
#CPU使用率超过700%(服务器是24核心的)
#空闲线程小于50
#出现错误或者警告日志

disk_target=70
mem_target=50
cpu_target=700
idle_target=50

port=3306
password='root'

#设置错误日志的位置
alert_file=/home/lihuilin/mysql/data/mysql.51vv.err
alert_file_bak=$alert_file.bak

error_msg=''
serverip='127_0_0_1'
alert_url='http://IP:port/servlet?to=dba&title=MySQLError('$serverip')&content='

#设置监控日志的位置
logfile=/home/lihuilin/monitor_mysql.log


pid=$(ps -ef | grep -w mysqld | grep -v grep | awk '{print $2}')
if [ "$pid" == "" ] ; then
    echo "[ERROR]MySQL is shutdown." >> $logfile
    error_msg=$error_msg"+MySQL_is_shutdown"
else
    topcontent=$(top -b -p $pid -n 1 | grep $pid | awk '/mysqld/{print $0}')
    cpuusage=$(echo $topcontent | awk '{print $9}')
    memusage=$(echo $topcontent | awk '{print $10}')
    diskusage=$(df -h | grep % | awk 'NR!=1' | tr -s ' ' | cut -d ' ' -f 2-6 | awk '{ sub(/%/,"",$4); if($4>'$disk_target') {print $0} }')
    idleThread=$(mysql -uroot -p$password -P$port -e 'show full processlist\G' | grep 'State: $' | wc -l)
    alert_content=$(diff $alert_file $alert_file_bak | grep -E 'ERROR|Warning' | sed 's/\./_/g' | sed 's/:/_/g'| sed 's/ /_/g' | sed 's/-/_/g')


    echo $(date) >> $logfile
    if [ "$alert_content" != "" ] ; then
        echo "[ERROR]$alert_content" >> $logfile
        error_msg=$error_msg"+errorlog#"
        error_msg=$error_msg$alert_content
    fi

    if [ $(echo "scale=2; $memusage>$mem_target" | bc) -eq 1 ] ; then
        echo "[ERROR]Memory usage:$memusage" >> $logfile
        error_msg=$error_msg"+memtarget#$mem_target"
        error_msg=$error_msg"+memusage#$memusage"    
    else
        echo "[INFO]Memory usage:$memusage" >> $logfile
    fi

    if [ $(echo "scale=2; $cpuusage>$cpu_target" | bc) -eq 1 ] ; then
        echo "[ERROR]CPU usage:$cpuusage" >> $logfile
        error_msg=$error_msg"+cpu_target#$cpu_target"
        error_msg=$error_msg"+cpu_usage#$cpuusage"
    else
        echo "[INFO]CPU usage:$cpuusage" >> $logfile
    fi

    if [ "$diskusage" != "" ] ; then
        echo "[ERROR]Disk usage:$diskusage" >> $logfile
        error_msg=$error_msg"+diskspace#"$diskusage
    fi

    if [ $idleThread -le $idle_target ] ; then
        echo "[ERROR]Idle thread:$idleThread" >> $logfile
        error_msg=$error_msg"+idle_target#$idle_target"
        error_msg=$error_msg"+idleThread#$idleThread"
    else
        echo "[INFO]Idle thread:$idleThread" >> $logfile
    fi
fi

if [ "$error_msg" != '' ] ; then
    error_msg=$(echo $error_msg | sed 's/\./_/g' | sed 's/:/_/g'| sed 's/ /_/g' | sed 's/-/_/g'| sed 's/\///g')
    error_msg=$(echo $error_msg | sed 's/\[/_/g' | sed 's/\]/_/g')
    curl $alert_url$error_msg
fi

cp -rf $alert_file $alert_file_bak

这里比较费劲的是监控磁盘剩余空间
下图的这种结果是没有办法使用awk抽取数据的。

可以使用如下命令,格式化数据
df -h | grep % | awk 'NR!=1' | tr -s ' ' | cut -d ' ' -f 2-6

格式化之后就可以使用awk了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29254281/viewspace-1209720/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29254281/viewspace-1209720/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值