Shell脚本-简单⽇志监控
⼀、前⾔
⼜是周五,甲⽅的电话在下班的节点响起,现⽹⼜出故障了,赶紧⽴刻马上给我解决!
⾝为测试,总是受命于危难之间,在顶锅的前线,战战兢兢,如履薄冰。
"这次是因为⽤户疯狂点保存,还未加载完数据,就保存,导致存了⼀个空数据,以致页⾯被全部清空..."
"上次是研发夹带私货,修改了图⽚计算的⽅式,导致全站图⽚⽆法上传"
为什么,为什么,每次都如此被动!
⼆、想法
通过编写shell脚本,实时获取应⽤最新的错误⽇志,然后发邮件给我
马上去跟运维沟通,是否有编写⽇志监控脚本,然后他给我讲了⼀堆困难
算了,⾃动动⼿,丰⾐⾜⾷!
.
..
在实操过程中,发现⽤飞书机器⼈代替发邮件似乎更及时。
三、思路
1.编写监控⽇志脚本
-时间
-主机
-模块
-报错⽇志
-⽇志详情
2.调⽤飞书机器⼈
3.定时任务crontab
4.脚本
#!/bin/bash
#@Time: 2021年8⽉1⽇19:03:45
#@Target: ⽇志监控
#@Author: nsys
# 1)基础配置
log_dir="/opt/product/data/"
log_name=("weixin" "qq")
web_url="192.168.220.184:9005/portal/#"
#host_url=`ip a |grep 184 |awk -F '/' '{print $1}'|awk '{print $2}'|awk 'NR==1'`
host_url="192.168.220.184"
skip_dir=("test-data" "t-data")
# 2)robot配置
robot_curl(){
error_log=`tail -n 1000 $1 |grep ERROR -A2|tr "\n" " "|tr "\t" " "|tr '"' ' '`
if [ ${#error_log} -eq 0 ];then
echo "[INFO] - 暂⽆错误⽇志 - $1"
#exit 1
else
if [ ${error_log:0:10} == `date +"%Y-%m-%d"` ];then
echo "[ERROR] - 到错误⽇志 - $1 "
dir="${1%/*}"
dir_app="${dir##*/}"
hook_url="open.feishu/open-apis/bot/v2/hook/3b138b7b-c5a0-4772-a072-c96449139863"
curl $hook_url -X POST -H "Content-Type: application/json" -d \
"{
\"msg_type\": \"post\",
\"content\": {
\"post\": {
\"zh_cn\": {
\"title\": \"播控平台⽇志告警 - 测试环境\",
\"content\": [
[{
\"tag\": \"text\",
\"text\": \"告警时间: \"
},
{
\"tag\": \"text\",
\"text\": \"`date +"%Y年%m⽉%d⽇ %H:%M:%S"`\"
}
],
[{
\"tag\": \"text\",
\"text\": \"告警环境: \"
},
{
\"tag\": \"a\",
\"text\": \"测试环境\",
\"href\": \"$web_url\"
}
],
[{
\"tag\": \"text\",
\"text\": \"告警主机: \"
},
{
\"tag\": \"text\",
\"text\": \"$host_url\"
}
],
[{
\"tag\": \"text\",
\"text\": \"告警路径: \"
},
{
\"tag\": \"text\",
\"text\": \"$1\"
}
],
[{
\"tag\": \"text\",
\"text\": \"告警应⽤: \"
},
{
\"tag\": \"text\",
\"text\": \"$dir_app\"
}
]
,
[{
\"tag\": \"text\",
\"text\": \"报错详情: \"
},
{
\"tag\": \"text\",
\"text\": \"$error_log\"
}
]
]
}
}
}
}"
else
echo "[INFO] - 跳过以前⽇志 - $1"
fi
fi
}
# 3)遍历⽇志⽬录
read_dir(){
for file in `ls $1`
do
if [ -d $1"/"$file ];then
#if [[ $1"/"$file != *${skip_dir1}* ] -o [ $1"/"$file != *${skip_dir2}* ]];then
if [[ $1"/"$file == *${skip_dir[0]}* ]] || [[ $1"/"$file == *${skip_dir[1]}* ]] || [[ $1"/"$file == *${skip_dir[2]}* ]] ;then echo "[WARN] - 跳过排除⽬录 - $1/$file"
else
echo "[INFO] - 开始遍历⽬录 - $1/$file"
read_dir $1"/"$file
fi
else
if [ ${file##*.} = "log" ];then
echo "满⾜条件⽇志路径:$1/$file" > /dev/null 2>&1
robot_curl $1/$file
else
echo "不满⾜条件⽇志路径:$1/$file" > /dev/null 2>&1
fi
fi
done
}
# 4)执⾏
echo -e "\n=============开始执⾏本次脚本:`date +"%Y年%m⽉%d⽇ %H:%M:%S"`=============="
for i in ${log_name[@]};do
echo "[INFO] - 进⼊遍历⽬录 - $log_dir$i"
read_dir $log_dir$i
done
shell最简单脚本echo -e "\n=============结束本次脚本执⾏`date +"%Y年%m⽉%d⽇ %H:%M:%S"`=============
四、实操结果
后台⽇志
飞书机器⼈
五、后记
1.记录
1)先在测试环境⽤⽤,以前可能前台页⾯报错,才会去看看后台⽇志检查是否有错误⽇志,现在监控了⽇志⽬录,在测试过程中,有异常马上就能通知到,正常的case哪怕流程通过,可能还有隐藏的问题,不再浮于表⾯,加⼀道防线。
2)⾄于弄在现⽹环境现在有点难,客户不会允许
3)shell脚本实现的过程⽐较简单,主要是种上监控⽇志的萌芽,测试不⽌于上线之前的⼯作;
4)了解到还可⽤zabbix、k8s、开源监控平台,但是⽤shell脚本应该是他们的祖宗,简单就完事了,复杂场景⽆法胜任,哈哈
2.遇到的坎
json转义问题
crontab定时任务环境问题
3.后期优化
解决⽇志中存在换⾏符、制表符导致json数据报错问题,⽬前替换为空格
添加报错⽇志次数统计
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论