`
rensanning
  • 浏览: 3514266 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37481
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:604342
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:678107
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:87280
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:399819
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69075
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:90487
社区版块
存档分类
最新评论

logrotate入门

 
阅读更多
日志文件对于开发运维是非常有用的,通过日志可以跟踪系统的使用以及排查故障。但为了获取到更多的日志信息,日志文件就变得很大,需要占用更多的磁盘空间。系统运行一段时间后,日志文件就会不可控的增大。抛开磁盘占用,肥大的日志文件本身也会拖慢系统的运行。所以,日志文件要保持在一个可控的范围之内。有效管理日志文件也是运维的一个重要任务。通常做法是需要每天做一次日志的归档。

Log rotation、日志分割、日志滚动、日志轮转等,都说的是定期归档系统的日志,开启一个新的日志记录,删除旧的日志记录。

日志rotate有很多方法,比如:
Apache:/usr/local/apache2/bin/rotatelogs
Framework:Log4j,Logback的RollingFileAppender等。

Linux自身提供了一个非常实用 logrotate 功能,它可以自动对日志进行截断、压缩以及删除旧的日志文件。主流Linux发行版上都默认安装有logrotate包,通过 man logrotate 能查看命令的详细使用方法。需要注意的是logrotate自身不是Demon的,需要借助crond实现。

(1)相关文件
/usr/sbin/logrotate logrotate命令
/etc/cron.daily/logrotate 每天通过这个shell执行logrotate
/etc/logrotate.conf 执行Shell时指定的配置文件
/etc/logrotate.d/ 这个文件夹下放置了各个软件自己的日志滚动配置,比如httpd、yum、mysql

(2)配置logrotate.conf

1)logrotate是日志文件位置定义规则

单一文件定义
/tmp/output.log {
}

多个文件同时定义
/usr/local/nginx/logs/access.log /usr/local/nginx/logs/error.log {
}

通配符定义
/usr/local/domain1.com/log/*log {
}

2)滚动策略

1-文件大小
比如,当一个文件达到30k时,开始滚动日志文件

/tmp/output.log {
    size 30k
    create 0600 root root
}

2-daily/weekly/monthly
比如,每天滚动日志文件

/tmp/output.log {
    daily
    create 0600 root root
}

3)创建文件
日志文件被归档后,需要创建新的文件继续记录日志

1-create
create是创建了一个新的文件,但是一般日志文件都会被handler,所以不能新建。

2-copytruncate
将源文件copy之后,清空文件内容。
/tmp/output.log {
    daily
    copytruncate
}

4)保留文件数
自动清除旧的文件,保留一定需要的文件
/tmp/output.log {
    daily
    create 0600 root root
    rotate 7
}
rotate是以个数为单位的,maxage是以天数为单位的,如果以天来轮转日志,两者一致。

5)归档文件扩展

默认是从数字1开始
/tmp/output.log.1
/tmp/output.log.2
/tmp/output.log.3

日期
/tmp/output.log {
    daily
    create 0600 root root
    rotate 7
    dateext
}
默认是/tmp/output.log-YYYYMMDD

以下可以设置日期格式为/tmp/output.log_YYYYMMDD
/tmp/output.log {
    daily
    create 0600 root root
    rotate 7
    dateext
    dateformat _%Y%m%d
}

6)压缩归档
/tmp/output.log {
    daily
    create 0600 root root
    rotate 7
    dateext
    compress
}
归档文件为:/tmp/output.log-YYYYMMDD.gz

7)配置文件中执行shell(postrotate、sharedscripts)
/tmp/output.log {
    size 1k
    copytruncate
    rotate 4
    compress
    postrotate
      /home/rensanning/myscript.sh
    endscript
}

对于多个日志文件,在一个配置里,结果是相同的,使用sharedscripts可以避免Shell被执行多次。
logrotate 在执行 postrotate 脚本前先检查日志文件是否需要rotate,需要时只执行一次postrotate 脚本。
/home/demo/public_html/domain1.com/log/*log /home/demo/public_html/domain2.com/log/*log {
    rotate 14
    daily
    compress
    sharedscripts
    postrotate
        /usr/sbin/apachectl graceful > /dev/null
    endscript
}

8)日志文件不存在时不报错

/tmp/output.lo {
    size 1k
    missingok
}

(3)归档状态
logrotate会保存归档状态信息在文件logrotate.status里,默认路径是:/var/lib/logrotate.status

[root@localhost ~]# cat /var/lib/logrotate.status
logrotate state -- version 2
"/var/log/yum.log" 2018-1-1
"/var/log/httpd/*log" 2014-11-14
"/var/lib/mysql/mysqld.log" 2015-6-8
"/var/log/httpd/error_log" 2016-6-19
"/var/log/httpd/access_log" 2016-6-19
"/var/log/cron" 2018-2-4

左侧引号内是日志文件路径,右侧日期是最新rotate的日期。
查看该文件可以知道某个日志文件的最新状态,如果由于NTP时间同步问题,可以删除问题日志文件那一行重新rotate。

(4)执行选项
默认执行
# /usr/sbin/logrotate /tmp/log/logrotate.conf

主要选项
# /usr/sbin/logrotate -vdf /tmp/log/logrotate.conf
-v 显示logrotate执行过程中的详细信息
-d 不实际执行rotate,用于检查配置是否正确
-f 强制执行,如果发现某个应该被rotate的日志文件没有rotate,可以使用该选项强制rotate

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics