收藏文章Linux工作记录

logrotate-Linux下的日志切割技术

2021-11-25  本文已影响0人  归源

什么是日志切割?

日志切割指的是当应用程序或操作系统的日志文件满足设定的触发条件,对其进行切割/分割处理。切割后的日志会在原有日志的基础上多出一个新的日志文件,且后续产生的日志也会被写入到新的日志文件中,直到下一次满足设定的触发条件时。

一般情况下,我们习惯于将各种应用程序(Web端程序、应用服务、数据库等)软件部署在 Linux操作系统上,但众多软件部署后运行时会产生对应的日志记录,以便于出现故障后能够及时排查问题原因。但久而久之,随着时间的推长,应用程序的日志文件可能会变得很庞杂,这对于运维、管理、故障排查等来说非常不方便,因此,及时对日志进行定期切割和清理时非常有必要的。

常用的日志切割方式:按时间按日志大小

按时间切割:在进行切割日志时,以时间为标准,日志出现的时间满足设定的时间阈值时,则进行日志切割。类似的典型用法有:/var/log/messages 日志即按每7天切割一次的规则进行日志切分。

按日志大小切割:在进行切割日志时,以日志大小为参考标准,日志的大小满足设定的大小时进行日志切割。一般应用程序的日志多使用容量进行切割,例如,jenkins

logrotate-日志轮转

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

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

logrotate 配置文件解析

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

[root@server ~]# cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

自定义logrotate配置

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

[root@server ~]# ls /etc/logrotate.d/
bootlog  chrony  firewalld  jenkins  syslog  wpa_supplicant  yum

倘若操作系统上新部署了一项应用程序,或需要对其他的日志文件配置切割规则,你可以自定义 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

}

logrotate 提供了一些命令行参数,用来测试并查看配置及运行结果

# 测试配置文件的语法是否合法
[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

参数释义

压缩
归档方式
归档路径
归档删除
归档规则
日期格式
轮转规则
邮件配置
归档时执行的脚本
上一篇下一篇

猜你喜欢

热点阅读