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

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

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

二 简单高效的解决方案

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

  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 100k size = 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

总结

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

  • 35
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深思熟虑的羽毛球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值