找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

2438

积分

0

好友

342

主题
发表于 3 天前 | 查看: 8| 回复: 0

一名合格的 Linux 运维工程师,必定在工作中极度依赖查看日志来解决各类问题。毕竟,日志是服务器的故障诊断书,系统运行状态、应用报错详情全靠它来追溯。

然而,无论是系统日志还是应用日志,其体积往往会像滚雪球一样持续增长,给运维工作埋下巨大隐患。许多经验丰富的工程师都曾经历过,因为日志文件打满系统盘而导致的严重故障。在 Linux 生态中,常见的日志管理工具有 newsyslog、savelog、logadm 等。

当然,解决问题时,充分利用系统自带工具往往是最佳实践。logrotate 便是 Linux 系统自带的日志管理王牌工具。它能够帮助我们实现日志的自动归档、压缩与清理,从而大幅提升日志管理效率,增强服务器稳定性。

一、日志轮转:服务器运维的“必备保命技能”

日志轮转的核心目标,正是防止日志无限增长,精准解决运维中的三大痛点:

  • 告别磁盘爆满:自动清理超期的无用日志,避免冗余数据占用宝贵的磁盘空间。
  • 提升检索效率:拆分后的日志体积更小,查询特定时间段的日志时速度大幅提升。
  • 满足合规审计:按时间戳归档的日志,能够直接满足企业的合规审计和问题回溯需求。

简单来说,日志轮转就像为日志文件进行“定期瘦身和专业存档”,这既是服务器自我保护的核心能力,也是 Linux 运维 工程师必备的基础技能之一。

二、logrotate:Linux 默认的日志管理王者

logrotate 是 Linux/Unix 系统默认预装的日志轮转工具(几乎所有主流发行版均自带),能成为运维标配,主要依靠以下硬核优势:

  • 触发机制灵活:支持按天、周、月定时轮转,也能按日志大小(如 100MB)触发。
  • 应用适配广泛:可为 Nginx、MySQL、Tomcat 等单个应用定制独立的轮转规则。
  • 功能实用全面:内置压缩、删除、邮件发送等功能,满足多样化的日志管理需求。
  • 扩展能力强大:支持执行自定义脚本,实现服务重载等复杂操作。

无论是系统日志(位于 /var/log/ 目录下),还是各类应用日志,其轮转管理大多依赖于 logrotate 实现,堪称运维工作中不可或缺的“日志管家”。

三、从验证安装开始

动手实践是最快的进步方式。首先,我们验证系统中是否已安装 logrotate

# 验证是否已安装
logrotate --version

logrotate版本信息终端截图

从上面的截图可以看出,当前安装的 logrotate 版本是 3.21.0,同时列出了它默认的压缩、邮件等命令路径,以及支持 ACL 和 SELinux 安全机制的信息。

四、配置详解:灵活定制轮转规则

logrotate 的配置主要分为“全局配置”和“子配置”。全局配置定义默认规则,子配置则针对单个应用进行定制(优先级更高,可覆盖全局设置)。

1. 全局配置文件:/etc/logrotate.conf

全局配置文件定义了服务器级别的默认策略,适用于大多数普通日志。以下是一个推荐的配置示例:

# 轮转周期:可选weekly(每周)/daily(每天)/monthly(每月)
weekly
# 保留最近4个归档文件,超期自动删除最早的
rotate 4
# 轮转后自动创建新的日志文件,保证应用正常写入
create
# 归档日志用gzip压缩,大幅节省磁盘空间
compress
# 延迟压缩:当前轮转的日志不压缩,下次轮转时再压缩(避免影响应用读写)
delaycompress
# 日志文件不存在时不报错,防止误报干扰
missingok
# 日志为空时不执行轮转,避免无效操作
notifempty
# 归档文件添加日期戳(如access.log-20250426.gz),方便识别时间
dateext
# 加载应用级子配置(关键!让每个应用可定制规则)
include /etc/logrotate.d

logrotate全局配置文件示例

2. 子配置文件:/etc/logrotate.d/

每个应用的独立轮转规则都应放在 /etc/logrotate.d/ 目录下,建议文件名与应用名保持一致(例如 nginxmysql)。

示例一:rsyslog 日志轮转(/etc/logrotate.d/rsyslog)

rsyslog日志轮转配置文件示例

参考配置内容,我们可以解读出以下策略:

  • 顶部路径:指定了要管理的日志文件,包括系统日志(syslog)、邮件日志(mail.log)、内核日志(kern.log)等。
  • 大括号内的规则是对这些日志文件的统一轮转策略:
    • rotate 7:保留最近 7 份轮转后的日志文件。
    • daily:每天执行一次日志轮转。
    • missingok:如果日志文件不存在,不报错。
    • notifempty:如果日志文件为空,不进行轮转。
    • size 50M:日志文件大小超过 50MB 时也会触发轮转(与 daily 条件满足其一即执行)。
    • compress:轮转后的日志文件用 gzip 压缩。
    • delaycompress:延迟压缩,直到下一次轮转时再压缩当前日志。
    • sharedscripts:所有日志轮转完成后,只执行一次后续脚本。
    • postrotate... endscript:轮转完成后,执行 /usr/lib/rsyslog/rsyslog-rotate 脚本,通常用来通知 rsyslog 服务重新打开日志文件句柄。

示例二:MySQL 日志轮转(/etc/logrotate.d/mysql)

一个合理的 MySQL 日志轮转配置不会轻易重启数据库服务,以免中断业务。以下是一个示例配置:

# 匹配MySQL所有日志文件路径
/var/log/mysql/*.log {
    weekly               # 每周轮转
    rotate 8             # 保留8周(约2个月)归档文件
    missingok            # 日志不存在不报错
    compress             # 压缩归档日志
    notifempty           # 空日志不轮转
    create 640 mysql mysql  # 新建日志文件,权限640,所有者mysql:mysql
    sharedscripts        # 统一执行脚本
    postrotate           # 轮转后刷新MySQL日志,避免写入异常
        /usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
    endscript
}

整个过程无需人工干预,且完全不影响数据库服务的正常运行,真正实现了日志管理的自动化。

五、手动测试与故障排查

手动测试配置并掌握排查技巧,是确保日志轮转稳定运行的关键。

1. 手动测试轮转

(1) 强制轮转单个应用配置:

# 强制执行mysql日志轮转(-f:强制触发)
logrotate -f /etc/logrotate.d/mysql

(2) 详细日志模式(推荐,方便排查问题):

# -v:显示执行过程,-f:强制轮转,可以清晰查看每一步操作
logrotate -vf /etc/logrotate.d/mysql

2. 常见故障排查技巧

  • 路径错误:检查配置中指定的日志文件路径、应用的 PID 文件路径是否正确(例如 Nginx 的 pid 文件是否在 /run/nginx.pid)。
  • 权限不足:新创建的日志文件权限需与应用运行用户匹配(例如 Nginx 使用 nginx 用户运行,则新日志文件的所有者应设为 nginx)。
  • 脚本报错:手动执行 postrotateprerotate 节中的命令,排查是否因 PID 不存在、命令路径错误等原因导致执行失败。
  • 查看系统日志:通过 grep logrotate /var/log/messages(CentOS/RHEL)或 grep logrotate /var/log/syslog(Ubuntu/Debian)来获取 logrotate 自身的执行日志,这是定位问题根源的有效方法。

logrotate 作为 Linux 系统自带的日志管理神器,通过简单的配置就能实现日志的自动化轮转、压缩与清理,从根本上解决日志无限增长的痛点。无论是单机服务器还是集群环境,合理使用 logrotate 都能让 日志管理 更高效,显著降低磁盘被写满的风险,提升服务器的整体运行稳定性。

更进一步思考,logrotate 本质上是一个通用的文件管理工具,其应用并不局限于日志文件。我们完全可以利用它来管理图片、文档等其他类型的文件,对指定目录内的文件执行一系列自动化操作,例如定期打包或删除特定天数之前的文件,其玩法和应用场景非常丰富。

欢迎在 云栈社区 分享你在 Linux 运维中的更多实用技巧与心得。




上一篇:得物大数据比对平台Galaxy:Spark迁移ODPS的数据一致性校验原理与实践
下一篇:CPU缓存设计解析:从全相联到组相联的组织形式与工作原理
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-1-24 01:42 , Processed in 0.382594 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表