当前位置: 首页 > news >正文

如何在 Ubuntu 22.04 上配置 Logrotate 高级教程

简介

本教程将教你如何在 Ubuntu 22.04 上进行 Logrotate 的高级配置。

日志管理对于维护系统性能和确保你的日志不会占用太多磁盘空间至关重要。在 Ubuntu 上,logrotate 是一个强大的工具,它可以通过轮转、压缩和删除旧日志来自动管理日志文件。在本教程中,我们将介绍在 Ubuntu 系统上配置 logrotate 以实现高效日志管理的步骤。

对于那些需要对日志轮转进行更精细控制的人来说,Logrotate 提供了高级配置选项。这些选项对于管理大规模环境、确保最佳性能和处理特定的应用程序需求尤其有用。下面,我们将深入研究 Logrotate 的一些高级功能和配置。

安装和配置步骤

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 {dailydateextdateformat -%Y-%m-%drotate 7compressdelaycompressmissingoknotifemptycreate 0640 www-data admsharedscriptspostrotate[ -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 100Mrotate 10compressdelaycompressmissingoknotifemptycreate 0640 appuser appgroupsharedscriptspostrotatesystemctl restart appendscript
}
  • 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 {dailysize 200Mrotate 5compresscopytruncatemissingoknotifemptycreate 0640 appuser appgroupsharedscriptspostrotatessh 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 {weeklyrotate 4compressmissingoknotifemptycreate 0640 customuser customgroupprerotate# Notify admin before rotationecho "Log rotation starting for custom-app logs" | mail -s "Logrotate Notice" admin@example.comendscriptpostrotate# Backup logs to a remote serverrsync -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 {dailysize 50Mrotate 7compressmissingoknotifemptycreate 0640 combineduser combinedgroupsharedscriptspostrotatesystemctl reload combined-appendscript
}

日志将每天轮转或在达到 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 {dailyrotate 10compressdelaycompresscopytruncatemissingoknotifemptypostrotatesystemctl restart custom-appendscript
}

结尾

通过利用 Logrotate 的高级配置,你可以有效地管理各种场景中的日志,从处理大规模环境到集成自定义脚本和管理跨多个服务器的日志。根据你的特定需求定制 Logrotate 可确保你的日志得到有效维护,避免磁盘空间问题,并确保在需要时始终可以使用关键的日志信息。

我的博客:https://blog.ivwv.site


http://www.mrgr.cn/news/83114.html

相关文章:

  • Anroid通过WebView打开见面发布App
  • Elixir语言的面向对象编程
  • 常用的数据引擎及其特点
  • 51c大模型~合集102
  • sunrays-framework(太阳射线框架搭建)
  • 自然灾害事件复盘分析的思考框架
  • SpringBoot操作spark处理hdfs文件
  • 机器学习之随机森林算法实现和特征重要性排名可视化
  • B树及其Java实现详解
  • 《Spring Framework实战》7:4.1.2.容器概述
  • 【Rust自学】11.1. 编写和运行测试
  • 如何使用vue引入three.js
  • 人工智能的发展领域之GPU加速计算的应用概述、架构介绍与教学过程
  • 7ZIP 常见使用问题解决办法
  • B+树的原理及实现
  • SpringBoot日常:集成Kafka
  • Python —— 常用的字符串方法
  • JavaSE
  • UnityRenderStreaming使用记录(五)
  • 本地缓存:Guava Cache
  • Ubuntu平台虚拟机软件学习笔记
  • Linux驱动学习之第二个驱动程序(LED点亮关闭驱动程序-分层设计思想,使其能适应不同的板子-驱动程序模块为多个源文件怎么写Makefile)
  • 【深度学习】布匹寻边:抓边误差小于5px【附完整链接】
  • 【vue3封装element-plus的反馈组件el-drawer、el-dialog】
  • docker搭建atlassian-confluence:7.2.0
  • XS5037C一款应用于专业安防摄像机的图像信号处理芯片,支持MIPI和 DVP 接口,内置高性能ISP处理器,支持3D降噪和数字宽动态