linux切割日志spli,CentOS下的日志切割

在Linux下,日志会不停的增长,为了防止日志文件过大,导致我们无法在日志中快速找到想要的信息,我们会定时对日志文件进行切割。在这里我将使用logrotate切割日志。

(1).logrotate的配置文件

logrotate配置文件主要在两个地方:/etc/logrotate.conf以及/etc/logrotate.d/下的明细配置文件。

其中/etc/logrotate.conf文件是主配置文件,/etc/logrotate.d/下的明细配置文件都会被读入/etc/logrotate.conf进行执行,所以请注意这里还涉及到了公有变量和私有变量。

logrotate的执行是由crond服务来调用的,其脚本是/etc/cron.daily/logrotate,每天自动执行。我们可以看一下脚本具体内容:

1

2

3

4

5

6

7

8

9

[[email protected] ~]# cat /etc/cron.daily/logrotate

#!/bin/sh

/usr/sbin/logrotate -s /

var

/lib/logrotate/logrotate.status /etc/logrotate.conf

EXITVALUE=$?

if

[ $EXITVALUE != 0 ]; then

/usr/bin/logger -t logrotate

"ALERT exited abnormally with [$EXITVALUE]"

fi

exit 0

简单的说明下,就是/usr/sbin/logrotate工具调用了/var/lib/logrotate/logrotate.status和/etc/logrotate.conf两个文件。然后将执行的结果(就是那个$?,成功为0,不成功为非0)进行判断,非0时执行/usr/bin/logger命令。最后退出。

看完定时计划任务,我们再来看主配置文件/etc/logrotate.conf(也就是公有变量)。具体内容如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

[[email protected] ~]# grep -vE

"^$|^#"

/etc/logrotate.conf

weekly

//每周一次rotate(翻译是旋转,其实就是切割)

rotate 4

//保留4份切割文件,多余删除,不计算新建日志文件

create

//结束后创建一个新的空白日志文件

dateext

//用日期作为切切割文件的后缀

include /etc/logrotate.d

//将/etc/logrotate.d目录下的文件都加载进来(全都执行)

/

var

/log/wtmp {

//仅针对/var/log/wtmp文件

monthly

//每月执行一次

create 0664 root utmp

//结束后创建新的空白日志,权限0664,所有者root,所属组utmp

minsize 1M

//切割文件最少需要1M,否则不执行

rotate 1

//保留1份,多余删除,不计算新建日志文件

}

/

var

/log/btmp {

//仅针对/var/log/btmp

missingok

//丢失不报错

monthly

//每月执行一次

create 0600 root utmp

//结束后创建新的空白日志,权限0600,所有者root,所属组utmp

rotate 1

//保留1份,多余删除,不计算新建日志文件

}

配置文件参数说明:

missingok  日志切割期间产生错误将被忽略(如果日志丢失,不报错继续切割)

daily、weekly、monthly、yearly  每天、每周、每月、每年执行

create MODE OWNER GROUP  切割后指定创建新的空白文件的属性

nocreate  不建立新的日志文件

rotate N  保留N份,多余删除,不计算新建日志文件

dateext  用当前日期作为后缀命名格式(默认年月日)

dateformat .%s  配合dateext使用,紧跟在下一行出现,定义切割后的文件名,只支持%Y,%m,%d,%s

size/minsize  达到指定大小才会切割,默认单位bytes,还可以是KB和MB

compress  切割结束后,归档并使用gzip格式压缩

nocompress  解除compress参数

delaycompress  总是与compress参数一起使用,指示logrotate不要将最近的归档压缩,压缩将在下一次切割进行。

nodelaycompress  解除delaycompress参数

ifempty  即使日志为空,也执行切割

notifempty  如果日志为空,切割不执行

prerotate/endscript  在所有其他指令之前执行prerotate和endscript之间的命令。

postrotate/endscript  在所有其他指令完成后,postrotate和endscript之间的命令将被执行。

sharescripts  所有日志切割后统一执行一次脚本,如果没有配置该参数,则每个日志切割后都会执行一次脚本。

errors ADDRESS  切割时的错误信息发送到指定的Emial地址

mail ADDRESS  切割日志发送到指定的Email地址

nomail  切割日志不发送邮件

olddir DIRECTORY  切割后的日志文件放入指定目录,必须与当前日志处在同一文件系统

noolddir  切割后的日志文件与当前文件放在同一目录下

copytruncate  用于还在打开中的日志文件,把当前日志备份并截断;先拷贝后清空,可能丢失部分日志

nocopytruncate  备份日志文件,但不截断。

(2).查看上次切割日志时间

/var/lib/logrotate/logrotate.status中默认记录logrotate上次切割日志文件的时间

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

[[email protected] logrotate]# cat /

var

/lib/logrotate/logrotate.status

logrotate state -- version 2

"/var/log/yum.log"

2019-1-2-11:30:2

"/var/log/cups/page_log"

2018-11-1-10:0:0

"/var/log/cups/error_log"

2018-11-1-10:0:0

"/var/log/boot.log"

2019-4-16-11:37:1

"/var/log/cups/access_log"

2019-4-15-10:18:1

"/var/log/chrony/*.log"

2018-11-1-10:0:0

"/var/log/wtmp"

2018-11-1-10:0:0

"/var/log/spooler"

2019-4-15-10:18:1

"/var/log/btmp"

2019-4-8-15:13:1

"/var/log/iscsiuio.log"

2018-11-1-10:0:0

"/var/log/maillog"

2019-4-15-10:18:1

"/var/log/libvirt/libvirtd.log"

2018-11-1-10:0:0

"/var/log/libvirt/qemu/*.log"

2018-11-1-10:0:0

"/var/log/wpa_supplicant.log"

2018-11-1-10:0:0

"/var/log/secure"

2019-4-15-10:18:1

"/var/log/numad.log"

2018-11-1-10:0:0

"/var/log/ppp/connect-errors"

2018-11-1-10:0:0

"/var/log/messages"

2019-4-15-10:18:1

"/var/account/pacct"

2018-11-1-10:0:0

"/var/log/cron"

2019-4-15-10:18:1

(3).自定义日志切割

首先将sshd服务产生的日志自定义,作为实验目标

1

2

3

4

5

6

7

8

9

10

11

12

13

[[email protected] ~]# vim /etc/rsyslog.conf

//在文件末尾添加一行

local0.*  /

var

/log/sshd.log

[[email protected] ~]# vim /etc/ssh/sshd_config

//将SyslogFacility AUTHPRIV改为

SyslogFacility local0

[[email protected] ~]# touch /

var

/log/sshd.log

[[email protected] ~]# ll /

var

/log/sshd.log

-rw-r--r--. 1 root root 0 4月 17 13:38 /

var

/log/sshd.log

[[email protected] ~]# systemctl restart sshd

[[email protected] ~]# systemctl restart rsyslog.service

[[email protected] ~]# ll /

var

/log/sshd.log

-rw-r--r--. 1 root root 352 4月 17 13:38 /

var

/log/sshd.log

之后创建切割明细配置文件,并强制执行

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

[[email protected] ~]# vim /etc/logrotate.d/sshd

[[email protected] ~]# cat /etc/logrotate.d/sshd

/

var

/log/sshd.log{

missingok

weekly

create 0600 root root

dateext

rotate 3

}

[[email protected] ~]# systemctl restart rsyslog.service

[[email protected] ~]# logrotate -vf /etc/logrotate.d/sshd

reading config file /etc/logrotate.d/sshd

Allocating hash table

for

state file, size 15360 B

Handling 1 logs

rotating pattern: /

var

/log/sshd.log forced

from

command line (3 rotations)

empty log files are rotated, old logs are removed

considering log /

var

/log/sshd.log

log needs rotating

rotating log /

var

/log/sshd.log, log->rotateCount

is

3

dateext suffix

‘-20190417‘

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 unconfined_u:object_r:var_log_t:s0

renaming /

var

/log/sshd.log to /

var

/log/sshd.log-20190417

creating

new

/

var

/log/sshd.log mode = 0600 uid = 0 gid = 0

set

default

create context

[[email protected] ~]# ll /

var

/log/sshd*

-rw-------. 1 root root   0 4月  17 13:47 /

var

/log/sshd.log

-rw-r--r--. 1 root root 352 4月  17 13:38 /

var

/log/sshd.log-20190417

logrotate的-d选项是预演,-f是强制执行,-v是显示详细过程。

(4).扩展

另外还可使用shell和python进行日志切割,这里我找了一个大佬的文章提供参考:运维中的日志切割操作梳理(Logrotate/python/shell脚本实现)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值