CentOS下的日志切割

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

(1).logrotate的配置文件node

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

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

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

1
2
3
4
5
6
7
8
9
[root@xuexi ~]# 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(也就是公有变量)。具体内容以下:ssh

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@xuexi ~]# 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份,多余删除,不计算新建日志文件
}

  配置文件参数说明:ide

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

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

    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
[root@xuexi 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
[root@xuexi ~]# vim /etc/rsyslog.conf
//在文件末尾添加一行
local0.*  / var /log/sshd.log
[root@xuexi ~]# vim /etc/ssh/sshd_config
//将SyslogFacility AUTHPRIV改成
SyslogFacility local0
[root@xuexi ~]# touch / var /log/sshd.log
[root@xuexi ~]# ll / var /log/sshd.log
-rw-r--r--. 1 root root 0 4月 17 13:38 / var /log/sshd.log
[root@xuexi ~]# systemctl restart sshd
[root@xuexi ~]# systemctl restart rsyslog.service
[root@xuexi ~]# 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
[root@xuexi ~]# vim /etc/logrotate.d/sshd
[root@xuexi ~]# cat /etc/logrotate.d/sshd
/ var /log/sshd.log{
     missingok
     weekly
     create 0600 root root
     dateext
     rotate 3
}
[root@xuexi ~]# systemctl restart rsyslog.service
[root@xuexi ~]# 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
[root@xuexi ~]# 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脚本实现)

相关文章
相关标签/搜索