作者微信 bishe2022

代码功能演示视频在页面下方,请先观看;如需定制开发,联系页面右侧客服
统一日志压缩和清理脚本

Custom Tab


转至:https://mp.weixin.qq.com/s/ELR7GhjtkrwtPwsJxcV5ZA


随着维护的机器约来越多,主机资源约来越紧张,特别是存储方面的管理,如何释放释放空间,节约成本就尤为重要。而应用日志是首当其冲占用存储较大的一部分,如何对其处理就变成了日常运维难以避免的事。

本文就如何通过统一对日志进行管理,当然,从运维的角度,需要做到日志的统一管理,通过配置化形式实现一个脚本复用所有机器,从而降低日常维护工作量,解决成本。


接下来的脚本,主要包含:

(1)主体脚本,主要功能是对日志的压缩和清理;

(2)配置信息,通过配置日志文件、清理路径和保留时间实现统一配置;

(3)定时任务,通过设置执行时间实现定时执行;


首先,介绍下主体脚本,该脚本实现了对日志的压缩和清理,通过脚本中两个for循环实现了批量进行日志的压缩和清理,无需多个文件重复执行命令处理。该脚本编写好后无需再进行编辑,如果需要新增或者删除备操作对象,只需修改配置信息文件即可。

#/bin/sh. $HOME/.bash_profile
#获取昨天的日期三种方法:Yesterday=`date  +"%Y%m%d" -d  "-1 days"`#Yesterday=`date -d last-day '+%Y%m%d'`#Yesterday=`date -d 'yesterday' '+%Y%m%d'`
################################################################  以下的处理脚本针对昨天的日志进行压缩#  日志文件的日期格式如下:#  application.log.20190710#  如果需要压缩更早的日志,可以对$Yesterday进行相应的更改###############################################################
#  日志压缩部分开始,“files.conf”为配置信息文件for file in $(cat $HOME/shell/files.conf|grep "gzfile=" |awk -F "=" '{print $2}')do  #当前时间  nowtime=`date "+%Y-%m-%d %H:%M:%S"`  echo "时间:${nowtime},开始对"${file}"."${Yesterday}"开始进行压缩..."gzip $file"."$Yesterdaydone#  日志压缩部分结束

#  日志清理部分开始for dir in $(cat $HOME/shell/files.conf|grep "cleardir=" |awk -F "=" '{print $2}')do  #当前时间  nowtime=`date "+%Y-%m-%d %H:%M:%S"`  echo "时间:${nowtime},开始对"${dir}"目录下的日志进行清理..."  find  $dir -name "*.log.*" -type f -ctime +$(grep "cleartime=" $HOME/shell/files.conf |awk -F "=" '{print $2}') -exec rm -f {} \;
done#  日志清理部分结束

上述脚本需要注意一点,压缩的是昨天的日志文件,日志需要进行按天分割,一般程序会自动分割,如java程序的log4j配置后每天都会将昨天的日志添加时间戳进行分割。如果时间戳的格式和脚本不一样,需要修改脚本的"Yesterday"变量,如果想保留多几天的日志不被压缩,同样只需要修改"Yesterday"变量。

接下来介绍下配置信息,配置文件内容如下,我们暂且取名为“files.conf”,该文件涉及需要压缩文件的全路径、需要清理目录路径以及日志保留天数。


#  需要压缩的日志放在gzfile后面gzfile=/home/liyx/logs/application.loggzfile=/home/liyx/domains/console.log# 需要清理的日志目录放在cleardir后面cleardir=/home/liyx/logscleardir=/home/liyx/domains# 日志保留天数cleartime=30

最后将该脚本和配置信息文件放到需要清理的机器上即可,根据清理需要配置定时任务,此处给出定时任务样例,每天凌晨1点执行定时任务:


# 日志压缩清理00 01 * * * sh /home/liyx/shell/gzip_and_del.sh  >>  /home/liyx/shell/gzip_and_del.log

附:

日常工作中会遇到对时间的处理,这里提供获取昨天时间的脚本供参考。


V_month=`date +%m`v_day=`date +%d`v_min=`date +%M`v_hour=`date +%H`sysdate1=`date   +%Y%m%d`sysdate2=`date   +%Y%m%d%H%M`
if [ $v_day -eq "01" -a $v_hour -eq "0" -a $v_min -le "30" ]; then   ymoth1=$($(date +%Y%m)-1)if [ $v_month -eq "1" ]; then   ymoth1=$($(date +%Y)-1)12fielse   ymoth1=`date +%Y%m`fi

if [ $v_day -eq "01"  ];thenymoth=$($(date +%Y%m)-1)
if [ $v_month -eq "1" ];thenymoth=$($(date +%Y)-1)12fielseymoth=`date +%Y%m`fi
#echo $ymoth $ymoth1yy=`date +%Y` #Year yyyymm=`date +%m` #Month mmdd=`date +%d` #Day dd
#echo $yy $dd $mmif [ $dd = "01" ] then    lm=`expr $mm - 1 `  if [ $lm -eq 0 ]  then    lm=12        yy=`expr $yy - 1 `   fi   #echo lm=$lm      case $lm in     1|3|5|7|8|10|12) Yesterday=31 ;;         4|6|9|11) Yesterday=30 ;;     2)       if [ ` expr $yy % 4 ` -eq 0 -a `expr $yy % 100 ` -ne 0 -o ` expr $yy % 400 ` -eq 0 ]   then Yesterday=29   else Yesterday=28   fi ;;
 esac         mm=$lm  else   Yesterday=`expr $dd - 1 ` ficase $Yesterday      in 1|2|3|4|5|6|7|8|9) Yesterday='0'$Yesterday   esaccase $mm in       1|2|3|4|5|6|7|8|9) mm='0'$mm ;;esac
yesterday=$yy-$mm-$YesterdayYesterday=$yy$mm$Yesterday

Home