在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,每天自动执行。我们可以看一下脚本具体内容:

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

[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上次切割日志文件的时间

[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服务产生的日志自定义,作为实验目标

[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

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

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

CentOS下的日志切割的更多相关文章

  1. linux下nohup日志切割方案

    1.nohup命令解释: a.语法:nohup [command] [args] [&] b.说明:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂 ...

  2. Centos7下的日志切割--转发

    logrotate /etc/logrotate.conf 是 Logrotate 工具的一个配置文件,这个工具用来自动切割系统日志,Logrotate 是基于 cron 来运行的,如下: [root ...

  3. Centos系统各种日志存详解

    Centos系统各种日志存储路径和详细介绍 Linux常见的日志文件详述如下 1./var/log/boot.log(自检过程) 2./var/log/cron (crontab守护进程crond所派 ...

  4. Linux Centos下查看cpu、磁盘、内存使用情况,关闭MySQL日志

    Linux Centos下查看cpu.磁盘.内存使用情况,关闭MySQL日志 lsblk 查看分区和磁盘df -h 查看空间使用情况fdisk -l 分区工具查看分区信息cfdisk /dev/sda ...

  5. Linux环境下使用logrotate工具实现nginx日志切割

    一. 前提背景及需求 nginx运行日志默认保存在nginx安装目录下的 /usr/local/nginx/logs 文件夹, 包含access.log和error.log两个文件. (1) acce ...

  6. centos记录uptime,tomcat日志切割,远程拷贝日志脚本

    1.uptime日志脚本(每天记录) #!/bin/sh dir=/tmp/uptime_log process=`ps -ef|grep $|grep -v "grep" |gr ...

  7. CentOS 6.5下部署日志服务器 Rsyslog+LogAnalyzer+MySQL

    简介 LogAnalyzer 是一款syslog日志和其他网络事件数据的Web前端.它提供了对日志的简单浏览.搜索.基本分析和一些图表报告的功能.数据可以从数据库或一般的syslog文本文件中获取,所 ...

  8. apache日志切割

    一.日志切割 安装cronolog CentOS 5.4中编译安装Apache默认日志是不切割的,需要用用工具Cronnolog进行日志切割 1.下载及安装 wget http://cronolog. ...

  9. 日志切割之Logrotate

    1.关于日志切割 日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到.对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题.除此之外,处 ...

随机推荐

  1. 修改elasticsearch5,搜索结果最大10000

    一:在Linux服务器中执行如下命令(开启es服务) curl -XPUT http://服务器ip:9200/索引名称/_settings -d '{ "index" : { & ...

  2. Tju_Oj_2790Fireworks Show

    这个题主要在于时间复杂度的计算,N是10的6次方,C是10的2次方,OJ系统可接受的时间是10的7次方(室友说是无数先人测出来了┭┮﹏┭┮),所以如果普通遍历的话肯定会超时.而代码中是跳着走了,相当于 ...

  3. Q - Phalanx

    题目链接:https://vjudge.net/contest/68966#problem/Q 分析:这里的对称并不是指的是关于原矩阵(也就是最大的那一个)主对角线对称,而是对于每一个小的矩阵来说,当 ...

  4. oracle同义词是什么意思?

    相当于alias,比如把user1.table1 在user2中建一个同义词table1create synonym table1 for user1.table1;这样当我们在user2中查sele ...

  5. 用jquery实现toast的原理

    function toast(mess){ var str='<div class="mess"><span></span></div&g ...

  6. gcc 编译 + 选项【转】

    转自:http://blog.csdn.net/princess9/article/details/6567678 一般来说要现有项目中的编译选项,设置新的project的编译选项 编译器 就是将“高 ...

  7. axios通过django的csrf验证

    django会在浏览器的cookie里面保存一项csrftoken=GvzB3ilhlgadishmascacsilreclherlkjhaklsdv3qx4M96XRG88omScDPQaKoMxJ ...

  8. 19 Error handling and Go go语言错误处理

    Error handling and Go go语言错误处理 12 July 2011 Introduction If you have written any Go code you have pr ...

  9. python中set

    集合update方法:是把要传入的元素拆分,做为个体传入到集合中,例如: >>> a = set('boy') >>> a.update('python') > ...

  10. Django API验证(令牌)

    1. 获取接口信息 Client端 import requests import time import hashlib ctime = time.time() key = 'akfljakfjakl ...