美文网首页
Nginx日志分割---Logrotate

Nginx日志分割---Logrotate

作者: Habit_1027 | 来源:发表于2024-07-18 16:02 被阅读0次

    一、Logrotate介绍

    logrotate是Linux系统中的一个日志文件管理工具,它用于自动轮转(log rotation)日志文件,以便控制日志文件的大小和保留时长,同时还可以对旧日志文件进行压缩和删除。

    logrotate的作用主要有以下几个方面:

    控制日志文件大小:日志文件会随着时间的推移不断增长,如果不进行管理,可能会占用过多的磁盘空间。logrotate通过定期轮转日志文件,可以限制每个日志文件的大小,达到控制日志文件大小的目的。

    保留日志历史:除了控制日志文件大小,logrotate还可以设置保留日志文件的数量或保留时间。当达到指定条件时,旧的日志文件会被删除或压缩,从而保留一定的日志历史。

    避免日志文件过大影响性能:当一个日志文件过大时,读取和写入该文件的操作可能会变得缓慢,影响系统的性能。通过定期轮转日志文件,可以避免日志文件过大,从而保持系统的正常运行。

    压缩旧日志文件:logrotate可以对旧的日志文件进行压缩,以减少磁盘空间的占用。压缩后的日志文件可以进一步存档或传输,以便后续的分析和使用。

    自动化管理:logrotate可以通过配置文件进行设置,使得日志文件的管理变得自动化。可以根据需求定制轮转的条件和行为,以适应不同的日志文件管理需求。

    总的来说,logrotate是一个非常实用的工具,它可以帮助系统管理员有效地管理日志文件,控制日志文件大小,保留一定的日志历史,避免日志文件过大对系统性能的影响,并且可以对旧的日志文件进行压缩和删除,以节省磁盘空间。

    二、Logrotate用法

    logrotate是基于crontab运行的,所以这个时间点是由crontab控制的,具体可以查询crontab的配置文件/etc/anacrontab。系统会按照计划的频率运行logrotate,通常是每天。在大多数的Linux发行版本上,计划每天运行的脚本位于/etc/cron.daily/logrotate。

    主流Linux发行版上都默认安装有logrotate包,如果你的linux系统中找不到logrotate, 可以使用apt-get或yum命令来安装。

    yum install -y logrotate
    

    一般linux都已经自带logrotate,下列命令可以查看是否已安装

    rpm -ql logrotate
    

    三、语法

    logrotate [OPTIONS] CONFIG_FILE

    #手动执行nginx日志分割
    logrotate -vf /etc/logrotate.d/nginx
    
    • -d, --debug: 启用调试模式,输出更详细的调试信息。
    • -f, --force: 强制执行轮转操作,即使日志文件不需要轮转。
    • -v, --verbose: 显示轮转操作的详细输出。
    • -s, --state STATE_FILE: 指定状态文件的路径,用于记录上次轮转的状态。
    • -c, --create: 在轮转后创建一个新的空日志文件。
    • -m, --mail MAIL_COMMAND: 在轮转后执行指定的邮件命令,将轮转结果发送到指定的邮箱。
    • -n, --no-cleanup: 不删除旧的轮转后的日志文件。
    • -t, --test: 测试配置文件的语法和轮转操作,但不执行实际的轮转。
    • -h, --help: 显示logrotate的帮助信息。

    四、Logrotate配置文件

    /etc/logrotate.conf这个文件是logrotate的主配置文件,这个主配置文件中定义了日志文件分割的通用参数。
    自定义配置文件目录为/etc/logrotate.d,自定义配置文件中的配置可以覆盖掉通用配置。


    image.png

    参数详解

    daily:按天切割。触发切割时如果时间不到一天不会执行切割。除了daily,还可以选monthly,weekly,yearly
    rotate:对于同一个日志文件切割后最多保留的文件个数
    compress :是否通过gzip压缩转储以后的日志文件
    copytruncate:将源日志文件切割成新文件后,清空并保留源日志文件。默认如果不启用该配-置,分割后源日志文件将被删除。设置该值,以便分割后可以继续在源日志文件写入日志,等待下次分割
    missingok:切割中遇到日志错误忽略
    notifempty: 当日志文件为空时,不进行轮转
    
    image.png

    其他参数

    compress //通过gzip 压缩转储以后的日志
    nocompress //不做gzip压缩处理
    copytruncate //用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
    nocopytruncate //备份日志文件不过不截断
    create mode owner group //轮转时指定创建新文件的属性,如create 0777 nobody nobody
    nocreate //不建立新的日志文件
    delaycompress //和compress 一起使用时,转储的日志文件到下一次转储时才压缩
    nodelaycompress //覆盖 delaycompress 选项,转储同时压缩。
    missingok //如果日志丢失,不报错继续滚动下一个日志
    errors address //专储时的错误信息发送到指定的Email 地址
    ifempty //即使日志文件为空文件也做轮转,这个是logrotate的缺省选项。
    notifempty //当日志文件为空时,不进行轮转
    mail address //把转储的日志文件发送到指定的E-mail 地址
    nomail //转储时不发送日志文件
    olddir directory //转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
    noolddir //转储后的日志文件和当前日志文件放在同一个目录下
    sharedscripts //运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
    prerotate //在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行
    postrotate //在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行
    daily //指定转储周期为每天
    weekly //指定转储周期为每周
    monthly //指定转储周期为每月
    rotate count //指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
    dateext //使用当期日期作为命名格式
    dateformat .%s //配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
    size(或minsize) log-size //当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).
    当日志文件 >= log-size 的时候就转储。 以下为合法格式:(其他格式的单位大小写没有试过)
    size = 5 或 size 5 (>= 5 个字节就转储)
    size = 100k 或 size 100k
    size = 100M 或 size 100M
    

    相关文章

      网友评论

          本文标题:Nginx日志分割---Logrotate

          本文链接:https://www.haomeiwen.com/subject/mywrhjtx.html