首页 > 系统相关 >CentOS下的日志切割

CentOS下的日志切割

时间:2023-01-28 10:12:28浏览次数:52  
标签:sshd 切割 CentOS logrotate var 日志 root log

转: 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 [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(也就是公有变量)。具体内容如下:

?
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份,多余删除,不计算新建日志文件 }

  配置文件参数说明:

    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 [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脚本实现)

标签:sshd,切割,CentOS,logrotate,var,日志,root,log
From: https://www.cnblogs.com/colin88/p/17069702.html

相关文章

  • SQLSERVER 事务日志的 LSN 到底是什么?
    一:背景1.讲故事大家都知道数据库应用程序它天生需要围绕着数据文件打转,诸如包含数据的.mdf,事务日志的.ldf,很多时候深入了解这两类文件的合成原理,差不多对数据库就能......
  • CentOS停止更新 rocky linux和alma linux选择推荐
    2023年1月27日21:00:38随着CentOSStream的使用,centos进入不稳定版本发布阶段,目前暂时会持续下去,CentOSStream是RHEL的上游版本,会包含很多不稳定的新功能。Stream不......
  • 2023.1.27训练日志
    P1493分梨子很好的多维枚举的问题,用排序减少一维枚举的思路十分好,就是不知道这道题和它的标签“dp”有什么关系调了好久发现数组白开了一个,实在是难P3382【模板】三分......
  • 学习笔记——安卓的下载路径;创建一个空的安卓project;Android中的日志工具划分
    2023-01-27一、安卓(AndroidStudio)的下载路径https://developer.android.google.cn/studio/二、创建一个空的安卓project1、打开安卓后,点击“NewProject”  2......
  • Dr Watson日志
    1、drwtsn32.logdrwtsn32.exe(Dr.Watson)是一个Windows系统内置的程序错误调试器。默认状态下,出现程序错误时,Dr.Watson将自动启动。Dr.Watson是Win2000的一个崩溃分析......
  • CentOS7.9 全自动装docker:v1
    命令(直接复制执行即可):servicefirewalldstopsystemctldisablefirewalld.servicesetenforce0sed-i's/SELINUX=enforcing/SELINUX=disabled/g'/etc/selinux/configyu......
  • 认真学习MySQL中的二进制日志(binlog)与中继日志(Relay log)
    binlog即binarylog,二进制日志文件,也叫作变更日志(updatelog)。它记录了数据库所有执行的DDL和DML等数据库更新事件的语句,但是不包含没有修改任何数据的语句(如数据查询语句se......
  • sqlserver事务日志太大的原因
    数据库的日志文件sqlserver的数据库日志文件是事务日志文件,记录了所有数据库的事务和修改,包含在数据库上的增、删、改操作信息。如果日志文件满了,会报9002错误,且数据库只......
  • logback 日志应用
    <?xmlversion="1.0"encoding="UTF-8"?><!--scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。scanPeriod:设置监测配置文件是否有......
  • Python 日志类logging基本使用方法
    使用方法importloggingLOG_FORMAT="[%(asctime)s]\t%(levelname)s\t%(message)s"DATE_FORMAT="%Y-%m-%d%H:%M:%S%P"'''只有在第一次调用logging.basicConfi......