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运维流程及最佳实践
运维流程:
-
配置: 编写
/etc/logrotate.d/*.conf
配置文件,定义日志轮转策略。 -
测试: 使用
logrotate -d /etc/logrotate.d/your_config
测试配置文件。 -
部署: 修改crontab或systemd timer配置,或手动运行
logrotate
命令。 -
监控: 定期检查
/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] 📱…...

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 目录(工作区) mkdir gitcode 2、创建本地仓库,生成 .git 隐藏目录 git init 3、设置配置项 git config user.name "xxx" git config user.email "....." 4、查看配置项 git config -l …...

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

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

机器视觉相机自动对焦算法
第一,Brenner梯度法、 第二,Tenegrad梯度法、 第三,laplace梯度法、 第四,方差法、 第五,能量梯度法。 此实例通过使用Halcon实现5种清晰度算法函数: 1. 方差算法函数; 2. 拉普拉斯能量函数…...

StarTowerChain:开启去中心化创新篇章
官网: www.startower.fr 在当今创新驱动的时代,StarTowerChain 以其独特的去中心化创新模式,为我们带来了新的希望和机遇。去中心化,这个充满活力与创造力的理念,正引领着我们走向未来的创新之路。 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 的前八行,但不存储值。 head(A,k) 显示 A 的前 k …...

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

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

Guava防击穿回源-异步防击穿
异步防击穿策略 在高并发环境下,缓存击穿(Cache Stampede)是一种常见的问题。当缓存中的热点数据失效或未命中时,大量并发请求同时访问后端数据源(如数据库),可能导致后端系统压力骤增,甚至出现崩溃。为了有效防止这种情况,可以利用Guava提供的异步缓存加载机制(类似…...

人工智能正在扼杀云计算的可持续性
可持续性曾是公共云计算中备受推崇的优势。企业和云提供商大肆宣扬他们的绿色计划,推广采用可再生能源的数据中心,以减少碳足迹。 近几个月来,这个话题已悄然淡出人们的视线。罪魁祸首是什么?对人工智能功能的无限需求正在推动云…...

C# 条形码、二维码标签打印程序
1、条码标答打印主界面 2、打印设置 3、生成QR代码 private void GetBarcode_T(string lr) { QRCodeEncoder qrCodeEncoder = new QRCodeEncoder();//创建一个对象 qrCodeEncoder.QRCodeEncodeMode = QRCodeEncoder.ENCODE_MODE.BYTE; //设置编码测量…...

嵌入式入门学习——6Protues点亮数码管,认识位码和段码,分辨共阴还是共阳(数字时钟第一步)
0 系列文章入口 嵌入式入门学习——0快速入门,Let‘s Do It! 首先新建基于Arduino UNO的protues工程,见本系列第3篇文章 1 点“P”按钮找器件 2 输入“seg”或“digit”查找数码管器件 3 找到我们想要的6位7段数码管 4如图A、B…DP都是段码…...

poisson过程——随机模拟(Python和R实现)
Python实现 exponential()使用,自动poisson过程实现。 import numpy as np import matplotlib.pyplot as plt# Parameters lambda_rate 5 # rate parameter (events per time unit) T 10 # total time# Generate Poisson process times np.random.exponential(…...

100 种下划线 / 覆盖层动画 | 终极 CSS(层叠样式表)集合
还在为你的菜单项和链接寻找动画效果而感到疲惫吗? 不用再找了!这里列出了 100 多种不同的动画。从简单的到更复杂的,你肯定能找到自己想要的。 无需 SVG(可缩放矢量图形),无需 JavaScript(脚…...

华为ICT大赛2024-2025网络赛道考试分析
华为ICT大赛2024-2025正在报名中,网络赛道的同学如何备考,了解考试内容呢? 一、考试概况 华为ICT大赛分为4个赛段,分别为省赛初赛、省赛复赛、中国总决赛,全球总决赛。其中对应的能力级别分别如下: 省赛…...

linux 效率化 - 输入法 - fcitx5
安装 Fcitx5 1. 卸载 ibus 框架 由于 ibus 和 fcitx 可能会冲突,先卸载 ibus(暂未确认原因) sudo apt remove --purge ibus2. 安装 fcitx5 输入法框架 sudo apt update sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-frontend-gtk…...

YOLOv11改进策略【卷积层】| 替换骨干网络 CVPR-2024 RepViT 轻量级的Vision Transformers架构
一、本文介绍 本文记录的是基于RepVit的YOLOv11轻量化改进方法研究。RepVit的网络结构借鉴ViT的设计理念,通过分离的token mixe和channel mixer减少推理时的计算和内存成本,同时减少扩展比率并增加宽度,降低延迟,并通过加倍通道来弥补参数大幅减少的问题,提高了准确性。本…...

一天认识一个硬件之路由器
今天来给大家分享一下路由器的知识,先来说一下什么是路由器,路由器是一种计算机网络设备,它的主要作用是在不同的网络之间转发数据包,实现数据的传输和共享,介绍完了什么是路由器,再来介绍一下路由器的定义…...