logrotate使用教程
January 23, 2019
3225
0x01 前言
日志文件随着系统的运行,会越积越多。如何来解决这个问题呢?
手动删除->自动删除->压缩后,自动删除
- 手动删除:磁盘报警就直接删掉历史的
- 自动删除:写脚本定期执行删除
- 压缩后,自动删除:定期删除的话,如果单周期内的日志文件很大也会导致磁盘过高。所以需要先进行压缩。
刚想上手写个脚本来实现的,就被安利了logrotate,一直捣鼓日志这块,竟然没有发现这个便捷的工具。之前傻傻的执行gzip。。。
0x02 简介
logrotate可以简化对大量日志的管理。它可以对日志文件进行自动旋转,压缩,删除和移动。每个日志文件可以每天,每周,每月或当它变得太大时处理。
logrotate默认使用cron任务来执行。可以编写多个配置文件,根据相应配置来执行。
0x03 配置
默认文件地址:
- /etc/logrotate.conf
- /etc/logrotate.d/
自定义的配置文件需要存储到/etc/logrotate.d/内。
配置文件:
1 |
|
日志文件格式:
- /home/saber/code/xxx/logs/info.log
- /home/saber/code/xxx/logs/*
- /data/nginx/logs/*/app/*
常用参数:
- daily:按天处理
- weekly:按周处理
- monthly:按月处理
- nocompress:不需要压缩时,用这个参数
- copytruncate:用于还在打开中的日志文件,把当前日志备份并截断
- nocopytruncate:备份日志文件但是不截断
- create mode owner group:转储文件,使用指定的文件模式创建新的日志文件
- nocreate:不建立新的日志文件
- delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
- nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
- size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
- dateext:定义日志文件后缀是日期格式,也就是切割后文件是:xxx.log-20160402.gz这样的格式。如果该参数被注释掉,切割出来是按数字递增,即前面说的 xxx.log-1这种格式
- delaycompress:总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用
- create 640 nginx adm:以指定的权限和用书属性,创建全新的日志文件,同时logrotate也会重命名原始日志文件。
- rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
注意:
linux系统中,内核是根据文件描述符来找文件的,所以logrotate执行后需要重启相应程序,重新打开日志文件,否则会继续往转存的文件写数据的。
1 |
|
压缩
logrotate默认使用的压缩是gzip,参考下图结果,如果你要是想更小的话,可以选择xz的压缩。
file type | .jpg | .mp3 | .mp4 | .odt | .png | .txt |
---|---|---|---|---|---|---|
number of files | 2163 | 45 | 279 | 2990 | 2072 | 4397 |
space on disk | 98M | 99M | 99M | 98M | 98M | 98M |
tar | 94M | 99M | 98M | 93M | 92M | 89M |
zip (no compression) | 92M | 99M | 98M | 91M | 91M | 86M |
zip (deflate) | 87M | 98M | 93M | 85M | 77M | 28M |
tar + gzip | 86M | 98M | 93M | 82M | 77M | 27M |
tar + bz2 | 87M | 98M | 93M | 42M | 71M | 22M |
tar + xz | 70M | 98M | 22M | 348K | 51M | 19M |
来源:https://itsfoss.com/tar-vs-zip-vs-gz/
1 |
|
场景
配置文件要根据现有日志输出格式和后续日志需要如何处理来配置。
- 单文件输出
- 现有日志已经按日期输出
单文件输出的话,就比较好处理,直接切割日志数据配置日期后缀,配上rotate就可以只留下配置的天数。
现有文件按日期输出的话,就跟我的配置差不多了。转存,压缩即可,有一点不好就是没法自动删除。
0x03 执行
logrotate在系统里已经是自动配置了的,会定期跑的。
1 |
|
除了用的cron自动执行的话,你还可以自定义执行。
1 |
|
操作(先在线下测试,再到生产环境执行)
- 检查日志文件位置是否正确。
- 检查转存的文件夹是否已创建,有权限写入。
- 执行一遍
/usr/sbin/logrotate -f /etc/logrotate.d/syslog
参考:
- 本文作者:Shuibo
- 本文链接:https://shuibo.me/2019/01/23/logrotate-guide.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!
查看评论