logrotate 日志管理

Posted xinlibao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了logrotate 日志管理相关的知识,希望对你有一定的参考价值。

a.logrotate 简介

logrotate是一个日志管理程序,用来把旧的日志文件删除(备份),并创建新的日志文件,这个过程称为“转储”。

我们可以根据日志的大小,或者根据其使用的天数来转储。

logrotate 的执行由crond服务实现。在/etc/cron.daily目录中,有个文件logrotate,它实际上是个shell script,用来启动logrotate。logrotate程序每天由cron在指定的时间(/etc/crontab)启动。因此,使用ps是无法查看到logrotate的。如果它没有起来,就要查看一下crond服务有没有在运行。在执行logrotate时,需要指定其配置文件/etc/logrotate.conf。

每个存放在/etc/logrotate.d目录里的文件,都有上面格式的配置信息。在{}中定义的规则,如果与logrotate.conf中的冲突,以/etc/logrotatate.d/中的文件定义的为准。

b.参数

-?或--help  在线帮助。
-d或--debug  详细显示指令执行过程,便于排错或了解程序执行的情况。
-f或--force  强行启动记录文件维护操作,纵使logrotate指令认为没有需要亦然。
-s<状态文件>或--state=<状态文件>  使用指定的状态文件。
-v或--version  显示指令执行过程。
-usage  显示指令基本用法。

c.配置文件

执行文件:/usr/sbin/logrotate
主配置文件:/etc/logrotate.conf
自定义配置文件:/etc/logrotate.d/*.conf

/etc/logrotate.d/ - 通常一些第三方软件包,会把自己私有的配置文件,也放到这个目录下。如yum,zabbix-agent,syslog等。

修改配置文件后,并不需要重启服务。
由于logrotate实际上只是一个可执行文件,不是以daemon运行。

d.日志分割原理

系统会按照计划的频率运行logrotate,通常是每天。大多数的Linux发行版本上,计划每天运行脚本位于/etc/cron.daily/logrotate

当logrotate 运行的时候,它会读取自身配置文件来决定需要分割日志文件的路径,分割日志文件的频率及保留多少日志存档。

e.常用参数

compress                               通过gzip 压缩转储以后的日志

nocompress                             不必压缩时,用这个参数

nocreate                               不建立新的日志文件

delaycompress 和 compress              一起使用时,转储的日志文件到下一次转储时才压缩 nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。

ifempty                                即使是空文件也转储,这个是 logrotate 的缺省选项。

notifempty                              如果是空文件的话,不转储

missingok                               如果日志不存在则忽略该警告信息

prerotate/endscript                     在转储以前需要执行的命令能放入这个对,这两个关键字必须独立成行

postrotate/endscript                    在转储以后需要执行的命令能放入这个对,这两个关键字必须独立成行

rotate                                  命令指定分割日志的数量,也就是保留多少个日志,当新的分割日志产生时,会删除最老的

weekly   daily  monthly  yearly         定义分割频度

size                                                          定义文件大小

f.logrotate主配置文件详解

# see "man logrotate" for details
# rotate log files weekly
weekly                      #每周轮转一次
# keep 4 weeks worth of backlogs
rotate 4                    #保留四个日志文件
# create new (empty) log files after rotating old ones
create                      #rotate后,创建一个新的空文件
# uncomment this if you want your log files compressed
#compress                   #默认是不压缩的
# RPM packages drop log rotation information into this directory
  
include /etc/logrotate.d    #这个目录下面配置文件生效
# no packages own wtmp — we’ll rotate them here
/var/log/wtmp {             #定义/var/log/wtmp这个日志文件;
    monthly                 #每月轮转一次,取代了上面的全局设定的每周轮转一次;
    minsize 1M              #定义日志必须要大于1M大小才会去轮转;
    create 0664 root utmp   #新的日志文件的权限,属主,属主;
    rotate 1                #保留一个,取代了上面的全局设定的保留四个;
}
/var/log/btmp {             #定义/var/log/btmp这个日志文件;
    missingok               #如果日志丢失, 不报错;
    monthly
    create 0600 root utmp
    rotate 1
}
 
记住,在 /etc/logrotate.d/ 目录下的应用配置文件继承所有的 /etc/logrotate.conf 默认参数

g.nginx日志logrotate配置说明

##解释nginx 的logrotate 配置
##固定格式,支持通配符匹配
/var/log/nginx_*.log {              
    daily                       ##每天转储一次
    missingok                   ##如果日志不存在则忽略该警告信息
    dateext                     ##转储以后以日期作为后缀
    ifempty                     ##即使是空文件也转储,这个是 logrotate 的缺省选项。
    rotate 20                   ##保留20份日志文件;log.1...log.20
    sharedscripts               ##共享脚本,下面的postrotate <s> endscript中的脚本只执行一次即可;
    postrotate                  ##
        /netpas/nginx/sbin/nginx -c /netpas/nginx/conf/nginx.conf -p /netpas/nginx -s reopen > /dev/null 2>/dev/null || true
        /netpas/nginx/sbin/nginx -c /netpas/nginx/conf/nginx_udp.conf -p /netpas/nginx -s reopen > /dev/null 2>/dev/null || true
    endscript
}
postrotate <s> endscript  #日志轮换过后指定指定的脚本,endscript参数表示结束脚本;
Logrotate每次分割文件后会运行 postrotate 后的命令。最通常的作用是让应用重启,以便切换到新的日志文件。
第一部分是匹配的文件模式,可以是通配符,注意:如果对应的日志不存在会报错,中断处理,可以自行用调试模式测试。(可以添加missingok缓解)
 
{ ... } 花括号里面的就是具体的指令参数了,logrotate支持一些hook预处理,可以在执行之前或者之后调用命令或者自己的脚本。

  

 

以上是关于logrotate 日志管理的主要内容,如果未能解决你的问题,请参考以下文章

日志管理工具-logrotate

日志管理工具之logrotate

Linux自带的logrotate 来管理日志

用Linux自带的Logrotate来管理日志

CentOS Linux使用logrotate分割管理日志

Linux日志管理神器之Logrotate日志分割,以及crontab定时轮询