Linux 日志管理工具 | logrotate

发布时间 2023-07-14 09:11:38作者: 往事已成昨天

Linux 日志管理工具 | logrotate

logrotate软件是一个日志管理工具,用于切割日志,删除旧的日志文件,并创建新的日志文件,起到“转储作用”,可以为系统节省磁盘空间。最小化安装系统后logrotate工具已经安装,需要对什么服务的日志轮循,则在默认配置文件/etc/logrotate.conf中添加,或者在/etc/logrotate.d目录里创建新的配置文件

  • 命令选项说明

    选项说明
    -d debug模式,隐含-v,不会对日志文件做实际操作
    -f --force,强制轮转日志
    -v 在轮换日志时显示详细信息
    -s 使用指定的状态文件
  • 配置文件参数及说明

    参数说明
    daily 指定转储周期为每天
    weekly 指定转储周期为每周
    monthly 指定转储周期为每月
    size 当日志文件达到指定大小时才转储,缺省单位是字节,可以设定k(小写)或者M(大写)
    rotate 指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份
    compress 通过gzip压缩转储后的日志
    nocompress 不压缩转储后的日志
    dateext 在转储后的日志文件后面加上日期做后缀
    dateformat 指定日期格式,默认是 -%Y%m%d,最多也只能加上秒,如:-%Y%m%d%s
    copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
    nocopytruncate 备份日志文件不截断
    nocreate 不建立新的日志文件
    delaycompress 与compress一起使用时,转储的日志到下一次转储时才压缩
    nodelaycompress 覆盖delaycompress,转储完成时就压缩
    ifempty 即使是空文件也转储,缺省选项
    notifempty 空文件不转储
    olddir dir 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
    noolddir 转储后的日志文件和当前日志文件放在同一目录
    include 用于读取其他配置文件,可以指定文件,也可以指定目录
    create 自动建立新的日志文件,新的日志文件具有和原来的文件一样权限
    prerotate/endscript 在转储以前需要执行的的命令,这两个关键字必须独立成行
    postrotate/endscript 在转储以后需要执行的的命令,这两个关键字必须独立成行
    firstaction/endscript 在转储所有匹配通配符的日志之前执行的命令,在prerotate之前执行,这两个关键字必须独立成行
    lastaction/endscript 在转储所有匹配通配符的日志之后执行的命令,在postrotate之后执行(并且至少有一个日志被转储才会执行),这两个关键字必须独立成行
  • 配置说明

    logrotate缺省配置文件是 /etc/logrotate.conf,配置文件中通过使用include选项读取其他配置文件,默认指定的是 /etc/logrotate.d/,该目录下配置文件的参数会覆盖缺省参数。以下将讲述logrotate的配置步骤,实现将日志转储,这里使用testlog作为示例:

示例:配置Nginx日志转储策略:每月转储并保留6个月日志

  • 在/etc/logrotate.d/目录下创建子配置文件

 [root@server logs]# vim /etc/logrotate.d/nginx  /usr/local/nginx/logs/*.log #指定日志路径 {    monthly#每月转储一次    rotate 6#保留6个备份    copytruncate#备份日志并截断    delaycompress#转储的日志到下一次转储时才压缩    compress#转储后使用gzip压缩    notifempty#日志为空时不处理    missingok#切割中遇到日志错误忽略    dateext#在转储后的日志加上日期做后缀    dateformat -%Y%m%d#指定日期的格式 }
  • 创建好配置以后,系统会在每天利用 cron 定时执行 logrotate 日志分割指令。这里我们为了看到效果,不等到系统自动执行,可以手动强制执行一次日志分割,强制执行会立即进行一次日志。手动运行logrotate命令,命令如下:

 [root@server logs]# logrotate -fv /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: /usr/local/nginx/logs/*.log forced from command line (6 rotations) empty log files are not rotated, old logs are removed considering log /usr/local/nginx/logs/access.log  log needs rotating considering log /usr/local/nginx/logs/error.log  log needs rotating rotating log /usr/local/nginx/logs/access.log, log->rotateCount is 6 Converted ' -%Y%m%d' -> '-%Y%m%d' dateext suffix '-20230709' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' glob finding logs to compress failed glob finding old rotated logs failed copying /usr/local/nginx/logs/access.log to /usr/local/nginx/logs/access.log-20230709 truncating /usr/local/nginx/logs/access.log rotating log /usr/local/nginx/logs/error.log, log->rotateCount is 6 Converted ' -%Y%m%d' -> '-%Y%m%d' dateext suffix '-20230709' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' glob finding logs to compress failed glob finding old rotated logs failed copying /usr/local/nginx/logs/error.log to /usr/local/nginx/logs/error.log-20230709 truncating /usr/local/nginx/logs/error.log 注释:-v选项可以查看logrotate命令运行的详细信息,通过以上的输出,可以很清楚的看出logrotate的运行过程
  • 检查,查看日志是否被转储,命令如下

 [root@server logs]# ll total 20 -rw-r----- 1 nobody nobody    0 Jul  9 14:14 access.log -rw-r----- 1 nobody nobody 2040 Jul  9 14:14 access.log-20230709 -rw-r----- 1 nobody nobody    0 Jul  9 14:14 error.log -rw-r----- 1 nobody nobody 9102 Jul  9 14:14 error.log-20230709 -rw-r--r-- 1 root   root      5 Jul  9 11:46 nginx.pid 注释:可以看到原来的日志文件nginx日志access、error已经被转储,access.log跟error.log大小已经为0字节

图片

收录于合集 #Linux
 14
上一篇openEuler系统默认普通用户禁止使用su命令
以上内容包含广告
阅读 422
运维记事
35篇原创内容