linux下如何使用logrotate进行日志的切分

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: linux下如何使用logrotate进行日志的切分

1、logrotae是什么

Linux 操作系统上切割日志可以通过 logrotate 来实现。

相比其他日志切割软件来看,使用 logrotate 有以下优点:

  • logrotate是Linux操作系统上自带的一款开源的日志切割软件,因此你无需安装
  • logrotate 自身已经集成进操作系统的定时任务中,因此你无需再配置定时任务

  • logrotate 自身支持日志压缩

  • logrotate 的全局配置文件为 /etc/logrotate.conf

2、使用logrotae定时进行日志转储

  • linux 操作上的一些系统服务默认已经配置了日志切割规则,可以通过查看 /etc/logrotate.d/ 目录下的文件来查看

  • 操作系统上新部署了一项应用程序,或需要对其他的日志文件配置切割规则,你可以自定义 logrotate 的配置文件使其生效。这里以 /var/log/audit/audit.log 日志为例

    [root@server ~]# cat /etc/logrotate.d/audit
    
    /var/log/audit/*.log {
         
    
        missingok           # 日志切割时缺少该日志不会报错
        weekly              # 每周切割一次
        rotate 10           # 切割后最多保留10个文件
        size +100M          # 当前日志容量超过100M时,立即进行日志切割
        compress            # 切割后的日志进行压缩
        dateext             # 切割后的日志以时间'年月日'为后缀
        notifempty          # 日志为空时不进行切割
        create 0600 root root       # 切割时创建一个新日志文件,模式为0600,日志属组为root root
    
    }
    

    参数释义

    压缩
    • compress:使用压缩,默认的压缩方式为 gzip
    • compresscmd:自定义压缩的命令,默认压缩方式为 gzip
    • uncompresscmd:自定义解压的命令,默认解压工具为 gunzip
    • compressext:压缩时使用后缀,默认 gzip 压缩格式下后缀为 .gz
    • compressoptions:压缩选项,默认使用 gzip;如果使用其他压缩选项,需要设置 compressoptions 与之匹配
    • delaycompress:延迟压缩,实际压缩生效的时间发生在下一次日志切割之时
    • nodelaycompress:不使用延迟压缩,即轮转时压缩(默认配置)
    • nocompress:不实用压缩
    归档方式
    • copy:轮转时复制完整的日志文件,常用来做当前日志文件的镜像备份。当指定 copy 选项时, create 选项会失效
    • copytruncate:轮转时复制完整的日志文件并清空原来的日志文件(相当于 echo > logfile),新写入的日志会继续往清空后的日志文件中写入。但在日志 copytruncate 的过程中写入的日志可能会丢失。当指定 copytruncate 选项时,create 选项会失效
    • nocopy:轮转时不会复制原日志文件
    • nocopytruncate:轮转时复制原日志文件后不会清空原日志文件的内容
    • create:轮转时创建一个新的日志文件,可以设置创建文件的权限、所有者、及属组
    • nocreate:轮转时不会创建新的日志文件
    • createolddir:轮转时如果指定的目录不存在,则会创建,支持设置目录的权限、所有者和属组
    • nocreateolddir:轮转时指定的目录不存在时不会进行创建
    归档路径
    • olddir directory:配置目录后,轮转后的日志会保存在指定的目录下
    • noolddir:轮转后的日志保存在日志原有的目录下
    归档删除
    • shred:删除日志时使用 shred -u(粉碎式删除) 的方式(默认关闭)
    • shredcycles count:删除日志前会先重写覆盖日志文件,达到设定的次数后才进行删除
    • noshred:删除日志时使用 unlink 的方式删除(还没搞懂这个删除逻辑)
    归档规则
    • hourly:每小时进行一次日志切割
    • daily:每天进行一次日志切割
    • weekly:每周进行一次日志切割
    • monthly:每月进行一次日志切割
    • yealy:每年进行一次日志切割
    • size:按日志大小进行切割
    • rotate count:日志轮转时保存的归档文件数量
    • start count:日志轮转时从指定的count开始,例如,start 9,则日志轮转后会跳过 0-8 生成 xxx.9 这样的日志,
    • maxage count:轮转后的日志超过设定的日期会被删除,只有被轮转的日志才会应用到此规则
    • maxsize size:设置maxsize后,如果被轮转的日志大小超过设置的 size,则会在设置的轮转时间(例如:weekly)之前进行日志轮转
    • minsize size:设置minsize后,如果被轮转的日志大小不满足设置的size,即便到了设置的轮转时间也不会触发日志轮转
    日期格式
    • dateext:切割后日志的后缀名以 "YYYYMMDD" 为格式
    • nodateext:轮转日志时不使用后缀名为日期的格式
    • dateformat:自定义日志后缀的时间格式,仅 %Y %m %d %H %s 可以被使用。 例如 dateformat %m/%d/%Y
    • dateyesterday:切割日志时使用昨天的时间而不是今天的时间
    • extension:日志文件在轮转后使用指定的 ext 扩展名。如果使用压缩,通常ext还会加上压缩文件的扩展名,通常是 .gz。例如,你有一个日志文件名为 mylog.foo,你可以通过 extension ext 将日志轮转为 mylog.1.foo.gz 而不是 mylog.foo.1.gz
    轮转规则
    • ifempty:日志为空时也会按照规则进行轮转
    • notifempty:日志为空时不进行轮转
    • missingok:轮转的日志不存在时,继续下一个日志的轮转,不会报错
    • nomissingok:轮式时日志不存在,会有报错提示 (默认配置)
    邮件配置
    • mail address:配置邮件地址后,会将轮转的日志信息发送到邮箱
    • nomail:不发送轮转的日志信息到任何邮箱 (默认配置)
    • mailfirst:配置邮箱后,轮转后将本次生成的日志文件发送到邮箱
    • maillast:配置邮箱后,将上一次轮转的日志文件发送到邮箱 (默认配置)
    归档时执行的脚本
    • include file_or_directory:轮转前会尝试读取 include 配置的文件或目录,如果配置的是目录,则目录下的所有文件都会被加载到轮转的配置中;但对于文件扩展名以 taboo 结尾的文件或配置路径为多个目录、管道等时,加载配置时会被忽略
    • prerotate/endscript:日志轮转前会执行自定义的命令(脚本)。通常,轮转的日志的完整路径会作为传入的第一个参数
    • postrotate/endscript:日志轮转后会执行自定义的命令(脚本)。通常,轮转的日志的完整路径会作为传入的第一个参数
    • firstaction/endscript:执行 prerotate/endscript 前且最少一个日志会被轮转时执行该语句,整个模式会作为第一个参数传递给该语句,当语句执行异常时,不会再向下执行
    • lastaction/endscript:执行 postrotate/endscript 前且最少一个已经被轮转后执行该语句,整个模式会作为第一个参数传递给该语句,当语句执行异常时,仅仅展示错误信息
    • preremove/endscript:仅仅当删除轮转过的日志前执行该语句。即将被删除的日志名会作为参数被传递进该语句
    • sharedscripts:共享模式。启用共享模式后,当 prerotatepostrotate 语句执行时匹配到多个日志时,prerotatepostrotate 语句仅仅只会执行一次。正常模式下,轮转时匹配到的每个日志文件都会单独执行一次 prerotatepostrotate 语句。
    • nosharedscripts:轮转时匹配到多个日志文件时,每个日志文件都会执行一次 prerotatepostrotate 语句。(默认配置)

3、进行配置的验证

# 测试配置文件的语法是否合法
[root@server ~]# logrotate --debug --force /etc/logrotate.d/audit
reading config file /etc/logrotate.d/audit
Allocating hash table for state file, size 15360 B

Handling 1 logs

rotating pattern: /var/log/audit/*.log  forced from command line (10 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/audit/audit.log
  log needs rotating
rotating log /var/log/audit/audit.log, log->rotateCount is 10
dateext suffix '-20211124'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding old rotated logs failed
fscreate context set to system_u:object_r:auditd_log_t:s0
renaming /var/log/audit/audit.log to /var/log/audit/audit.log-20211124
creating new /var/log/audit/audit.log mode = 0600 uid = 0 gid = 0
compressing log with: /bin/gzip

参考连接:https://www.cnblogs.com/uglyliu/p/13206868.html

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5天前
|
监控 网络协议 安全
Linux系统日志管理
Linux系统日志管理
21 3
|
17天前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
40 0
|
17天前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
33 0
|
2月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
110 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
2月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
2月前
|
监控 安全 Linux
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
|
2月前
|
Java Linux C++
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
|
2月前
|
存储 Linux 网络安全
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
|
12天前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
90 3
|
13天前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1576 12