我是靠谱客的博主 沉静饼干,最近开发中收集的这篇文章主要介绍Shell脚本监控错误日志,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

错误日志事需要写到指定的文件位置,写脚本监控监控日志文件发企业微信告警。
分享下监控日志文件的思路,就是记录每次读取到的行号
用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脚本监控错误日志所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部