Centos 下使用logrotate 分割管理服务器日志 简单实用教程

avatar
作者
筋斗云
阅读量:1

一 服务器日志日益激增带来的问题

随着系统服务用户的数量增加,系统的功能增加,服务器里积累的日志会越来越多。这会导致服务器硬盘被写满,导致系统出问题。通常情况下,只要删除日志即可。但如果积累日志的速度很快,并且面对复杂的线上环境,日志的维护会变得很繁琐。甚至由于维护过程中的疏忽造成影像系统运行的风险。

二 简单高效的解决方案

解决这个问题的思路也很清晰,按照下面的步骤处理日志,并让系统定时执行。

  1. 定时把日志拆分出来,做备份。

  2. 拆分出来的日志按照时间命名。

  3. 服务器里仅保留特定数量的日志备份,超过备份数量的日志将被删除。

三 实际案例和步骤

经过在网络上的资料查询,发现 logrotate 是一个好工具。它结合了 linux 的自动任务加上日志的各种处理动作,给系统运维提供了便捷的日志维护自动化能力。具体步骤如下:

step1:安装 logrotate

yum install -y logrotate

默认 logrotate 安装在 etc 目录下,其中:

  1. /etc/logrotate.conf 主配置文件。

  2. /etc/logrotate.d 目录下可以存放很多具体的日志滚动切割规则配置文件,我们想要自动拆分日志的配置都可以单独的放在这里,方便后续的维护和修改。

step2:配置日志分割文件

在这个例子中,我们要分割 nginx 的 access.log 文件,具体操作如下:

#在 /etc/logrotate.d/ 目录下新建一个叫做 access 的配置文件 cd /etc/logrotate.d vim access ​ # 然后编辑 access 文件: /usr/local/nginx/logs/access.log{   weekly   missingok   rotate 8   create   copytruncate   noolddir   dateext   compress   delaycompress   notifempty   sharedscripts } ​ 编写完配置文件,保存即可。

具体的配置说明如下:

配置项说明
daily每天滚动一次
weekly指定滚动周期为每周
monthly指定滚动周期为每月
notifempty如果文件为空,则不滚动
missingok如果文件不存在,则不滚动
rotate 7保留最近7个日志文件
compress压缩日志文件
delaycompress延迟压缩,延迟到下一次日志分割的时候。注意这个要结合 compress 一起使用
create 640 root root新建日志文件的属主及权限,如果 nginx 不是root用户运行的要特别注意
sharedscripts共享脚本,即日志滚动完成后再运行脚本,否则每滚动一个日志文件都要运行一次脚本
postrotate日志滚动完成后运行的脚本,有些业务日志可以不需要这个脚本
copytruncate用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
nocopytruncate备份日志文件不过不截断
nocreate不建立新的日志文件
errors address滚动时的错误信息发送到指定的 Email 地址
ifempty即使日志文件为空文件也做滚动
mail address把滚动的日志文件发送到指定的 Email 地址
nomail滚动时不发送日志文件
olddir /log滚动后的日志文件放入指定的目录,这里是/log,必须和当前日志文件在同一个文件系统。
noolddir滚动后的日志文件和当前日志文件放在同一个目录下
sharedscripts共享脚本,即日志滚动完成后再运行脚本,否则每滚动一个日志文件都要运行一次脚本
prerotate在滚动之前需要执行的指令,例如修改文件的属性等动作,必须独立成行
postrotate在滚动之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务;必须独立成行
dateext使用当期日期作为命名格式
dateformat .%s配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合
dateext使用,只支持%Y/%m/%d/%s四个参数
size log-size当日志文件到达指定的大小时才滚动,以下为合法格式: size = 5size 5 (>= 5 个字节就滚动) size = 100ksize 100ksize = 100Msize 100M

step3: 验证配置结果

为了验证配置文件是否能正常工作,我们可以使用下面的命令:

logrotate -d /etc/logrotate.d/nginx ​ # 如果输入下面内容,并没有报错信息,说明配置文件有效。 ​ reading config file /etc/logrotate.d/nginx Allocating hash table for state file, size: 15360 B ​ Handling 1 logs ​ rotating pattern: /var/log/nginx/*.log  after 1 days (7 rotations) empty log files are not rotated, old logs are removed considering log /var/log/nginx/*.log /access.log   log does not need rotating (log has been already rotated) considering log /var/log/nginx/*.log /error.log

我们也可以手动激活分割,看看效果:

logrotate -f /etc/logrotate.d/nginx ​ # 执行完该命令,系统会手动触发一次日志分割,分割的文件和分割细节和我们的 nginx 文件配置有关。 # 过一段时间再来看日志,就可以看到分割效果。 ​ ​ access.log access.log-2024-01-01 access.log-2024-01-08

总结

按照上面的步骤执行完后,日志分割维护任务就交给我们服务器自己吧。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!