如何在 Ubuntu 22.04 上配置 Logrotate 高级教程
简介
本教程将教你如何在 Ubuntu 22.04 上进行 Logrotate 的高级配置。
日志管理对于维护系统性能和确保你的日志不会占用太多磁盘空间至关重要。在 Ubuntu 上,logrotate 是一个强大的工具,它可以通过轮转、压缩和删除旧日志来自动管理日志文件。在本教程中,我们将介绍在 Ubuntu 系统上配置 logrotate 以实现高效日志管理的步骤。
对于那些需要对日志轮转进行更精细控制的人来说,Logrotate 提供了高级配置选项。这些选项对于管理大规模环境、确保最佳性能和处理特定的应用程序需求尤其有用。下面,我们将深入研究 Logrotate 的一些高级功能和配置。
准备工作
服务器准备
必要前提:
- 一个充满求知欲的大脑。
- 一台 Linux 服务器(推荐腾讯云、阿里云或雨云等)。
我将以 雨云 为例,带大家创建一台自己的云服务器,以便学习本篇文章的内容。
注册链接: https://rainyun.ivwv.site
创建雨云服务器
以下步骤仅供参考,请根据实际需求选择配置。
- 点击 云产品 → 云服务器 → 立即购买。
- 选择距离你较近的区域,以保证低延迟。
- 按照自己需求选择配置,选择Ubuntu 22.04 版本,按照自己需求是否预装Docker。
- 最后按照提示进行购买。
- 购买后等待机器部署完毕,点击刚刚创建好的服务器,进入管理面板,找到远程连接相关信息。
- 我们使用
PowerShell
进行SSH
远程连接到服务器,Win+R
打开运行窗口,输入powershell
后点击确定。
- 输入
ssh root@你的服务器IP
例如ssh root@154.9.227.239
回车后,首次需要输入yes
,再次回车后即可登录服务器。
- 到此为止,我们的云服务器就远程连接上了。
安装和配置步骤
1. 理解 Logrotate 指令
在深入研究高级配置之前,了解 Logrotate 提供的一些关键指令非常重要:
- maxsize [size]: 如果日志增长到大于指定的大小,则轮转日志 (例如,maxsize 100M)。
- minsize [size]: 仅当日志达到最小大小时才轮转日志 (例如,minsize 1M)。
- dateext: 在轮转时将当前日期附加到文件名,使其更容易识别日志。
- olddir [directory]: 将旧日志移动到轮转后指定的目录。
- prerotate/postrotate: 在日志轮转之前或之后运行脚本,允许自定义操作,例如通知服务。
2. 配置基于日期的 Logrotate 日志命名
使用 dateext
选项,Logrotate 可以将日期附加到轮转后的日志文件,从而更容易跟踪一段时间内的日志。
编辑特定应用程序的配置文件,例如 Nginx:
sudo nano /etc/logrotate.d/nginx
添加 dateext
选项:
/var/log/nginx/*.log {
daily
dateext
dateformat -%Y-%m-%d
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}
dateext
: 将日期添加到轮转后的日志文件 (例如,access.log-2024-08-13)。dateformat
: 自定义日期格式;此处设置为 YYYY-MM-DD。
3. 使用基于大小的日志轮转
对于生成大量日志的应用程序,基于文件大小进行轮转可能比基于时间的轮转更有效。
编辑应用程序的配置文件:
sudo nano /etc/logrotate.d/app
实施基于大小的轮转:
/var/log/app/*.log {
size 100M
rotate 10
compress
delaycompress
missingok
notifempty
create 0640 appuser appgroup
sharedscripts
postrotate
systemctl restart app
endscript
}
size 100M
: 当日志超过 100MB 时轮转日志。rotate 10
: 保留最近 10 个轮转的日志。
4. 处理跨多个服务器的日志轮转
在分布式环境中,日志可能分布在多个服务器上。使用 copytruncate
选项可以帮助管理日志而不会中断服务。
使用 copytruncate
配置 Logrotate:
sudo nano /etc/logrotate.d/multi-server-app
添加 copytruncate
选项:
/var/log/multi-server-app/*.log {
daily
size 200M
rotate 5
compress
copytruncate
missingok
notifempty
create 0640 appuser appgroup
sharedscripts
postrotate
ssh user@other-server 'sudo systemctl restart app'
endscript
}
copytruncate
: 复制日志文件,然后截断原始文件。当应用程序在轮转期间无法关闭日志文件时,此选项非常有用。- 使用 SSH 的
postrotate
: 在轮转后重新启动另一台服务器上的服务。
5. Logrotate 中的自定义脚本
可以在日志轮转之前或之后执行自定义脚本,以执行诸如通知管理员或将日志备份到远程服务器之类的操作。
编辑配置文件:
sudo nano /etc/logrotate.d/custom-scripts
添加自定义脚本:
/var/log/custom-app/*.log {
weekly
rotate 4
compress
missingok
notifempty
create 0640 customuser customgroup
prerotate
# Notify admin before rotation
echo "Log rotation starting for custom-app logs" | mail -s "Logrotate Notice" admin@example.com
endscript
postrotate
# Backup logs to a remote server
rsync -av /var/log/custom-app/*.log remoteuser@remote-server:/backup/logs/
endscript
}
prerotate/endscript
: 在轮转开始之前运行命令。postrotate/endscript
: 在轮转完成后执行命令。
6. 基于年龄和大小组合轮转日志
你可能希望根据年龄和大小轮转日志,确保日志在一定时间后或达到特定大小时进行轮转。
编辑配置文件:
sudo nano /etc/logrotate.d/combined
组合年龄和大小轮转:
/var/log/combined-app/*.log {
daily
size 50M
rotate 7
compress
missingok
notifempty
create 0640 combineduser combinedgroup
sharedscripts
postrotate
systemctl reload combined-app
endscript
}
日志将每天轮转或在达到 50MB 时轮转,以先到者为准。
7. 为记录到标准输出的应用程序配置 Logrotate
可以通过重定向日志来管理记录到标准输出的应用程序(例如,Docker 容器)。
为应用程序创建自定义日志文件:
sudo mkdir -p /var/log/custom-app
将标准输出重定向到日志文件:
custom-app > /var/log/custom-app/output.log 2>&1 &
配置 Logrotate:
sudo nano /etc/logrotate.d/custom-app
添加以下配置:
/var/log/custom-app/output.log {
daily
rotate 10
compress
delaycompress
copytruncate
missingok
notifempty
postrotate
systemctl restart custom-app
endscript
}
结尾
通过利用 Logrotate 的高级配置,你可以有效地管理各种场景中的日志,从处理大规模环境到集成自定义脚本和管理跨多个服务器的日志。根据你的特定需求定制 Logrotate 可确保你的日志得到有效维护,避免磁盘空间问题,并确保在需要时始终可以使用关键的日志信息。
雨云 - 新一代云服务提供商: https://rainyun.ivwv.site
我的博客:https://blog.ivwv.site