概述
错误日志事需要写到指定的文件位置,写脚本监控监控日志文件发企业微信告警。
分享下监控日志文件的思路,就是记录每次读取到的行号
用crontab 每隔一段时间调用就好,有记录行号不怕重复发送日志
#!/bin/bash
#监控错误日志
set -e -u -o pipefail
row_number=0 #初始行号 这边用sed记录了行号 用于从上一次的位置开始读取
wx(){
#读取日志发送到企业微信 企业微信机器人使用方法 https://blog.csdn.net/weixin_46175620/article/details/106936957
cat > $0.msg << EOF
curl ''
-H 'Content-Type: application/json'
-d '
{
"msgtype": "text",
"text": {
"content": "$1",
"mentioned_mobile_list":["$2"]
}
}'
EOF
sh $0.msg
}
#进入日志目录 根据实际需求定
cd /data/logs/$(ls /data/logs|grep "log")
#监控的日志文件 根据实际需求定
log_file="$(pwd)/log.err"
#文件的最新行号
new_row_number=$(cat $log_file|wc -l)
if [ "$new_row_number" -eq "$row_number" -o "$new_row_number" -eq 0 ] ;then
#新行号等于记录行号说明日志没有新增,直接退出
exit 0
elif [ "$new_row_number" -lt "$row_number" ] ; then
#新行号小于旧行号,日志被归档从新开始写,修改旧行号为0,下一次从新的位置开始读
#4s是因为行号记录在本脚本的第4行
sed -i '4s/row_number='${row_number}'/row_number=0/' $0
row_number=0
else
#修改记录的行号为新的行号
sed -i '4s/row_number='${row_number}'/row_number='${new_row_number}'/' $0
#轮训每行日志 发送到企业微信
while [ "$new_row_number" -gt "$row_number" ]; do
row_number=$(expr $row_number + 1)
info=$(sed -n "$row_number"p $log_file)
#去除重复的日志
if [ $(grep "$(echo $info)" $(pwd)/$0.msg|wc -l) -eq 0 ];then
#判断和前一次发的告警信息不同 发送到企业微信 过滤规则根据需求更改
#echo $info
wx "$info" ""
fi
done
fi
exit 0
最后
以上就是沉静饼干为你收集整理的Shell脚本监控错误日志的全部内容,希望文章能够帮你解决Shell脚本监控错误日志所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复