1、logrotate 原理
logrotate也就是日志滚动,服务器日志文件大小增长较快,不断消耗磁盘空间就会触发告警,需要人为定期按照各种维度去手动清理日志就显得十分棘手。为了节省空间和方便整理,可以将日志文件按时间或大小分成多份,删除时间久远的日志文件,这就是通常说的日志滚动。
logrotate 是一个 linux 系统日志的管理工具。可以对单个日志文件或者某个目录下的文件按时间、大小进行切割、压缩操作;指定日志保存数量;还可以在切割之后运行自定义命令。
logrotate 是基于 crontab 运行的,所以这个时间点是由 crontab 控制的,具体可以查询 crontab 的配置文件 /etc/crontab或者 /etc/anacrontab。 系统会按照计划的频率运行 logrotate,通常是每天。在大多数的 Linux 发行版本上,计划每天运行的脚本位于 /etc/cron.daily/logrotate。
2、logrotate 默认配置
默认配置文件
/etc/logrotate.conf
默认配置目录,此目录下是系统软件的一些日志滚动配置
/etc/logrotate.d/*.conf
logrotate.conf 通过 include 指令,引入 logrotate.d 目录下的自定义的配置文件
可执行文件
/usr/sbin/logrotate
3、logrotate 参数
参数 | 描述 |
daily、 weekly、 monthly、 yearly |
daily :每天 |
weekly : 每周 | |
monthly : 每月 | |
yearly: 每年 | |
size | 当日志文件到达指定的大小时才转储,单位默认是 bytes。其他单位:bytes 、 KB 、 MB |
rotate | 日志文件保留备份的个数 |
maxage | 保留多少天的日志文件 |
tabooext | 不转储指定扩展名的文件 |
missingok | 日志轮转期间,忽略错误 |
copytruncate、 nocopytruncate |
copytruncate: 用于进行中的日志文件,把当前日志备份并截断。执行的操作是先复制再清空 |
nocopytruncate: 备份日志文件,但是不截断 | |
create mode owner group、 nocreate |
create mode owner group:转储文件,使用指定的文件模式创建新的日志文件。如: create 644 root root 以指定的权限创建全新的日志文件,同时 logrotate 也会重命名原始日志文件。 |
nocreate: 不建立新的日志文件 | |
nocompress、 compress |
nocompress: 不压缩 |
compress: 通过 gzip 压缩转储以后的日志 | |
delaycompress、 nodelaycompress |
delaycompress + compress: 转储的日志文件到下一次转储时才压缩 |
nodelaycompress: 覆盖delaycompress 选项,转储并压缩。 | |
prerotate、 endscript |
在所有其它指令完成 前 执行。这两个关键字必须单独成行,这两个指令必须同时存在。指令相当于开始、结束;中间执行linux命令 |
sharedscripts | 共享脚本,整个日志组运行一次脚本 。 比如 nginx 涉及到多个日志文件,一般使用 * 号 通配符:/var/log/nginx/*.log { ... } ,sharedscripts 的作用是在 所有的日志文件 都轮转完毕后 统一执行一次脚本 ;如果没有 sharedscripts ,那么 每个日志文件 轮转完毕后 都会执行一次脚本 。 |
errors address | 转储时的错误信息发送到指定的 Email 地址。 |
mail address nomail |
mail address : 把转储的日志文件发送到指定的 E-mail 地址 nomail : (默认)转储时不发送日志文件 |
nomail : (默认)转储时不发送日志文件 | |
ifempty notifempty |
ifempty :if empty ,即使是空文件也转储(默认) |
notifempty :not if empty ,如果是空文件的话,不转储。 | |
olddir directory noolddir |
olddir directory :储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统。 |
noolddir : 转储后的日志文件和当前日志文件放在同一个目录下。 | |
dateext | 在日志名称后面,添加日期后缀。默认是当前日期。默认是 -%Y%m%d 的后缀。可用 dateformat 选项扩展配置。如:nginx_access.log --> nginx_access.log-20210120 注意: 格式化日期中不要出现 分号(:) ,因为文件名称是不能含有分号的。 |
dateformat | 对 dateext 的拓展,必须配合 dateext 使用在V3.9.0 之前,只支持 %Y 、%m 、%d 、 %s 参数。%s 时间戳 在V3.9.0 及之后,支持 %H 参数。如: dateformat -%Y-%m-%d 结果:nginx_access.log --> nginx_access.log-2021-01-20 注意: 文件名称中禁止出现 分号(:) ,因为文件名称是不能含有分号的。 |
dateyesterday | 与 dateext 配合使用,日期提前一天。 比如,当前日期是2021-01-20,提前一天就是 2021-01-19 |
extension | 与 dateext 、dateformat 配合使用,指定文件的后缀。如:extension .log 结果:nginx_access.log --> nginx_access-2021-01-20.log 说明:nginx_access.log , 文件名是nginx_access,后缀是.log, 文件名 + -%Y-%m-%d 格式的日期 + .log 后缀,结果是 nginx_access-2021-01-20.log |
4、示例
4.1、创建配置目录
mkdir /home/logrotate
mkdir /home/logrotate/logrotate.d
cd /home/logrotate
4.2、logrotate.conf 配置
创建logrotate.conf文件
vim logrotate.conf
logrotate.conf内容
include /home/logrotate/logrotate.d
4.3、日志分割配置
需要分割日志的服务,把分割日志的配置文件放在一下下目录
cd /home/logrotate/logrotate.d
nginx
dateext
dateformat -%Y-%m-%d
/home/nginx/logs/monitor/*/*.log {
daily
missingok
rotate 7
compress
nodelaycompress
notifempty
olddir /home/nginx/logs/backup
copytruncate
extension.log
sharedscripts
}
4.4、定时启动
添加定时任务
crontab -e
定时命令,每天0:01执行日志分割文章来源:https://www.toymoban.com/news/detail-454915.html
01 0 * * * logrotate -f /home/logrotate/logrotate.conf
重启定时服务文章来源地址https://www.toymoban.com/news/detail-454915.html
systemctl restart crond.service
到了这里,关于centos logrotate 日志轮转分割的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!