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

Logrotate:Linux系统日志轮转和管理的实用指南

Logrotate是Linux系统中用于自动化管理日志文件的强大工具,它能够高效、安全地轮转、压缩和清理日志文件,从而有效控制日志文件大小,节省磁盘空间,并显著提升系统可维护性和安全性。本文档将提供Logrotate的实用指南,涵盖其核心概念、配置方法、最佳实践、常见问题排查以及使用案例。

一、核心概念

Logrotate的核心功能是根据预定义的规则自动轮转日志文件。它通过重命名或复制现有日志文件来创建归档,然后生成新的空日志文件,以便应用程序继续写入。  这避免了直接修改正在使用的日志文件,从而最大限度地减少数据丢失和服务中断的风险。

Logrotate主要依赖于两个关键机制:

  • inode:  Linux文件系统使用inode号来标识文件,而不是文件名。Logrotate利用这一特性,通过重命名文件来实现轮转,而不会影响应用程序通过inode号对文件的访问。

  • 信号处理:  许多应用程序支持信号处理机制,Logrotate可以通过发送信号(例如kill -HUP)通知应用程序重新打开日志文件,从而开始写入新的日志文件。

二、配置文件详解

Logrotate的配置信息主要位于:

  • /etc/logrotate.conf:  全局配置文件,包含默认的轮转频率、轮转次数、压缩方式等全局设置。这些设置可以被/etc/logrotate.d/目录下的配置文件覆盖。

  • /etc/logrotate.d/*.conf:  各个应用程序的配置文件,每个文件通常对应一个或多个日志文件,实现个性化配置。Logrotate会依次读取该目录下的所有配置文件。

关键配置指令:

指令说明示例
daily, weekly, monthly, yearly日志轮转频率daily
rotate count保留的日志文件数量(包括当前文件),0表示不保留。rotate 7
compress使用gzip压缩旧日志文件compress
delaycompress延迟到下一次轮转时再压缩delaycompress
create mode owner group创建新日志文件,指定权限(八进制)、所有者和所属组create 640 root root
copytruncate复制日志文件内容后清空原文件,可能存在极少量数据丢失的风险。copytruncate
missingok如果日志文件不存在,则忽略该日志的警告信息missingok
postrotate/endscript在日志轮转后执行的命令,常用于重启服务(例如kill -HUP)。postrotate killall -HUP nginx endscript
size size, minsize size按日志大小轮转,单位为B, K, M, G。size 100M
dateext使用日期作为日志轮转文件的后缀dateext
dateformat自定义日期格式 (与dateext配合使用)dateformat .%Y%m%d
su user group指定以特定用户和组的权限执行轮转操作su nginx nginx
sharedscripts多个日志文件共享同一个postrotate脚本sharedscripts

三、Logrotate命令行工具

Logrotate命令可以手动运行,进行日志轮转操作:

logrotate [选项] 配置文件或目录

常用选项:

  • -d, --debug:  调试模式,模拟执行,不实际操作。

  • -f, --force:  强制执行,即使不满足条件。

  • -v, --verbose:  详细模式,显示更多信息。

四、使用案例

案例1:Nginx日志轮转

/var/log/nginx/*.log {dailyrotate 7compressdelaycompressmissingoknotifemptydateextcreate 640 nginx nginxsharedscriptspostrotate/usr/sbin/nginx -s reloadendscript
}

此配置每天轮转Nginx日志,保留7天,压缩并延迟压缩,忽略丢失文件错误,空文件不轮转,使用日期后缀,并使用nginx用户和组创建新日志文件。  postrotate脚本用于重新加载Nginx配置,实现平滑重启。

案例2:Syslog日志轮转

/var/log/syslog {dailyrotate 7compresscopytruncatecreate 640 root syslogpostrotate/usr/sbin/systemctl reload rsyslogendscript
}

此配置每天轮转syslog日志,使用copytruncate策略,因为rsyslog可能不支持HUP信号平滑重启。

五、Logrotate运维流程及最佳实践

运维流程:

  1. 配置:  编写/etc/logrotate.d/*.conf配置文件,定义日志轮转策略。

  2. 测试: 使用logrotate -d /etc/logrotate.d/your_config测试配置文件。

  3. 部署:  修改crontab或systemd timer配置,或手动运行logrotate命令。

  4. 监控: 定期检查/var/lib/logrotate/logrotate.status文件,以及系统日志,查看轮转状态和错误信息。

最佳实践:

  • 优先使用create策略,保证数据完整性。

  • 合理配置轮转频率和次数,平衡磁盘空间和日志分析需求。

  • 使用压缩功能,节省存储空间。

  • 使用postrotate脚本重启相关服务,确保应用使用新的日志文件。

  • 定期检查状态文件,及时发现问题。

  • 使用debug模式测试配置,避免错误。

  • 监控日志文件大小,及时发现异常增长。

  • 考虑使用sharedscripts提高效率。

  • 对于敏感日志,考虑使用chattr +i保护文件完整性。

六、常见问题排查

  • 日志未轮转: 检查配置文件语法、crontab设置、Logrotate服务状态、日志文件大小和权限。

  • 日志丢失: 检查copytruncate策略,考虑使用create策略,检查磁盘空间。

  • 服务未重启: 检查postrotate脚本配置,服务是否支持相应信号。

  • 权限问题: 确保Logrotate进程拥有足够权限。

七、流程图

图片

通过合理配置和运维管理,Logrotate可以有效地管理Linux系统日志,确保系统稳定运行并简化日志分析。

相关文章:

Logrotate:Linux系统日志轮转和管理的实用指南

Logrotate是Linux系统中用于自动化管理日志文件的强大工具,它能够高效、安全地轮转、压缩和清理日志文件,从而有效控制日志文件大小,节省磁盘空间,并显著提升系统可维护性和安全性。本文档将提供Logrotate的实用指南,涵…...

八股面试3(自用)

基本数据类型和引用数据类型区别 java中数据类型分为基本数据类型和引用数据类型 8大基本数据类型 1.整数:int,long,short,byte 2.浮点类型:float,double 3.字符类型:char 4.布尔类型&…...

【微服务】springboot3 集成 Flink CDC 1.17 实现mysql数据同步

目录 一、前言 二、常用的数据同步解决方案 2.1 为什么需要数据同步 2.2 常用的数据同步方案 2.2.1 Debezium 2.2.2 DataX 2.2.3 Canal 2.2.4 Sqoop 2.2.5 Kettle 2.2.6 Flink CDC 三、Flink CDC介绍 3.1 Flink CDC 概述 3.1.1 Flink CDC 工作原理 3.2 Flink CDC…...

【Android】浅析OkHttp(1)

【Android】浅析OkHttp(1) OkHttp 是一个高效、轻量级的 HTTP 客户端库,主要用于 Android 和 Java 应用开发。它不仅支持同步和异步的 HTTP 请求,还支持许多高级功能,如连接池、透明的 GZIP 压缩、响应缓存、WebSocke…...

Generate-on-Graph

目录 摘要1 引言2 相关工作4 不完整知识图谱问答(IKGQA)4.1 任务介绍4.2 数据集构建 5 Generate-on-Graph (GoG) 摘要 为了解决大型语言模型(LLMs)在知识不足和幻觉问题上的困扰,众多研究探索了将LLMs与知识图谱&…...

学习笔记——交换——STP(生成树)简介

一、技术背景 1、生成树技术背景 交换机单线路组网,存在单点故障(上左图),上行线路及设备都不具备冗余性,一旦链路或上行设备发生故障,业务将会中断。 为了使得网络更加健壮、更具有冗余性,将拓扑修改为(上右图)接入…...

【Linux从入门到精通一】操作系统概述与Linux初识

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119qq.com] &#x1f4f1…...

Git 深度解析 —— 从基础到进阶

目录 1. Git 基础概念 1.1 版本控制 (Version Control) 1.2 分布式版本控制 (Distributed Version Control) 1.3 核心概念 1.4 Git 工作流程 2. Git 常用命令 2.1 初始化仓库 2.2 添加文件 2.3 提交修改 2.4 查看状态 2.5 查看历史记录 2.6 切换分支 2.7 创建分支…...

PCIE-变量总结

1.changed_speed_recovery: 表示链路双方已经将链路速率协商为更高的速率。 在configuration.complete状态下此变量会reset成0; 当前状态在recovery.rcvrlock状态: 在经过24ms的timeout之后,任何一个已经configured的lane&…...

【iOS】AFNetworing初步学习

文章目录 前言OC的网络请求步骤单例封装网络请求使用AFNetworking进行网络请求 前言 在暑假,学习了一些简单的网络请求的内容,本周学习了AFNetworking的基本使用,通过本篇博客进行一个简单的介绍。 OC的网络请求步骤 简单的网络请求主要有…...

【数据结构】堆的创建

Heap.h #include<stdio.h> #include<stdlib.h> #include<stdbool.h> #include<assert.h>//创建堆结构体 typedef int HPDateType; typedef struct Heap {HPDateType* a;int size;int capacity; }HP;//堆的初始化 void HPInit(HP* php);//堆的销毁 voi…...

Linux下Git操作

一、基本命令 1、创建 git 目录&#xff08;工作区&#xff09; mkdir gitcode 2、创建本地仓库&#xff0c;生成 .git 隐藏目录 git init 3、设置配置项 git config user.name "xxx" git config user.email "....." 4、查看配置项 git config -l …...

缺失d3dx9_42.dll如何修复,d3dx9_42.dll故障的6种修复方法分享

在电脑使用过程中&#xff0c;许多游戏玩家和软件用户可能都遇到过d3dx9_42.dll丢失的问题。这个问题会导致游戏或软件无法正常运行&#xff0c;给用户带来诸多不便。本文将详细解读d3dx9_42.dll丢失的原因、影响及解决方案&#xff0c;帮助大家顺利解决这个问题。 一、d3dx9_4…...

深入理解Android WebView的加载流程与事件回调

文章目录 一、WebView 加载流程时序图二、WebView 加载流程回调函数说明三、AwContents3.1 主要功能和职责3.2 架构和实现3.3 使用场景 四、利用WebView回调函数检测白屏4.1 使用onPageStarted和onPageFinished检测加载时间4.2 利用onReceivedError和onReceivedHttpError检测加…...

机器视觉相机自动对焦算法

第一&#xff0c;Brenner梯度法、 第二&#xff0c;Tenegrad梯度法、 第三&#xff0c;laplace梯度法、 第四&#xff0c;方差法、 第五&#xff0c;能量梯度法。 此实例通过使用Halcon实现5种清晰度算法函数&#xff1a; 1. 方差算法函数&#xff1b; 2. 拉普拉斯能量函数…...

StarTowerChain:开启去中心化创新篇章

官网&#xff1a; www.startower.fr 在当今创新驱动的时代&#xff0c;StarTowerChain 以其独特的去中心化创新模式&#xff0c;为我们带来了新的希望和机遇。去中心化&#xff0c;这个充满活力与创造力的理念&#xff0c;正引领着我们走向未来的创新之路。 StarTowerChain …...

SpringCloudStream使用StreamBridge实现延时队列

利用RabbitMQ实现消息的延迟队列 一、安装RabbitMQ 1、安装rabbitmq 安装可以看https://blog.csdn.net/qq_38618691/article/details/118223851,进行安装。 2、安装插件 安装完毕后,exchange是不支持延迟类型的,需要手动安装插件,需要和安装的rabbitmq版本一致 https:…...

MATLAB中head函数用法

目录 语法 说明 示例 显示矩阵的前八行 显示表的前三行 返回表的前八行 head函数的功能是获取数组或表的顶行。 语法 head(A) head(A,k) B head(___) 说明 head(A) 在命令行窗口中显示数组、表或时间表 A 的前八行&#xff0c;但不存储值。 head(A,k) 显示 A 的前 k …...

golang 基本数据类型

1. go语言的数据类型简介 golang的数据类型分为两大类&#xff0c;一类是基本数据类型和符合数据类型&#xff1b; 按照传递的内容分&#xff1a;传递本身数据和传递地址&#xff1b; golang和java很相似&#xff0c;都是值传递&#xff0c;不过分为传递的值和传递的地址&a…...

各种查询sql介绍

1. 关联查询&#xff08;JOIN&#xff09; 关联查询用于从多个表中检索数据。它基于两个或多个表之间的共同字段&#xff08;通常是主键和外键&#xff09;来组合数据。 内连接&#xff08;INNER JOIN&#xff09;&#xff1a; sql SELECT a.name, b.order_date FROM custome…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决

Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中&#xff0c;新增了一个本地验证码接口 /code&#xff0c;使用函数式路由&#xff08;RouterFunction&#xff09;和 Hutool 的 Circle…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...