日志管理-日志轮替(日志轮替工具logrotate,/etc/logrotate配置文件,logrotate命令)
前言
-
如果一个日志只记录在一个文件当中,那这样的话会来什么后果??
比如我们的apache服务,也就是网页服务。如果打开一个网站,网页一刷新,在后台服务器上就会记录apache的一条日志。有些较为复杂的操作会记录好几条日志。访问量大的话,会记录的日志量非常大,这个日志如果不做处理的话会占满你的硬盘。几个G的纯文本文档,是否还能正确的读取数据,比如在Windows里看一个小说,才几十兆,打开会非常慢。Linux当中比Windows当中好一点。 -
为了解决上述所说的问题,需要对日志进行处理,提供了两种功能。轮替包含了这两种功能。
(1)做切割: 把大的日志按照固定规则分成小的日志,一般按天,第一天写个日志,第二天再写另一个日志,以此类推,量不大,处理的时候,很快就能找到这一天,马上就可以找到那一天,而不需要其他日志来干扰。
(2)删除轮换: 比如超过30天的日志就把他删掉。腾出空间了存新的日志。 -
apache自带的配置文件,支持日志的切割,但是不支持日志的轮替。只能使用一种方法还是不太方便。如果掌握了Linux自带的日志轮替工具(自带的包含这两种方法), 完全没有必要去使用apache、邮件这些服务自带的日志切割功能,因为它们不够完善。
1. 日志文件的命名规则
- 如果配置文件中拥有“dateext”参数,那么日志会用日期作为资质文件的后缀,例如“secure-20200815”。这个样的话日志文件名不会重叠,所以也就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可。
- 如果日志文件中没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替是,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推。
2. logrotate配置文件
所在位置:/etc/logrotate.conf
- (1)打开这个配置文件看一下:
vim /etc/logrotate.conf
小提示: 大括号外的是全局配置,只要没有大括号里面的内容跟外面重叠的话,外面的就生效。外面写的是weekly每周生效,大括号里写的是monthly,所以monthly的优先级高于weekly。然后weekly不在生效。一个是全局配置,一个是本地配置。跟c、java中的全局变量和本地变量类似。
参数 | 参数说明 |
---|---|
daily | 日志的轮替周期是每天 |
weekly | 日志的轮替周期是每周 |
monthly | 日志的轮替周期是每月 |
rotate 数字 | 保留的日志文件的个数。0指没有备份 |
compress | 日志轮替时,旧的日志进行压缩 |
creat mode owner group | 建立新日志,同时指定新日志的权限与所有者和所属组。如creat 0600 root utmp,如果只有creat那么系统就会按默认规则来设定文件的权限。 |
mail address | 当日志轮替时,输出内容通过邮件发送到指定的邮件地址。如aaa@qq.com |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
motifempty | 如果日志为空文件,则不进行日志轮替 |
minsize 大小 | 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替 |
size 大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。如size 100k |
dateext | 使用日期作为日志轮替文件的后缀。如secure-20200815 |
3. 把源码包apache日志加入轮替
原因: 因为源码包安装的apached当中的这两个日志是没有做轮替的,会带来严重的后果,后果会非常严重,因为apache的日志量是最多的,因为是网页的访问时最多的。所以这时需要手工加轮替。
只要是rpm包安装的服务,它默认已经支持了轮替。不需要做任何修改。源码包安装的apache,它的日志在/usr/local/下,绝对不可能被日志默认识别。 logrotate默认搜索的路径是/var/log的这个目录 , 所以一般情况下只有源码包的日志需要手工把他变成轮替,其他rpm包安装的全都默认做轮替。只有源码包安装的才需要配置这些。
开始配置:
命令:vi /etc/logrotate.conf
把下面的内容加到/etc/logrotate.conf这个配置文件当中
/usr/local/apache2/logs/access_log{
daily #每天备份
create #备份时创建新的
rotate 30 #保留30天
}
这个日志之所以会自动轮替的原因是: 在系统的定时任务当中加了,前面在定时任务中学习的是手工做的用户定时任务,但是还有一类定时任务,叫做系统定时任务。在系统定时任务当中,所有的配置文件写的这个日志都在里面加入。日志的轮替时间是由定时任务决定的。一般在凌晨的4点到6点之间而且具体的事件还不确定。解决用命令没有到时间就强制来轮替。
4. logrotate命令
日志的轮替时间是由定时任务决定的。一般在凌晨的4点到6点之间而且具体的事件还不确定。这时可以用logrotate
命令强制来轮替。
命令: logrotate [选项] 配置文件名
选项:-v
显示日志轮替过程。加了-v选项,会显示日志的轮替的过程。-f
强制进行日志轮替。不管日志轮替的条件是否已经符合,强制配置文件中所有的日志进行轮替
如果此命令没有选项,则会按照配置文件中的条件进行日志轮替的过程
举个栗子: logrotate -v /etc/logrotate.conf
显示日志轮替过程
小提示: 如果不用命令而又想看到结果,这时可以用date -s 20200815
命令来改变时间。
5. 总结
(1)rpm包安装的日志都不需要手工做轮替,需要做的只有源码包安装的,一般情况下,所有的源码包安装的服务都需要做轮替,重点强调apache,因为产生的日志量非常大。
(2)给源码包做轮替: 打开它的配置文件,把你的日志相对应的大括号写进去。可以用logratate –v /etc/logrotate.conf
命令查一下是否加进去了
上一篇: Docker Volume
下一篇: docker volume