最近在工作中遇到了一个问题,由于网关日志没有使用logrotate来进行切割,一天的日志有几十个GB, 当使用 grep , sed命令时会卡住很长时间, 基本是假死状态。决定使用脚本来处理。
思路就是: 先将大日志按8000行进行切割成小日志,再循环使用 sed 查找后追加至一个临时的日志当中。 如: 查找2024-05-29 这一天,09:15 到 09:20 期间网关发生的日志行为。
脚本内容如下:
#!/bin/sh
echo 'literate all the logfiles'
rm -rf x* # 删除掉历史的小文件
split -l 8000 gateway.log -a 6 # 8000 行来切切割,小文件前缀是 x开头后加6个随机英文字母
echo 'split files done'
for file in `ls`; do
echo $file
if [ -f "$file" ]; then
if [[ "$file" =~ ^"x" ]]; then
echo "find the $file"
sed -n '/2024-05-29 09:15/,/2024-05-29 09:20/p' $file >> 0529.log # 将日志追加至0529.log中
echo 'finish the grep append write'
fi
fi
done
echo 'Done'
切割的小日志如下:
最后,在目标文件 0529.log 中再来查看2024-05-29 这一天,09:15 到 09:20 期间网关发生的日志行为。