nginx日志文件按日期分割脚本
标签搜索

nginx日志文件按日期分割脚本

mrui
2024-01-29 / 0 评论 / 56 阅读 / 正在检测是否收录...

1.若日志文件可能存在往日的访问信息,可以运行下面的脚本.

该脚本先判断日志文件中是否存在过往的访问信息,如果存在,先处理这些过往信息。处理方式是按照日期生成文本文档,并写入对应的访问信息。然后清空日志文件,等待新的记录写入。
如果不存在过往访问记录,则直接将该文件按日期重命名,然后通知nginx重新打开日志文件。
说明:如果原始的日志文件非常大,可以先用split命令对文件进行切割,然后再逐个处理切割出来的小文件,以减轻服务器的压力。

#!/bin/bash
#将日志文件中未按日期分割的历史记录进行分割。
#获取日志文件中的日期信息,并将其写入临时文件
log_dir=/opt/access.log
awk  '{print $4}' $log_dir | awk -F: '{print $1}' |  sed 's/\[//'  | sort -u -t/ -k3 -k1 > /opt/log_date.txt
#先判断日志文件中是否存在往期的日志信息,如果存在,先处理历史日志信息。
sum=`wc -l < /opt/log_date.txt`
if [ $sum -gt 1 ];then
#通过for循环,将历史日志记录按日期分别记录到指定的文件内。
for i in `cat /opt/log_date.txt`
do
dir=`echo $i| sed 's#/#-#g' `
grep $i $log_dir >> /opt/a/$dir-access.log
done
> $log_dir
else
dir=`cat /opt/log_date.txt| sed 's#/#-#g' `
mv $log_dir /opt/a/$dir-access.log
kill -USR1 $(cat /var/run/nginx.pid)
#通过USER1信号通知nginx重新打开日志文件
$nginx_sbin  force-reload
fi


一个简单的分割脚本

#!/bin/bash
Dateformat=`date +%Y%m%d`
Basedir="/usr/local/nginx"
Nginxlogdir="$Basedir/logs"
Logname="access_www"
[ -d $Nginxlogdir ] && cd $Nginxlogdir || exit 1
[ -f ${Logname}.log ] || exit 1
mv ${Logname}.log ${Dateformat}_${Logname}.log
$Basedir/sbin/nginx -s reload

一个非常耗时的日志分割脚本

cat access.log |  while read i a b t c
do 
 date_dir=`echo $t|sed 's#\[##'|sed 's#\/#-#g'|cut -d: -f1`
 echo $i $a $b $t $c >> /tmp/log/$date_dir-log.txt
 date=`echo $date_dir| sed 's#-#\.#g'`
 sed -i "/$i.*$date/d" access.log 
done
0

评论

博主关闭了当前页面的评论