shell 日志文件监控

监控需求:监控应用输出的错误日志,不需要太复杂的日志监控系统,程序有异常错误日志要企业微信告警出来。这个shell监控了日志文件的行号 有变动就将新增的日志内容发送企业微信告警, 用crontab 挂1分钟执行1次监控。

#!/bin/bash

set -u -e

#监控脚本存放目录 $0.log用于记录上一次读取日志的行号
mkdir -p /sh
cd /sh
if [[ ! -f $0.log ]];then
        touch $0.log
fi

#发企业微信告警
wx(){
cat > $0.msg << EOF
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=' \
   -H 'Content-Type: application/json' \
   -d '
   {
        "msgtype": "text",
        "text": {
            "content": "$1",
        }
   }'
EOF
sh $0.msg && rm -rf $0.msg
}

#in 后面是需要监控的日志文件 需用绝对路径
for logfile in /data/logs/sdk-task-log/log-v2.err /data/logs/analysis-adsshow-conversion-log/log.err /data/logs/sdk-task-log/adsshow.err
do
    #第一次记录行号
    if [[ $(grep -w "$logfile" $0.log|wc -l) == 1 ]];then
        new_line_num=$(wc -l $logfile|awk '{print$1}')
        old_line_num=$(grep -w "$logfile" $0.log|awk '{print$1}')
        #新行号大于上一次的取到的行号就发告警 说明错误日志有增加
        if [[ $new_line_num > $old_line_num ]];then
            sed -i 's@'${old_line_num}' '${logfile}''@''${new_line_num}' '${logfile}'@' $0.log
            wx "$(hostname)\n$logfile\n$(awk "NR>$old_line_num{print\$0}" $logfile|head -n 30)"
        fi
    #第一次记录行号
    elif [[ $(grep -w "$logfile" $0.log|wc -l) == 0 ]]; then
        echo $(wc -l $logfile) >> $0.log
    fi
done

第二个需求是监控程序打印的日志,一段时间日志没有新增,程序有可能挂了,发企业微信告警。监控日志文件增长不需要关注内容,直接取日志文件的MD5值就好,没有改变就发企业微信告警。这边根据程序的输出定监控频率,生产是crontab 15分钟一次。

#bin/bash

#$0.log用于记录文件md5 
cd /sh
if [[ ! -f $0.log ]];then
        touch $0.log
fi

#发送企业微信告警
wx(){
cat > $0.msg << EOF
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=' \
   -H 'Content-Type: application/json' \
   -d '
   {
        "msgtype": "text",
        "text": {
            "content": "$1",
        }
   }'
EOF
sh $0.msg && rm -rf $0.msg
}

#in 后面是需要监控的日志文件 需用绝对路径
for i in /data/logs/analysis-track-log/returning-conversion-event.log /data/logs/analysis-adsshow-conversion-log/conversion-event.log /data/logs/sdk-task-log/adsshow.log
do
        if grep -q "$i" $0.log;then
                oldmd5=$(grep -w $i $0.log|awk '{print$2}')
                newmd5=$(tail $i|md5sum|awk '{print$1}')
                #比对MD5值不等说明日志增长停了,应用可能已经挂了
                if [ "$oldmd5" == "$newmd5" ];then
                        wx "$(hostname) $i 日志10分钟没有增长"
                else
                        sed -i 's@'${i}' '${oldmd5}''@''${i}' '${newmd5}'@' $0.log
                fi
        else
                echo "$i $(tail $i|md5sum|awk '{print$1}')" >> $0.log
        fi
done

监控效果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值