跳转到内容

日志轮转配置

课程介绍

日志轮转是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技术学习平台,从入门到精通的完整学习路径