日志切割之Logrotate
1、关于日志切割
日志文件包含了关于系统中发生的事件的有用信息,在排障过程中或者系统性能分析时经常被用到。对于忙碌的服务器,日志文件大小会增长极快,服务器会很快消耗磁盘空间,这成了个问题。除此之外,处理一个单个的庞大日志文件也常常是件十分棘手的事。
logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。
2、安装logrotate
系统版本说明
[root@clsn6 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@clsn6 ~]# uname -r
2.6.32-696.el6.x86_64
默认centos系统安装自带logrotate,安装方法如下
yum -y install logrotate crontabs
软件包信息说明
[root@clsn6 ~]# rpm -ql logrotate
/etc/cron.daily/logrotate
/etc/logrotate.conf # 主配置文件
/etc/logrotate.d # 配置目录
logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。
3、实践配置logrotate
3.1 测试logrotate如何管理日志
这里我们将创建一个10MB的日志文件/var/log/log-file。我们将展示怎样使用logrotate来管理该日志文件。
我们从创建一个日志文件开始吧,然后在其中填入一个10MB的随机比特流数据文件。
[root@clsn6 ~]# touch /var/log/log-file
[root@clsn6 ~]# head -c 10M < /dev/urandom > /var/log/log-file
由于现在日志文件已经准备好,我们将配置logrotate来轮循该日志文件。让我们为该文件创建一个配置文件。
[root@clsn6 ~]# vim /etc/logrotate.d/log-file
/var/log/log-file {
monthly
rotate 5
compress
delaycompress
missingok
notifempty
create 644 root root
postrotate
/usr/bin/killall -HUP rsyslogd
endscript
}
3.2配置文件说明
|
配置参数 |
说明 |
|
monthly |
日志文件将按月轮循。其它可用值为'daily','weekly'或者'yearly'。 |
|
rotate 5 |
一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。 |
|
compress |
在轮循任务完成后,已轮循的归档将使用gzip进行压缩。 |
|
delaycompress |
总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。 |
|
missingok |
在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。 |
|
notifempty |
如果日志文件为空,轮循不会进行。 |
|
create 644 root root |
以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。 |
|
postrotate/endscript |
在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。 |
|
以上信息来源 "man logrotate" |
|
3.3手动运行logrotate
logrotate可以在任何时候从命令行手动调用。要调用为/etc/lograte.d/下配置的所有日志调用logrotate:
[root@clsn6 ~]# logrotate /etc/logrotate.conf
要为某个特定的配置调用logrotate,执行一次切割任务测试
[root@clsn6 ~]# ll /var/log/log-file
-rw-r--r-- 1 root root 10485760 Feb 7 18:50 /var/log/log-file
[root@clsn6 ~]# logrotate -vf /etc/logrotate.d/log-file
[root@clsn6 ~]# ll /var/log/log-file*
-rw-r--r-- 1 root root 0 Feb 7 19:17 /var/log/log-file
-rw-r--r-- 1 root root 10485760 Feb 7 18:50 /var/log/log-file.1
即使轮循条件没有满足,我们也可以通过使用‘-f’选项来强制logrotate轮循日志文件,‘-v’参数提供了详细的输出。
3.4Logrotate的记录日志
logrotate自身的日志通常存放于/var/lib/logrotate/status目录。如果处于排障目的,我们想要logrotate记录到任何指定的文件,我们可以指定像下面这样从命令行指定。
[root@clsn6 ~]# logrotate -vf -s /var/log/logrotate-status /etc/logrotate.d/log-file
reading config file /etc/logrotate.d/log-file
reading config info for /var/log/log-file Handling 1 logs rotating pattern: /var/log/log-file forced from command line (5 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/log-file
log does not need rotating
not running postrotate script, since no logs were rotated
3.5 Logrotate定时任务
logrotate需要的cron任务应该在安装时就自动创建了,我把cron文件的内容贴出来,以供大家参考。
[root@clsn6 ~]# cat /etc/cron.daily/logrotate
#!/bin/sh /usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
4、logrotate生产应用
4.1为nginx设置日志切割
防止访问日志文件过大
[root@clsn nginx]# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 5
missingok
notifempty
create 644 www www
postrotate
if [ -f /application/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /application/nginx/logs/nginx.pid`
fi
endscript
}
logrotate工具对于防止因庞大的日志文件而耗尽存储空间是十分有用的。配置完毕后,进程是全自动的,可以长时间在不需要人为干预下运行。本教程重点关注几个使用logrotate的几个基本样例,你也可以定制它以满足你的需求。
对于其他服务日志切割后续补充
5、附录
5.1关于USR1信号解释
摘自: http://www.xuebuyuan.com/323422.html
USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。内容摘自wiki:http://zh.wikipedia.org/wiki/SIGUSR1%E5%92%8CSIGUSR2
对于USR1和2都可以用户自定义的,在POSIX兼容的平台上,SIGUSR1和SIGUSR2是发送给一个进程的信号,它表示了用户定义的情况。它们的符号常量在头文件signal.h中定义。在不同的平台上,信号的编号可能发生变化,因此需要使用符号名称。
kill -HUP pid 或者 killall -HUP pName:
其中pid是进程标识,pName是进程的名称。
如果想要更改配置而不需停止并重新启动服务,可以使用上面两个命令。在对配置文件作必要的更改后,发出该命令以动态更新服务配置。根据约定,当你发送一个挂起信号(信号1或HUP)时,大多数服务器进程(所有常用的进程)都会进行复位操作并重新加载它们的配置文件。
5.2常见配置参数小结
|
配置参数 |
说明 |
|
compress |
通过gzip压缩转储以后的日志 |
|
nocompress |
不压缩 |
|
copytruncate |
用于还在打开中的日志文件,把当前日志备份并截断 |
|
nocopytruncate |
备份日志文件但是不截断 |
|
create mode owner group |
转储文件,使用指定的文件模式创建新的日志文件 |
|
nocreate |
不建立新的日志文件 |
|
delaycompress |
和 |
|
nodelaycompress |
覆盖 delaycompress |
|
errors address |
专储时的错误信息发送到指定的Email 地址 |
|
ifempty |
即使是空文件也转储,这个是 |
|
notifempty |
如果是空文件的话,不转储 |
|
mail address |
把转储的日志文件发送到指定的E-mail |
|
nomail |
转储时不发送日志文件 |
|
olddir directory |
转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 |
|
noolddir |
转储后的日志文件和当前日志文件放在同一个目录下 |
|
prerotate/endscript |
在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行 |
|
daily |
指定转储周期为每天 |
|
weekly |
指定转储周期为每周 |
|
monthly |
指定转储周期为每月 |
|
rotate count |
指定日志文件删除之前转储的次数,0 |
|
tabooext [+] list |
让logrotate不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~ |
|
size size |
当日志文件到达指定的大小时才转储,bytes(缺省)及KB(sizek)或MB(sizem) |
|
missingok |
在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。 |
6、参考文献
[1]https://linux.cn/article-4126-1.html
[2]http://xmodulo.com/2014/09/logrotate-manage-log-files-linux.html
[3]http://blog.csdn.net/fuming0210sc/article/details/50906372
[4]http://blog.csdn.net/forthemyth/article/details/44062529
作者:惨绿少年
出处:http://clsn.io
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
日志切割之Logrotate的更多相关文章
- tomcat catalina.out日志切割(logrotate)
简单说明: 1,因为tomcat日志会一直往catalina.out里面输出,所以回到值catalina.out非常大,占用磁盘空间 2,日志非常大,查看日志就需要很长时间. 3,据说catalina ...
- Nginx日志切割之Logrotate篇
不管是什么日志文件,都是会越来越大的,大到一定程度就是个可怕的事情了,所以要及早的做处理,方法之一就是按时间段来存储,不过linux系统提供了Logrotate的日志管理工具,很好用,不用写计划任务脚 ...
- Linux日志切割方法[Logrotate、python、shell实现方式]
Linux日志切割方法[Logrotate.python.shell实现方式] 对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分 ...
- nginx日志切割(logrotate或shell脚本)
nginx自己不会对日志文件进行切割,可以通过两种不同的方式进行,分别是:通过logrotate和通过shell脚本. 如果是yum方式安装的nginx,系统默认会自动通过logrotate这个日志管 ...
- 日志切割工具logrotate解决Tomcat catalina.out日志过大的问题
一.介绍日志切割logrotate 对于Linux系统安全来说,日志文件是极其重要的工具.不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了 ...
- Nginx日志切割工具——logrotate 使用记录
1.安装 logrotate是Linux系统自带,无需安装 2.配置 进入[/etc/logrotate.d/nginx]文件修改配置 # 需要备份的日志路劲,一个或多个都可以 /data/logs/ ...
- linux运维、架构之路-tomcat日志切割工具 logrotate
一.Logrotate简介 1.Logrotate实际就是对日志进行切割的小工具,他通过让用户来配置规则的方式,检测和处理日志文件.配合Cron可让处理定时化:2.Logrotate预制了大量判断条件 ...
- Nginx 日志切割(Logrotate)
Logrotate 配置文件 # ls /etc/logrotate.* /etc/logrotate.conf /etc/logrotate.d: cups dracut fmdcn httpd i ...
- logrotate nginx日志切割
1.安装 centos: yum -y install logrotate ubuntu: apt-get install -y logrotate 2. 配置文件 /etc/logrotate.co ...
随机推荐
- RabbitMQ消息队列(七)-通过fanout模式将消息推送到多个Queue中(.Net Core版)
前面第六章我们使用的是direct直连模式来进行消息投递和分发.本章将介绍如何使用fanout模式将消息推送到多个队列. 有时我们会遇到这样的情况,多个功能模块都希望得到完整的消息数据.例如一个log ...
- 滚动 docker 中的 nginx 日志
Nginx 自己没有处理日志的滚动问题,它把这个球踢给了使用者.一般情况下,你可以使用 logrotate 工具来完成这个任务,或者如果你愿意,你可以写各式各样的脚本完成同样的任务.本文笔者介绍如何滚 ...
- Scala(二) —— 函数
try 表达式 var result = try{ Integer.parseInt("dog") }catch{ case _ => 0 }finally{ println ...
- JSON 与 JS 对象的区别与对比
定义: JSON是什么?JSON是JS的一种简单数据格式,JSON是JavaScript原生格式,它是一种严格的js对象的格式,JSON的属性名必须有双引号,如果值是字符串,也必须是双引号. 问题: ...
- Scrapy-Redis分布式爬虫常规操作
一.X-path 的常规用法1./是从根节点选取,有顺序2.//从当前节点选择文档中的节点,无顺序3..选取当前节点4...选取当前节点的父节点5.@选取属性6. //div[@class='docl ...
- (1)Maven快速入门_1maven安装
Maven 快速入门 1.1 Maven官网下载 windows 系统 下载 下图红色框选处. 下载到本地解压, 创建一个本地maven仓库的目录 maven_lib 配置Maven的环境变量 ...
- springboot之多数据源配置JdbcTemplate
springboot多数据源配置,代码如下 DataSourceConfig package com.rookie.bigdata.config; import org.springframework ...
- 纯CSS实现点击事件展现隐藏div菜单列表/元素切换
在写移动端导航的时候经常用到点击按钮出现/隐藏导航条的情况,最常见的方法当然还是前端框架直接调用,省心省力,不易出错:当然还有使用纯JS实现的小代码段.我这里整理了纯CSS实现方式,给需要的人和给自己 ...
- Object.keys 及表单清空
Object.keys 返回一个所有元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性.这些属性的顺序与手动遍历该对象属性时的一致. // simple array var ar ...
- BZOJ5118: Fib数列2(二次剩余)
题意 题目链接 题目链接 一种做法是直接用欧拉降幂算出\(2^p \pmod{p - 1}\)然后矩阵快速幂. 但是今天学习了一下二次剩余,也可以用通项公式+二次剩余做. 就是我们猜想\(5\)在这个 ...