linux日志轮转工具logrotate

news2024/10/6 18:07:22

目录

一、日志轮转工具的由来

二、如何去使用logrotate工具

2.1 使用cron驱动logrotate

2.2 使用systemd的timer驱动logrotate

三、logrotate命令的子命令解析

四、logrotate的配置

4.1 配置文件的位置

4.2 配置项的具体含义


一、日志轮转工具的由来

        在Linux环境中能够帮助我们分析问题蛛丝马迹的有效办法之一便是日志,为了节省空间和方便整理,可以将日志文件按时间或大小分成多份,删除时间久远的日志文件,这就是通常说的日志滚动(log rotation)

        logrotate是由尤金·克里利(Eugene Eric Kim)发明的。尤金·克里利在1996年以自己的名义发布了这个工具,以解决当时在管理大量系统日志时遇到的问题。在那时,UNIX系统并不像现在这样有丰富的日志管理工具,因此logrotate的出现填补了这一空白。

        在linux中日志通常是被syslog进行管理的在/var/log下就是我们的系统日志和一部分应用日志

  • /var/log/messages:该文件包含了系统消息,如内核日志、系统守护进程日志等。
  • /var/log/auth.log:该文件包含了用户登录和验证相关的信息。
  • /var/log/syslog:该文件包含了系统所有的日志消息。
  • /var/log/kern.log:该文件包含了内核日志消息。
  • /var/log/cron.log:该文件包含了cron定时任务执行时的日志信息。
  • /var/log/boot.log:该文件包含了系统启动时的日志信息。
  • /var/log/secure:该文件包含了与安全相关的信息,如SSH登录尝试、SELinux相关的消息等。
  • /var/log/maillog:该文件包含了邮件系统的日志信息。

。。。。。。

上面仅仅是一部分实际上它可能是这样的

        当然这里是已经被logrotate进行管理过的,可以看到他有很多的久日志被切分并压缩了。如果没有这个工具各种日志都要我们手动去切分压缩并且删掉久的,系统的容量和复杂度提升后这个工作甚至可能需要一个团队去管理,很大程度上的浪费了人力。

二、如何去使用logrotate工具

2.1 使用cron驱动logrotate

        这是一个linux各大发行版几乎都内置了的工具,syslog进行日志收集、分类、定级、转存等,logrotate去对收集好的文件进行配置比对并执行设定程序。

        在老版本的ubuntu中logrotate是使用cron进行管理的,需要什么样的粒度就在哪里配置,最大误差不超过45min。一般都是5min左右。

比如配置成一天轮转一次

 

这个脚本的主要工作流程是这样的:

  1. 切换到/var/lib/logrotate目录
  2. 如果status文件不存在,就创建一个新的status文件
  3. 从status文件中读取第一行,并将其写入到一个新的文件status.clean中
  4. 使用sed命令删除status文件中所有的双引号,然后遍历每一行,如果日志文件存在,就将日志文件名和日期写入到status.clean文件中
  5. 最后将status.clean文件重命名为status文件
  6. 检查/usr/sbin/logrotate是否存在并可执行,如果不是,就退出脚本
  7. 如果是,就执行/usr/sbin/logrotate /etc/logrotate.conf命令,按照/etc/logrotate.conf文件中的规则来管理日志文件

        cron.d下就是cron本身的配置了同级还有哥crontab里面是对月日年的实现进行定义,在systrmd架构下cron有的是借助systemd的timer机制实现的,有的是两个都保留了。在不同的发行版中有所不同。具体的感觉不是很稳定随着systemd的成熟可能cron会废弃也不一定。但是一个是内核层的一个是系统层的。各种观点意见比较多。选择一个好用的就行。

2.2 使用systemd的timer驱动logrotate

        既然都说到了systemd,那就来看看systemd是怎么配置的吧。

这里要说明一下ubuntu18.04用的是cron进行管理。

20.04版本是两个都用了。这个版本systemd的配置优先级高于cron,但是systemd默认不配置。

22.04用的是systemd就是我截图的样子。

20版本木有咋办没关系,直接手动创建这俩文件然后按照上面那样配置就行。

        如果需要改时间的话改【timer】那里,如果粒度是小时就不需要配置1h那个子项了,timer的粒度好像是1秒。但是logrotate最小只能是1h而且不能配置子项意味着只能整点轮转。配置成天的话可以选择在一天的哪个时间轮转,也可以配置几天轮转一次更大粒度也可设置更多子项。

        这个的机制其实就是定时器到时间了去执行logrotate这个可执行文件,并且按照我们的配置文件去执行。所以如果你想更快的话可以自己写进程到时间了去执行。但是其实这个工具的轮转和压缩耗时还是挺久的有些配置在文件超大的情况下耗时可能会高达分钟级别,这在嵌入式系统中绝对是不行的,会严重影响业务效率。这时候可以使用内核亲和性对进程排组划分使用核心。当然只有多核cpu可以这样,单核就木有办法啦,只能挺着。这里也有坑需要考虑多级缓存和多核心共用缓存的问题。比较麻烦。特殊项目特殊对待。学会基础知识,实际运用时还是要灵活多变的。

三、logrotate命令的子命令解析

        logrotate命令用于对系统日志进行轮转、压缩和删除,也可以将日志发送到指定邮箱。它允许自动旋转、压缩、删除和邮寄日志文件,可以设置日志文件的保留周期,如每日、每周、每月处理,也能在文件太大时立即处理。每个日志文件都可被设置成每日,每周或每月处理,也能在文件太大时立即处理。

        使用logrotate指令时,必须自行编辑指定配置文件,预设的配置文件存放在/etc/logrotate.conf文件中。语法为logrotate(选项)(参数),常用选项包括:

  • -?--help:在线帮助;
  • -d--debug:详细显示指令执行过程,便于排错或了解程序执行的情况;
  • -f--force:强行启动记录文件维护操作,纵使logrotate指令认为没有需要亦然;
  • -s<状态文件>--state=<状态文件>:使用指定的状态文件;
  • -v--version:显示指令执行过程;
  • -usage:显示指令基本用法。

-d时不会实际执行,-f时会不按照配置的那样即便你只有1个字节的日志也会轮转。

四、logrotate的配置

4.1 配置文件的位置

这里是整体的配置,一般在logrotate.d目录下还有针对各个程序的配置

系统日志一般被syslog管理,我们想要自定义一些服务最好也交给syslog可靠且方便

        默认状态下主要是两类配置,系统日志和syslog本身的配置。其实这个种类是可以增加的,只要这类日志需要的管理方式一样就可以路径加具体配置的方式写入文件。当然也可以在logrotate.d目录下新建一个文件来专门管理你自己设置的日志规则。

        

4.2 配置项的具体含义

  1. dailyweeklymonthly, 或者 yearly: 这些关键词定义了日志文件的轮转周期。例如,daily表示每天轮转一次,weekly表示每周轮转一次,monthly表示每月轮转一次,而yearly则表示每年轮转一次。
  2. compress: 这个关键词表示是否要压缩旧的日志文件。使用gzip或bzip2等压缩工具进行压缩。
  3. delaycompress: 如果设置了这个参数则logrotate会延迟压缩上一次的日志文件,直到下一次的日志轮转。
  4. missingok: 如果设置了泽哥参数则当logrotate试图处理的日志文件丢失时,它将不会产生错误消息。
  5. notifempty: 如果设置了这个参数则当日志文件为空时,logrotate将不会进行轮转。
  6. olddir: 这个指令定义了旧日志文件的存放位置。
  7. sharedscripts: 如果设置为true,则所有的日志文件将使用相同的postrotate脚本。
  8. postrotate: 这个指令定义了在日志文件轮转之后要执行的命令。
  9. prerotate: 这个指令定义了在日志文件轮转之前要执行的命令。
  10. size: 这个指令定义了日志文件的最大大小。当日志文件达到这个大小时,logrotate会进行轮转。
  11. create: 这个指令定义了在处理日志文件之前要创建的新文件。
  12. dateext: 如果设置这个参数则在轮转时,新的日志文件名将包含当前日期。
  13. dateformat -%Y%m%d-%s这个参数要跟在上个参数后面表示日期的格式,目前最多支持年月日秒格式。
  14. mail address : 这个参数可以指定一个邮箱地址将轮转后的文件发送到指定邮箱。
  15. copytruncate:这个参数会在不改变inode的情况下完成轮转后面细说。
  16. create:指定创建文件的权限所有组和所有者。

        这里有个要注意的点就是15这个参数,因为有些日志不支持输出至新inode所以只能保留原来的文件将之前日志文件复制一份出来。这就有个问题,在复制的过程中,如果日志的数量过高会丢失这段时间的日志。但是有些软件不支持所以推出了这个功能,如果不配置这个参数的话就是将原来的日志文件改个名字,新创建一个再去通知写日志的进程新的文件inode这样不会丢失文件。缺点是不是所有软件都支持向新inode写入日志。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1001676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录算法训练营第48天 | ● 198.打家劫舍 ● 213.打家劫舍II ● 337.打家劫舍III

文章目录 前言一、198.打家劫舍二、213.打家劫舍II三、337.打家劫舍III总结 前言 dp[]; 一、198.打家劫舍 仔细一想&#xff0c;当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了。 动规五部曲分析如下&#xff1a; 确定dp数组&#xff08;dp table&#xff09;以及下…

【Java|golang】210. 课程表 II---拓扑排序

一、拓扑排序的定义&#xff1a; 先引用一段百度百科上对于拓扑排序的定义&#xff1a; 对一个有向无环图 ( Directed Acyclic Graph 简称 DAG ) G 进行拓扑排序&#xff0c;是将 G 中所有顶点排成一个线性序列&#xff0c;使得图中任意一对顶点 u 和 v &#xff0c;若边 <…

Mybatis-plus的QueryWrapper的函数,常见方法

获取id 有时候我们新建一条数据的时候要生成一个新的id&#xff0c;我们可以通过下面的类获取 IdWorker.getId()mybatis-plus同时存在and和or查询 LambdaQueryWrapper<House> queryWrapper new QueryWrapper<House>().lambda(); queryWrapper.eq(House::getTena…

安果相亲-找到心仪的另一半 一个安卓免费找对象软件推荐

安果相亲&#xff1a;全国范围内的真实恋爱相亲平台&#xff01; 致力于帮助用户寻找真实恋爱&#xff0c;我们的实名认证机制确 保用户信息的真实性。汇集了高学历、经济稳定、丰富生活经验的优质单身男女&#xff0c;都在这里真诚地等待那个对的人。每个手机只能注册一个账户…

数据结构:线性表(队列实现)

1. 队列的概念及结构 队列:只允许在一端进行插入数据操作,在另一端进行删除操作的特殊线性表,队列具有先进先出(FIFO)的特性. 进行插入操作的一端称为队尾;进行删除操作的一端叫做队头 队列应用于 解决公平性排队(抽号机)广度优先遍历(BFS) 2. 队列的定义 和栈一样,队列也可…

【知网检索】第三届教育,语言与艺术国际学术会议(ICELA 2023)

第三届教育&#xff0c;语言与艺术国际学术会议(ICELA 2023) The 3rd International Conference on Education, Language and Art 第三届教育&#xff0c;语言与艺术国际学术会议&#xff08;ICELA 2023&#xff09;将于2023年11月17-19日在中国北京召开。会议主要围绕会议主…

电力系统知识预备及学习方向

由于电源点与负荷中心多数处于不同地区&#xff0c;也无法大量储存&#xff0c;故其生产、输送、分配和消费都在同一时间内完成&#xff0c;并在同一地域内有机地组成一个整体&#xff0c;电能生产必须时刻保持与消费平衡。因此&#xff0c;电能的集中开发与分散使用&#xff0…

explainerdashboard,一个神奇的 python 库

今天给大家分享一个神奇的 python 库&#xff0c;explainerdashboard。 https://github.com/oegedijk/explainerdashboard explainerdashboard 是一种用户友好的工具&#xff0c;可以简化复杂的机器学习模型&#xff0c;解释&#xff08;与 scikit-learn 兼容&#xff09;机器…

Bodhi Linux 7.0发布:全新亮点抢先看

导读我们非常高兴地宣布Bodhi Linux 7.0的发布&#xff0c;这是一个小型开发团队经过数月的专注开发所取得的成果。从性能增强到尖端更新&#xff0c;让我们深入了解这个版本&#xff0c;看看它为那些寻求轻量级Linux桌面体验的用户带来了什么新特性。 Bodhi Linux 7.0桌面 Bo…

12.(Python数模)(相关性分析一)相关系数矩阵

相关系数矩阵 相关系数矩阵是用于衡量多个变量之间关系强度和方向的统计工具。它是一个对称矩阵&#xff0c;其中每个元素表示对应变量之间的相关系数。 要计算相关系数矩阵&#xff0c;首先需要计算每对变量之间的相关系数。常用的相关系数包括皮尔逊相关系数和斯皮尔曼相关…

第32章 Linux内核打印实验

本手册的实验都是在buildroot系统上完成的&#xff0c;由于buildroot系统已经设置了相应的打印等级&#xff0c;所以驱动的相关打印都能正常显示在串口终端上&#xff0c;如果将实验系统换成了ubuntu&#xff0c;然后加载同样的驱动&#xff0c;会发现打印信息不见了&#xff0…

PBR纹理的10种贴图

PBR 是基于物理的渲染的首字母缩写。它试图通过模拟材料如何吸收和反射光&#xff0c;以模仿现实世界中的光流的方式产生视觉效果。最近的游戏引擎由于其逼真的效果而越来越多地使用 PBR 纹理。对于实时渲染&#xff0c;它们被认为是真实世界场景的最佳近似值。 推荐&#xff…

极星 4:一辆不需要宣传就自带美学的车

当市面上的新车都开始逐步走向更多的功能、更繁琐的设计的时候&#xff0c;极星更像一个独行的人&#xff0c;走了一条跟其他车企大相径庭的道路&#xff0c;带给我们对于同一个世界不同的视图。 不张扬、够简洁&#xff0c;从不炫耀自己但又蕴含着大的智慧&#xff0c;如夜空中…

Python深度学习-Keras》精华笔记4:解决深度学习回归问题

公众号&#xff1a;尤而小屋作者&#xff1a;Peter编辑&#xff1a;Peter 持续更新《Python深度学习》一书的精华内容&#xff0c;仅作为学习笔记分享。 本文是第4篇&#xff1a;基于Keras解决深度学习中的回归问题。 Keras内置数据集 回归问题中使用的是内置的波士顿房价数据…

JavaScript中的事件捕获(event capturing)和事件冒泡(event bubbling)

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 事件捕获和事件冒泡⭐ 事件捕获&#xff08;Event Capturing&#xff09;示例&#xff1a; ⭐ 事件冒泡&#xff08;Event Bubbling&#xff09;示例&#xff1a; ⭐ 应用场景⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开…

苹果电脑版虚拟机推荐 VMware Fusion Pro for mac(vm虚拟机)

VMware Fusion Pro是一款功能强大的虚拟化软件&#xff0c;专为Mac用户设计。它允许用户在Mac上创建、运行和管理虚拟机&#xff0c;以便同时运行多个操作系统和应用程序。 以下是VMware Fusion Pro的一些主要特点和功能&#xff1a; 1. 多操作系统支持&#xff1a;VMware Fu…

CocosCreator3.6.2图片导入到工程,没办法拖动到场景中

解决方案&#xff1a;将资源的属性类型由texture调整为sprite-frame

字节、华为、美团软件测试面试真题(超详细~)

前言 最近已经算是秋招了&#xff0c;所以最近博主会努力给大家搜集整理一些各大公司测试岗测开岗的面经&#xff0c;希望能帮助到大家更好的入职想去的公司哦&#xff0c;关注我&#xff0c;一个每日分享软件测试知识的日更博主。 同时&#xff0c;我也准备了一份软件测试面…

Git 概述命令、idea中的使用

目录 Git概述 Git代码托管服务 Git常用命令 Git 全局设置 获取 Git 仓库 ​编辑Git 工作区中文件的状态 本地仓库操作 远程仓库操作 ​编辑分支操作 标签操作 在IDEA中使用Git 1.获取Git仓库 .gitignore 表示忽略 2.本地仓库操作 3.远程仓库操作 4.分支操作 Git是…