Linux日志管理神器之Logrotate日志分割,以及crontab定时轮询

Linux日志管理神器之Logrotate日志分割,以及crontab定时轮询,第1张

有些服务,会自动产生大量的日志文件,如果不限制,会占用磁盘空间。

如果单纯的用定时任务crontab删除,又不太灵活,这时需要日志神器logrotate。

logrotate工具是系统自带为了方便进行日志管理而产生的一个工具。

系统会定时运行 logrotate,一般是每天一次。也是基于定时任务crontab运行的。

配置文件:

配置文件的位置在 /etc/logrotate.conf,一般配置在 /etc/logrotate.d/子目录下。

如系统默认日志配置:

配置文件参数:

更多信息请参考man logrotate帮助文档

模板是通用的,而配置参数则根据你的需求进行调整,不是所有的参数都是必要的。

在上面的配置文件中,我们只想要轮询一个日志文件,size=50M 指定日志文件大小可以增长到 50MB,dateext 指 示让旧日志文件以创建日期命名。

可自行参考/etc/logrotate.d/目录下系统默认的文件。

logrotate命令:

具体 logrotate 命令格式如下:

要为某个特定的配置调用 logrotate:

排障过程中的最佳选择是使用-d选项以预演方式运行 logrotate。要进行验证,不用实际轮循任何日志文件, 可以模拟演练日志轮循并显示其输出。

正如我们从上面的输出结果可以看到的,logrotate 判断该轮循是不必要的。如果文件的时间小于一天,就会发生了。

强制轮循即使轮循条件没有满足,我们也可以通过使用-f选项来强制 logrotate 轮循日志文件,-v参数提供了详细的输出。

个人项目配置:

项目每天可产生20G左右的日志,显示不能做每日轮询,所以额外需要添加定时任务做每小时,或者每隔多少分钟。

如果轮询日志异常报错如下:

error: skipping “” because parent directory has insecure permissions (It’s world writable or writable by group which is not “root”) Set “su” directive in config file to tell logrotate which user/group should be used for rotation.”

需要加 su root root 选项。

同时添加定时任务:

定时任务说明:

第一条,每隔40分钟轮询执行一次logrotate任务。

第二条,每天凌晨4点删除前一天的日志,原因如下:

由于项目系统产生日志格式的原因,会导致以下情况:

如果昨天的分割到4个后(或者1,2,3),时间到第二天后,没法转储递增,会一直停留在4,没法删除,每天会有,久而久之,也会占用磁盘空间。所以需要定时删除。

设置完成

开启定时任务日志,以便查看定时任务是否执行。后续可取消。

重启rsyslog

日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。

在Debian或Ubuntu上:

在Fedora,CentOS或RHEL上:

logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。

参数详解:

上面的模板是通用的,而配置参数则根据你的需求进行调整,不是所有的参数都是必要的。

logrotate可以在任何时候从命令行手动调用。要调用为/etc/lograte.d/下配置的所有日志调用logrotate:

要为某个特定的配置调用logrotate,执行一次切割任务测试

即使轮循条件没有满足,我们也可以通过使用‘-f’选项来强制logrotate轮循日志文件,‘-v’参数提供了详细的输出。

防止访问日志文件过大

logrotate工具对于防止因庞大的日志文件而耗尽存储空间是十分有用的。配置完毕后,进程是全自动的,可以长时间在不需要人为干预下运行。本教程重点关注几个使用logrotate的几个基本样例,你也可以定制它以满足你的需求。

1、linux 自带的 logrotate 命令

2、定义切割文件相关信息

/var/log/nginx/*.log {

daily #按天打包

rotate 180 #保存周期为180以内的,超过180天的则删除

missingok

notifempty

dateext

compress

nodelaycompress

sharedscripts

postrotate

/etc/init.d/nginx reload

endscript

}

3、crontab 设置一个定时任务

59 23 * * * /usr/sbin/logrotate -f /var/logrotate/nginx >>/tmp/logrotate.log


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/7624492.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-07
下一篇2023-04-07

发表评论

登录后才能评论

评论列表(0条)

    保存