您的位置:首页 > 其它

logrotate工具搭配crontab进行日志文件切割

2020-02-02 23:01 399 查看

学习日志切割

logrotate程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到“转储”作用。
(1)配置文件介绍
Linux系统默认安装logrotate工具,它默认的配置文件在:
/etc/logrotate.conf 主要的配置文件
/etc/logrotate.d/ 是一个目录,该目录里的所有文件都会被主动的读入/etc/logrotate.conf中执行
另外,如果 /etc/logrotate.d/ 里面的文件中没有设定一些细节,则以/etc/logrotate.conf这个文件的设定来作为默认值。

Logrotate是基于CRON(定时器)来运行的,其脚本是/etc/cron.daily/logrotate,日志轮转是系统自动完成的。
实际运行时,Logrotate会调用配置文件/etc/logrotate.conf。
可以在/etc/logrotate.d目录里放置自定义好的配置文件,用来覆盖Logrotate的缺省值。
对于某些设备每天产生巨量的日志文件,单个日志文件将非常巨大,不便管理。通过logrorate轮询把大的日志文件切割成单个100M(根据实际需要更改设置)左右的小日志文件,方便查看和导出。
在/etc/logrotate.d/目录下新建文件logcut, 把以下内容添加进去。

# vi /etc/logrotate.d/logcut
/var/log/deviceslog/*.log# 此目录根据实际情况更改,注意要和实际日志暂存目录一致。
{
daily     #日志文件每天正常轮询一次
size 100M  # 设定设备单个日志文件的大小,当大于100M时开始切割文件。
Nocreate#切割后不建立新日志文件
rotate  55000 #日志轮询切割的次数,设置旧日志保留180天,可以根据实际需要更改。
missingok#转储出现错误不报警
copytruncate#把将日志文件内容copy到新的转储文件
notifempty  #空文件不做转储
dateext    #设定文件转储格式
dateformat.%Y-%m-%d-%s   #转储文件格式以 .年-月-日-秒结尾
noolddir#转储到当前目录
nocompress#不压缩转储文件
sharedscripts  #执行脚本
postrotate#转储后执行以下脚本。
!注意:请把postrotate命令放在prerotate命令之前(像如下顺序放置),不然可能会遇到文件转储不成功的问题。
logs_path="/var/log/deviceslog"
$ 设置日志文件存储路径,此目录根据实际情况更改,注意要和实际日志暂存目录一致。

dates_folder=`date -d "today" +"%Y%m%d"` #获取当前日期
find ${logs_path}/. -maxdepth 1 -name  *.log.* | while read name; do newname=$(echo ${name%%_*.*}) > /dev/null 2>&1#读取日志暂存目录的转储日志文件,取得IP地址。
mkdir -pv $newname/${dates_folder} > /dev/null 2>&1
#为各设备分别建立日志文件存储目录,按日期分类。

mv -f  $newname*.log.*  $newname/$dates_folder> /dev/null 2>&1
#把日志文件转移到各设备日志文件对应的日期目录
done
prerotate  #转储前执行以下脚本
logs_path="/var/log/deviceslog"
dates_folder=`date -d "today" +"%Y%m%d"`
dates_yesterday=`date -d "yesterday" +"%Y%m%d"`   #获取前一日的日期
find ${logs_path}/. -maxdepth 1 -name  *.log | while read name; do newname=$(echo ${name%%_*.*}) > /dev/null 2>&1
#读取暂存目录的前一日的日志文件,取得IP地址。
mkdir -pv $newname/$dates_folder> /dev/null 2>&1

#为各设备分别建立日志文件存储目录,按日期分类。
mkdir -pv $newname/$dates_yesterday> /dev/null 2>&1

#为各设备分别提前建立前一天的日志文件存储目录,按日期分类。
mv -f  $newname*-${dates_yesterday}*.*  $newname/${dates_yesterday}  > /dev/null 2>&1

#转储前是否有前一天未做文件分割的日志,如果有则转移到对应的设备日期目录。
done
endscript
}

定时切割及文件索引配置

配置定时任务,设定多长时间检查日志文件大小,检查是否需要切割,以及定时建立日志文件的索引,为web 获取日志文件信息做准备。
建立文件索引存储目录:

# mkdir -pv /var/log/deviceslog/logindex

建立定时任务:

# crontab -e
#输入以下代码,保存后将为当前用户建立一个crontab文件。
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=
#每5分钟检查 /etc/logrotate.d/logcut,看是否满足文件切割条件(大于100M) ,根据设备日志文件生成的速度和大小调整这个时间,确保生成的日志转储文件在100M左右。
*/5 * * * * /usr/sbin/logrotate/etc/logrotate.d/logcut

#每5分钟定时建立日志文件索引,并输出到logfilesindex.txt 文件
*/5 * * * * find /var/log/deviceslog/. -fls  /var/log/deviceslog/logindex/logindex.txt

Crontab 格式说明:

  • 点赞
  • 收藏
  • 分享
  • 文章举报
唐老鸭呀 发布了3 篇原创文章 · 获赞 0 · 访问量 103 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: