主题
日志轮转配置
课程介绍
日志轮转是Linux系统中管理日志文件的重要机制,用于定期归档和删除旧的日志文件。本课程将详细讲解日志轮转的原理、logrotate工具的使用方法、配置文件的编写、自定义日志轮转策略等内容,帮助你掌握日志轮转的配置技巧。
1. 日志轮转概述
1.1 什么是日志轮转
日志轮转是指定期归档和删除旧的日志文件。
日志轮转的目的:
| 目的 | 说明 |
|---|---|
| 节省空间 | 删除旧的日志文件,节省磁盘空间 |
| 便于管理 | 归档旧的日志文件,便于管理 |
| 防止过大 | 防止日志文件过大 |
| 保留历史 | 保留历史日志,便于查询 |
1.2 日志轮转的原理
日志轮转通过定期归档和删除旧的日志文件来实现。
日志轮转的流程:
- 重命名当前日志文件
- 创建新的日志文件
- 压缩旧的日志文件
- 删除过期的日志文件
2. logrotate工具
2.1 logrotate概述
logrotate是Linux系统的日志轮转工具。
logrotate的特点:
| 特点 | 说明 |
|---|---|
| 自动轮转 | 自动轮转日志文件 |
| 灵活配置 | 灵活配置轮转策略 |
| 压缩归档 | 支持压缩归档 |
| 定时执行 | 支持定时执行 |
2.2 logrotate安装
logrotate通常默认安装,如果没有安装,可以手动安装。
安装logrotate:
bash
# Debian/Ubuntu系统
apt-get install logrotate
# CentOS/RHEL系统
yum install logrotate2.3 logrotate命令
logrotate的基本命令。
命令:
bash
# 查看logrotate版本
logrotate --version
# 检查logrotate配置
logrotate -d /etc/logrotate.conf
# 强制执行logrotate
logrotate -f /etc/logrotate.conf
# 查看logrotate状态
cat /var/lib/logrotate/status3. 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,组admsize 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.conf7. 常见问题
问题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:强制执行logrotatecrontab:配置定时任务
日志轮转是Linux系统日志管理的重要组成部分,掌握这些知识后,我们将在后续课程中学习性能分析、系统调优等内容。
课后练习
练习1(基础)
查看logrotate主配置文件。
练习2(进阶)
创建一个自定义的日志轮转配置。
练习3(拓展)
配置定时任务,每天凌晨3点执行日志轮转。