我主要是玩debian,所以全篇以debian为主,其它linux系统不确定是否可以适用。

        本文涉及到三个主要的东西:cron,rsyslog,logrotate。

一,cron、rsyslog、logrotate的介绍

1,cron的介绍

        cron是一个linux下的定时执行工具(相当于windows下的scheduled task),可以在无需人工干预的情况下定时地运行任务task。cron服务提供crontab命令来设定cron服务的。

链接:​​Linux的cron和crontab的区别与联系​

2,rsyslog的介绍

        在Unix类操作系统上,syslog广泛应用于系统日志。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。

       ryslog 是一个快速处理收集系统日志的程序,提供了高性能、安全功能和模块化设计。rsyslog 是syslog 的升级版,它将多种来源输入输出转换结果到目的地,据官网介绍,现在可以处理100万条信息。

链接:​​syslog的介绍​

链接:​​配置rsyslog网络发送日志​

3,logrotate的介绍

        Syslog-ng服务只提供对log进行接收以及再处理(继续分发或者存储),但并不对产生的log文件进行管理,这样导致的后果就是可能这个文件越来越大,如果忘了对日志文件进行管理,结果导致这个日志文件20多G,囧,很有可能导致系统崩溃。日志文件管理这项工作其实是由logrotate模块来负责。

        logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。用来把旧的日志文件删除(备份),并创建新的日志文件,这个过程称为“转储”。我们 可以根据日志的大小,或者更具使用的天数来转储。

4,总结

        rsyslog是生成日志的,logrotate是日志管理程序,logrotate的执行由crond服务实现。

链接:​​Linux日志文件总管——logrotate​

二,cron、rsyslog、logrotate的安装

1,cron的安装

sudo apt-get install cron

2,rsyslog的安装

sudo apt-get install rsyslog

3,logrotate的安装

sudo apt-get install logrotate

三,cron、rsyslog、logrotate的使用

1,cron的使用

查看cron进程:ps -aux | grep cron

root@huawei:/var/log# ps -aux | grep cron
root 50 0.0 0.1 8196 2500 ? Ss 01:00 0:00 /usr/sbin/cron -f
root 2412 0.0 0.0 2824 724 pts/9 S+ 03:17 0:00 grep cron

2,rsyslog的使用

查看rsyslog的运行状态:/etc/init.d/rsyslog status
 

root@huawei:/var/log# /etc/init.d/rsyslog status
● rsyslog.service - System Logging Service
Loaded: loaded (/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2007-08-14 01:00:52 CST; 1h 47min ago
Docs: man:rsyslogd(8)
https://www.rsyslog.com/doc/
Main PID: 47 (rsyslogd)
Tasks: 4 (limit: 150)
Memory: 6.8M
CGroup: /lxc.payload/lxc01/system.slice/rsyslog.service
└─47 /usr/sbin/rsyslogd -n -iNONE

Aug 14 01:00:51 huawei systemd[1]: Starting System Logging Service...
Aug 14 01:00:52 huawei systemd[1]: Started System Logging Service.
Aug 14 01:00:52 huawei rsyslogd[47]: imuxsock: Acquired UNIX socket '/run/systemd/journal/syslog' (fd 3) from system…8.1901.0]
Aug 14 01:00:52 huawei rsyslogd[47]: [origin software="rsyslogd" swVersion="8.1901.0" x-pid="47" x-info="https://ww…m"] start
Aug 14 01:17:02 huawei rsyslogd[47]: [origin software="rsyslogd" swVersion="8.1901.0" x-pid="47" x-info="https://ww…was HUPed
Aug 14 01:17:02 huawei rsyslogd[47]: [origin software="rsyslogd" swVersion="8.1901.0" x-pid="47" x-info="https://ww…was HUPed
Hint: Some lines were ellipsized, use -l to show in full.
root@huawei:/var/log#

查看进程:ps -aux | grep rsyslog

root@huawei:/var/log# ps -aux | grep rsyslog
root 47 0.0 0.2 219844 3728 ? Ssl 01:00 0:04 /usr/sbin/rsyslogd -n -iNONE
root 1959 0.0 0.0 2824 632 pts/9 S+ 02:50 0:00 grep rsyslog
root@huawei:/var/log#

3,logrotate的使用

        logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改,一般我们是根据我们的需要再/etc/logrotate.d/目录下配置。如果你安装了一个新的服务,它的日志转储的规则可以建立一个专门的配置文件,放在/etc/logrotate.d/目录下面。在logrotate服务启动时被读取(/etc/logrotate.conf里面有include,将/etc/logrotate.d包含进去了)。每个存放在/etc/logrotate.d/目录里的文件,都有严格的配置格式。在{}中定义的规则,如果与logrotate.conf中的冲突,以/etc/logrotate.d/中的文件定义的为准。

        在/etc/cron.daily目录中,有个文件logrotate,它实际上是个shell script,可人工执行命令进行测试(如果配置有错误会有提示的):

root@huawei:/var/log# /usr/sbin/logrotate -f /etc/logrotate.conf

        logrotate程序每天由cron在指定的时间(/etc/crontab)启动。因此,使用ps是无法查看到logrotate的。如果它没有起来,就要查看一下crond服务有没有在运行。日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。​​logrotate​​​是以cronjob的方式来运行的 ​​/etc/cron.daily/logrotate,​​​每天运行一次。​​/var/lib/logrotate/status​​这个文件记录了每个需要rotate的文件的当前状态。

root@huawei:/var/log# cat /var/lib/logrotate/status
logrotate state -- version 2
"/var/log/syslog" 2007-8-14-2:17:1
"/var/log/dpkg.log" 2020-9-24-11:44:57
"/var/log/mosquitto/mosquitto.log" 2020-9-24-12:0:0
"/var/log/auth.log" 2007-8-12-0:0:4
"/var/log/apt/term.log" 2020-9-24-11:44:57
"/var/log/ppp-connect-errors" 2020-9-24-12:0:0
"/var/log/apt/history.log" 2020-9-24-11:44:57
"/var/log/alternatives.log" 2020-9-24-11:44:57
"/var/log/debug" 2007-8-14-1:17:2
"/var/log/mail.log" 2020-9-24-12:0:0
"/var/log/kern.log" 2007-8-15-0:0:8
"/var/log/wtmp" 2007-8-11-20:17:1
"/var/log/daemon.log" 2007-8-14-2:17:1
"/var/log/mail.warn" 2020-9-24-12:0:0
"/var/log/btmp" 2007-8-11-20:17:1
"/var/log/mail.err" 2020-9-24-12:0:0
"/var/log/lpr.log" 2020-9-24-12:0:0
"/var/log/user.log" 2007-8-12-19:17:1
"/var/log/mail.info" 2020-9-24-12:0:0
"/var/log/cron.log" 2020-9-24-12:0:0
"/var/log/messages" 2007-8-15-0:0:8
root@huawei:/var/log#

logrotate配置介绍:

主要参数如下表:

配置参数    功能说明
compress   通过gzip 压缩转储以后的日志
nocompress  不需要压缩时,用这个参数
copytruncate  用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate  备份日志文件但是不截断
create mode owner group   转储文件,使用指定的文件模式创建新的日志文件
nocreate   不建立新的日志文件
delaycompress 和 compress   一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress    delaycompress 选项,转储同时压缩。
errors address   专储时的错误信息发送到指定的Email 地址
ifempty   即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty   如果是空文件的话,不转储
mail address   把转储的日志文件发送到指定的E-mail 地址
nomail   转储时不发送日志文件
olddir directory   转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir   转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript   在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript   在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily   指定转储周期为每天
weekly   指定转储周期为每周
monthly   指定转储周期为每月
rotate count   指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list 让logrotate   不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size  size当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).

参考:​​rsyslog日志和轮转工具logrotate​

参考:​​rsyslogd配置文件详解​

参考:​​Linux下logrotate命令使用.配置和理解​