跳转到内容

日志轮转配置 ​

课程介绍 ​

日志轮转是Linux系统中管理日志文件的重要机制,用于定期归档和删除旧的日志文件。本课程将详细讲解日志轮转的原理、logrotate工具的使用方法、配置文件的编写、自定义日志轮转策略等内容,帮助你掌握日志轮转的配置技巧。

1. 日志轮转概述 ​

1.1 什么是日志轮转 ​

日志轮转是指定期归档和删除旧的日志文件。

日志轮转的目的:

目的说明
节省空间删除旧的日志文件,节省磁盘空间
便于管理归档旧的日志文件,便于管理
防止过大防止日志文件过大
保留历史保留历史日志,便于查询

1.2 日志轮转的原理 ​

日志轮转通过定期归档和删除旧的日志文件来实现。

日志轮转的流程:

  1. 重命名当前日志文件
  2. 创建新的日志文件
  3. 压缩旧的日志文件
  4. 删除过期的日志文件

2. logrotate工具 ​

2.1 logrotate概述 ​

logrotate是Linux系统的日志轮转工具。

logrotate的特点:

特点说明
自动轮转自动轮转日志文件
灵活配置灵活配置轮转策略
压缩归档支持压缩归档
定时执行支持定时执行

2.2 logrotate安装 ​

logrotate通常默认安装,如果没有安装,可以手动安装。

安装logrotate:

bash
# Debian/Ubuntu系统
apt-get install logrotate

# CentOS/RHEL系统
yum install logrotate

2.3 logrotate命令 ​

logrotate的基本命令。

命令:

bash
# 查看logrotate版本
logrotate --version

# 检查logrotate配置
logrotate -d /etc/logrotate.conf

# 强制执行logrotate
logrotate -f /etc/logrotate.conf

# 查看logrotate状态
cat /var/lib/logrotate/status

3. logrotate配置文件 ​

3.1 主配置文件 ​

logrotate的主配置文件是/etc/logrotate.conf。

配置文件:

bash
# 编辑logrotate主配置文件
vim /etc/logrotate.conf

默认配置:

bash
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

3.2 配置项说明 ​

logrotate的配置项说明。

常用配置项:

配置项说明
daily每天轮转
weekly每周轮转
monthly每月轮转
rotate n保留n个日志文件
compress压缩旧的日志文件
delaycompress延迟压缩
missingok日志文件不存在时不报错
notifempty日志文件为空时不轮转
create创建新的日志文件
size n日志文件大小超过n时轮转
minsize n日志文件大小超过n时轮转
maxage n日志文件保留n天
copytruncate复制后清空原文件
sharedscripts共享脚本
postrotate轮转后执行的命令
endscript结束脚本

4. 自定义日志轮转 ​

4.1 创建自定义配置 ​

创建自定义的日志轮转配置。

配置文件:

bash
# 创建自定义配置文件
vim /etc/logrotate.d/myapp

配置示例:

bash
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /usr/bin/systemctl reload myapp.service > /dev/null 2>&1 || true
    endscript
}

4.2 配置说明 ​

自定义配置的说明。

配置说明:

配置项说明
daily每天轮转
rotate 7保留7个日志文件
compress压缩旧的日志文件
delaycompress延迟压缩
missingok日志文件不存在时不报错
notifempty日志文件为空时不轮转
create 640 root adm创建新的日志文件,权限640,所有者root,组adm
sharedscripts共享脚本
postrotate轮转后执行的命令
endscript结束脚本

5. 常见日志轮转配置 ​

5.1 系统日志轮转 ​

系统日志的轮转配置。

配置示例:

bash
/var/log/syslog {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /usr/bin/systemctl reload rsyslog.service > /dev/null 2>&1 || true
    endscript
}

/var/log/messages {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /usr/bin/systemctl reload rsyslog.service > /dev/null 2>&1 || true
    endscript
}

5.2 Apache日志轮转 ​

Apache日志的轮转配置。

配置示例:

bash
/var/log/apache2/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /usr/bin/systemctl reload apache2.service > /dev/null 2>&1 || true
    endscript
}

5.3 Nginx日志轮转 ​

Nginx日志的轮转配置。

配置示例:

bash
/var/log/nginx/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /usr/bin/systemctl reload nginx.service > /dev/null 2>&1 || true
    endscript
}

5.4 MySQL日志轮转 ​

MySQL日志的轮转配置。

配置示例:

bash
/var/log/mysql/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 640 mysql adm
    sharedscripts
    postrotate
        /usr/bin/mysqladmin flush-logs > /dev/null 2>&1 || true
    endscript
}

6. 实战案例 ​

案例1:配置应用日志轮转 ​

场景:配置应用的日志轮转策略。

配置文件:

bash
# 创建应用日志轮转配置
vim /etc/logrotate.d/myapp

配置内容:

bash
/var/log/myapp/*.log {
    daily
    rotate 30
    compress
    delaycompress
    missingok
    notifempty
    create 640 root adm
    size 100M
    sharedscripts
    postrotate
        /usr/bin/systemctl reload myapp.service > /dev/null 2>&1 || true
    endscript
}

配置说明:

  • daily:每天轮转
  • rotate 30:保留30个日志文件
  • compress:压缩旧的日志文件
  • delaycompress:延迟压缩
  • missingok:日志文件不存在时不报错
  • notifempty:日志文件为空时不轮转
  • create 640 root adm:创建新的日志文件,权限640,所有者root,组adm
  • size 100M:日志文件大小超过100M时轮转
  • sharedscripts:共享脚本
  • postrotate:轮转后执行的命令
  • endscript:结束脚本

案例2:配置系统日志轮转 ​

场景:配置系统的日志轮转策略。

配置文件:

bash
# 编辑logrotate主配置文件
vim /etc/logrotate.conf

配置内容:

bash
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

案例3:配置定时任务 ​

场景:配置定时任务,定期执行日志轮转。

配置文件:

bash
# 编辑crontab
crontab -e

配置内容:

bash
# 每天凌晨3点执行日志轮转
0 3 * * * /usr/sbin/logrotate -f /etc/logrotate.conf

7. 常见问题 ​

问题1:日志轮转不生效 ​

问题:日志轮转不生效。

解决方法:

bash
# 检查logrotate配置
logrotate -d /etc/logrotate.conf

# 强制执行logrotate
logrotate -f /etc/logrotate.conf

# 检查logrotate状态
cat /var/lib/logrotate/status

问题2:日志文件权限错误 ​

问题:日志文件权限错误。

解决方法:

bash
# 修改日志文件权限
chmod 640 /var/log/myapp/*.log

# 修改日志文件所有者
chown root:adm /var/log/myapp/*.log

问题3:日志文件过大 ​

问题:日志文件过大。

解决方法:

bash
# 清理旧的日志文件
find /var/log/myapp -name "*.log.*" -mtime +30 -delete

# 修改logrotate配置,增加轮转频率
vim /etc/logrotate.d/myapp

课程总结 ​

这节课我们学习了日志轮转配置。

核心内容:

  • 日志轮转概述
  • logrotate工具(安装、命令)
  • logrotate配置文件(主配置文件、配置项说明)
  • 自定义日志轮转(创建自定义配置、配置说明)
  • 常见日志轮转配置(系统日志轮转、Apache日志轮转、Nginx日志轮转、MySQL日志轮转)
  • 实战案例(配置应用日志轮转、配置系统日志轮转、配置定时任务)
  • 常见问题

重要命令:

  • logrotate:日志轮转
  • logrotate -d:检查logrotate配置
  • logrotate -f:强制执行logrotate
  • crontab:配置定时任务

日志轮转是Linux系统日志管理的重要组成部分,掌握这些知识后,我们将在后续课程中学习性能分析、系统调优等内容。

课后练习 ​

练习1(基础) ​

查看logrotate主配置文件。

练习2(进阶) ​

创建一个自定义的日志轮转配置。

练习3(拓展) ​

配置定时任务,每天凌晨3点执行日志轮转。

评论区

专业的Linux技术学习平台,从入门到精通的完整学习路径