《Linux运维实战:使用logrotate切割服务日志》
发布日期:2021-05-10 16:30:01 浏览次数:16 分类:精选文章

本文共 2754 字,大约阅读时间需要 9 分钟。

logrotate日志管理工具详解

一、logrotate简介

logrotate 是一款专业的日志文件管理工具,其主要功能包括日志轮转、压缩、删除以及创建新的日志文件。通过对日志文件的轮转操作,可以有效地管理大量日志数据,便于日志存储和分析。

logrotate 通常通过 cron 类型的计划任务自动执行,因此需要配置合适的轮转周期(如每天、每周或每月一次)。其默认行为是根据日志文件的大小或轮转次数来决定是否进行轮转。

此外,logrotate 可以根据需求配置压缩选项(支持 gzip 压缩)以及错误日志发送设置(支持发送至指定邮箱)。为了确保系统稳定运行,还可以定义前后处理脚本(如在轮转前修改文件属性,在轮转后重启服务等)。

二、logrotate配置参数说明

在配置 logrotate 时,主要参数包括以下几个:

  • compress

    默认启用 gzip 压缩功能,将轮转后的日志文件压缩存储,便于后续归档管理。

  • delaycompress

    在轮转执行时, delaycompress 参数会确保当前仍在写入的日志文件在轮转后才进行压缩。其作用是避免在日志文件中出现压缩前后的不连贯情况。

  • nocompress

    取消压缩功能,适用于不需要压缩或者希望快速轮转的场景。

  • copytruncate

    在轮转过程中将当前正在写入的日志文件备份后直接截断(清空文件内容)。这种方式虽然效率较高,但有可能会导致部分日志数据丢失。

  • nocopytruncate

    与 copytruncate 相反,exclusiveCopyTruncate 命令仅备份日志文件而不会清空内容。这种方式保证了数据的完整性,但同时也会增加磁盘空间的占用。

  • create mode owner group

    在轮转时,logrotate 会通过指定的模式创建新的日志文件,默认值为 create 0777 nobody nobody,可以根据实际需求进行调整。

  • nocreate

    取消创建新日志文件的功能,适用于只读取旧日志文件或已关闭写入的日志系统的情况。

  • nodelaycompress

    层叠配置与 delaycompress 相同,用于强制立即压缩日志文件。

  • errors address

    配置错误日志发送地址,可发送至指定邮箱,方便快速响应日志系统异常。

  • if empty

    默认值 True,即使当前日志文件为空也会执行轮转操作。

  • notifempty

    配置为 True 时,在日志文件为空时不会执行轮转。

  • nomail

    取消邮件发送功能,仅在本地处理日志文件。

  • olddir directory

    轮转后的日志文件将存放在指定目录中,需确保该目录与当前日志文件在同一文件系统。

  • noolddir

    轮转后将日志文件放置在与当前日志文件相同目录下的新文件中,适用于需要快速访问日志文件的场景。

  • prerotate

    在轮转前执行指定脚本,常用来修改文件权限或属性。

  • postrotate

    在轮转后执行后续脚本,例如重启服务或调用外部处理逻辑。

  • daily, weekly, monthly

    定义轮转周期,分别对应每天、每周和每月执行一次。

  • rotate count

    设置轮转保留的日志文件数量,默认为 5(代表保留五份完整的日志文件)。

  • size

    指定日志文件达到指定大小后触发轮转。支持单位为 byte(缺省)、 kilobyte(sizek)、 megabyte(sizem)。

  • missingok

    配置为 True 时,在日志丢失时不会报错,继续以下一个轮转文件处理。

  • sharedscripts

    在所有日志轮转完成后统一执行后续脚本,避免重复执行后续处理流程。

  • dateext

    使用当前日期作为日志文件扩展名。

  • dateformat

    定义日志文件的命名格式,常用于生成包含时间戳的文件名,如 "%Y-%m-%d-%s";

  • 三、logrotate实战示例

    3.1 按照日志大小切割

    vim /etc/logrotate.d/logrotate.conf
    {
    rotate 5
    size +100M
    copytruncate
    compress
    missingok
    notifempty
    dateext
    dateformat -%Y-%m-%d-%s
    }

    说明:

    • size +100M:指定日志文件达到 100MB 时触发轮转。
    • rotate 5:保留 5 个完整的日志文件,旧文件将onafter de
    • copytruncate:在轮转时,直接截断当前正在写入的日志文件。

    3.2 手动测试

    /sbin/logrotate -f /etc/logrotate.d/logrotate.conf

    3.3 创建定时任务

    echo "*/5 * * * * /usr/sbin/logrotate -f /etc/logrotate.d/logrotate.conf" > /etc/cron.d/logrotate

    3.4 使用脚本进行日志切割

    #!/bin/bash
    logrotate_config=/etc/logrotate.d/logrotate.conf
    logrotate_dir=/data/logrotate
    # 执行 logrotate 配置文件
    logrotate -f -c "$logrotate_config" -d /data/log
    # 定时任务文件
    crontab -l | grep -i logrotate

    四、日志切割脚本

  • 配置脚本

    # 定义日志切割目录
    LOGROTE_DIR="/data/logrotate"
    # 定时任务脚本
    echo "*/5 * * * * /usr/sbin/logrotate -f -c /etc/logrotate.d/logrotate.conf" >> $LOGROTE_DIR/cron.job
    crontab -l | grep -i logrotate || echo "*/5 * * * * /usr/sbin/logrotate -f -c /etc/logrotate.d/logrotate.conf" > $LOGROTE_DIR/cron_root
  • 脚本执行方式

    ./logrotate.sh > /var/log/`date +\%Y-\%m-\%d`.log
  • 总结

    通过合理配置 logrotate 的参数,可以根据实际需求灵活管理日志文件的轮转、压缩和存储。建议在实际使用前参考 logrotate 的官方文档和最佳实践,避免遗漏重要的后处理脚本或配置参数。

    上一篇:《一、企业级SVN运维实战:SVN服务部署》
    下一篇:《三、企业级监控系统之Prometheus监控blackbox_exporter》

    发表评论

    最新留言

    初次前来,多多关照!
    [***.217.46.12]2025年05月04日 11时43分45秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章