简单好用的日志管理工具 Logrotate
前言
日志就像程序的生命记录仪,详细记录下了程序运行的点点滴滴。
- 慎重的选择记录哪些日志:在茫茫日志海中寻找真正记录问题的日志,你是不想经历的;
- 精心的定时压缩转移日志:故障发生了,日志却丢了,此时的任何辩解都是苍白无力的。
记录哪些日志需要你在编写应用程序慎重决定,本文讲述如何使用Linux自带的logrotate程序来精心组织我们可爱的日志文件。
简介
日志,实际就是本文文件,且是个内容不断在增长的文件。处理通常就是按天或者按大小来备份、压缩或转储,非常简单。
/var/log/messages是大家熟悉的系统日志存放位置。如果该文件内容增长特别快,几天可能就撑满了整个硬盘,那么对该文件的备份、压缩或转储就显得尤为重要。
手动怎么处理呢?可能是:
- 编写日志处理脚本,脚本检测如果日志文件大小超过10M就拷贝一份日志并压缩转储,中间还需要清空原日志;
- Crontab中把这个脚本作为定时任务,每天执行下。
Logrotate实际就是起着上述脚本作用的小工具,他通过让用户来配置规则的方式,检测和处理日志文件。配合Cron可让处理定时化;
Logrotate预制了大量判断条件和处理方式,可大大降低手写脚本的负担和出错的可能;
Logrorate检测日志文件属性,比对用户配置好的检测条件,对满足条件的再根据用户配置的要求来处理,整个可以通过Cron来定时调度,这其实是非常经典的Linux解决问题的思路,可以好好静下心来品味下,简单,好用。
组成
以下是logrotate运行的关键点:
/usr/bin/logrotate程序所在位置;/etc/cron.daily/logrotate默认让Cron每天执行logrotate一次;/etc/logrotate.conf全局配置文件;/etc/logrotate.d应用自个的配置文件存放目录,覆盖全局配置;
全局配置文件/etc/logrotate.conf
# cat /etc/logrotate.conf
# 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
# use date as a suffix of the rotated file
# dateext
# 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 and btmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
minsize 1M
rotate 1
}
/var/log/btmp {
missingok
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
查看全局配置文件cat /etc/logrotate.conf,可以发现#是行注释,配置项都是以关键字形式出现(那么想知道每个关键字的作用,最简单的就是直接man查看了)。
仔细看下每个关键字的注释,不难发现,比如:
- weekly:表示每周处理下日志;
- rotate4:最多保持4个轮转备份,关于轮转本身后文会详述,很有意思;
- create:处理完该日志文件后,新生成一个日志文件,当然尽可能是同名同权限等;
- dateext:默认未加时间戳;
- compress:默认不压缩;
- 对wtmp和btmp日志做了单独处理,于是你意识到了单独的配置可以放在
/etc/logrotate.d目录,或者直接放在全局配置里面。
于是当logrotate程序被执行时,按照字面意思logrotate默认是想每周处理下日志,对日志最多轮转保留4份,处理方式是不压缩也不加时间戳,处理完后再生成个同名文件。当然这些是默认设置,还对wtmp和btmp日志处理做了单独要求并且include /etc/logrotate.d目录下还有一大堆处理要求。该目录下配置文件,在logrotate被执行后,都会不一个个读取来执行。
自定义配置文件存放目录/etc/logrotate.d/
# ls /etc/logrotate.d/
cups debug dracut httpd iptraf mysqld ppp psacct sssd subscription-manager syslog tomcat6 up2date vsftpd wpa_supplicant yum
例如查看下sssd配置文件的内容:
# cat /etc/logrotate.d/sssd
/var/log/sssd/*.log {
weekly
missingok
notifempty
sharedscripts
rotate 2
compress
postrotate
/bin/kill -HUP `cat /var/run/sssd.pid 2>/dev/null` 2> /dev/null || true
endscript
}
可以发现基本格式与全局配置文件/etc/logrotate.conf一致,不难想象单独为某个日志配置的要求优先级肯定更高,如果与全局配置中出现相同项目的配置,单独的肯定覆盖全局的。
Cron执行 /etc/cron.daily/logrotate
配置文件都指定完毕,logrotate可单独执行了,当然也可以通过cron来定时执行;
# cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
默认的logrotate已经放在/etc/cron.daily/logrotate目录,很明显是让cron每天执行一次logrotate程序;
当然你也可以将该脚本放到其他时间,比如每分钟执行,甚至可以单独写crontab表达式来让logrotate指定配置文件和指定时间执行;
小结
至此,我们看过了logrotate的全局配置文件,单独配置文件,已经如何配合cront来定时执行。
为了加深记忆,我们先小结下:
- logrotate是个程序,专门用来处理日志文件;
- 处理需要用户配置规则,比如指定超出10M则做什么动作;
- 规则可配置到独立的配置文件中,当然全局还有个全局默认配置文件,要知道每个配置文件都放在哪哦;
- logrotate一被执行,就会搜索所有的配置文件按要求处理日志;
- 可以配合cron让logrotate定时执行;
测试
man过logrotate的同学大概知道logrotate该怎么用了,常见的选项使用如下:
# 1. 调试 (d = debug)参数为配置文件,不指定则执行全局配置文件
logrotate -d /etc/logrotate.d/test.conf
# 2. 强制执行(-f = force),可以配合-v(-v =verbose)使用,注意调试信息默认携带-v;
logrotate -v -f /etc/logrotate.d/test.conf
本例通过自定义配置文件来压缩指定日志文件来测试logrotate的使用。
注意logrotate都是需要使用root来执行的,(但是可以通过配置项来指定生成的日志文件为普通用户的)。
# 1. 生成一个日志文件
man ps > test.log
ll -h test.log
-rw-r--r-- 1 root root 54K Sep 6 11:36 test.log
# 2. 编写对该日志文件如何处理的logrotate配置文件
cat /etc/logrotate.d/test.conf
/var/log/test.log {
compress
rotate 4
size 30k
create 0600 root root
}
# 3. 调试是否可以按照配置文件要求生成压缩文件
logrotate -d /etc/logrotate.d/test.conf
reading config file /etc/logrotate.d/test.conf
reading config info for /var/log/test.log
Handling 1 logs
rotating pattern: /var/log/test.log 30720 bytes (4 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/test.log
log needs rotating
rotating log /var/log/test.log, log->rotateCount is 4
dateext suffix '-20150906'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
renaming /var/log/test.log.4.gz to /var/log/test.log.5.gz (rotatecount 4, logstart 1, i 4),
renaming /var/log/test.log.3.gz to /var/log/test.log.4.gz (rotatecount 4, logstart 1, i 3),
renaming /var/log/test.log.2.gz to /var/log/test.log.3.gz (rotatecount 4, logstart 1, i 2),
renaming /var/log/test.log.1.gz to /var/log/test.log.2.gz (rotatecount 4, logstart 1, i 1),
renaming /var/log/test.log.0.gz to /var/log/test.log.1.gz (rotatecount 4, logstart 1, i 0),
renaming /var/log/test.log to /var/log/test.log.1
creating new /var/log/test.log mode = 0600 uid = 0 gid = 0
compressing log with: /bin/gzip
removing old log /var/log/test.log.5.gz
error: error opening /var/log/test.log.5.gz: No such file or directory
# 4. 调试结果正常,实际测试下
logrotate -f /etc/logrotate.d/test.conf
ll -h test.log*
-rw------- 1 root root 0 Sep 6 11:44 test.log
-rw-r--r-- 1 root root 14K Sep 6 11:44 test.log.1.gz
测试正常;
以上logrotate -f /etc/logrotate.d/test.conf指令完全可以写入crontab中,按照要求时间来执行,此处暂时不拆开讲了。
轮转
我们从上述debug信息中,摘录轮转部分的日志来理解下,什么叫轮转。
rotating log /var/log/test.log, log->rotateCount is 4
renaming /var/log/test.log.4.gz to /var/log/test.log.5.gz (rotatecount 4, logstart 1, i 4),
renaming /var/log/test.log.3.gz to /var/log/test.log.4.gz (rotatecount 4, logstart 1, i 3),
renaming /var/log/test.log.2.gz to /var/log/test.log.3.gz (rotatecount 4, logstart 1, i 2),
renaming /var/log/test.log.1.gz to /var/log/test.log.2.gz (rotatecount 4, logstart 1, i 1),
renaming /var/log/test.log.0.gz to /var/log/test.log.1.gz (rotatecount 4, logstart 1, i 0),
renaming /var/log/test.log to /var/log/test.log.1
emoving old log /var/log/test.log.5.gz
error: error opening /var/log/test.log.5.gz: No such file or directory
根据配置文件要求,轮转4份;
以伪代码在简写上述日志为:
rotateCount=4
mv 4 5
mv 3 4
mv 2 3
mv 1 2
rm 5
这就很容易理解了,所谓轮转,就是类似二级制向右位移一样不断的重命名;
例子
在弄清楚logrotate的运作机制,又实地测试一番后,以下将通过多个例子方式来让大家快速配置。
清空但不删除日志文件
copytruncate的作用在于先复制一份当前日志文件用做处理,再清空源日志文件,让其继续接收日志。
当然在复制和清空的空隙可能会有若干
$ cat logrotate.conf
/tmp/output.log {
size 1k
copytruncate
create 700 bala bala
rotate 4
compress
}
摘自参考3;
日志处理完执行自定义脚本
postrotate和endscript中间可以编写自定义脚本,用来对日志或者其他其定义处理,扩展性非常强;
例如由于logrotate对压缩日志可指定的时间戳只能到天,于是可以再自定义脚本里面对文件做时分等细化命名;
$ cat logrotate.conf
/tmp/output.log {
size 1k
copytruncate
rotate 4
compress
postrotate
/home/bala/myscript.sh
endscript
}
摘自参考3;
更改压缩程序
默认压缩程序使用.gz,当然可以自定义,需要制定压缩程序和后缀名;
$ cat logrotate.conf
/tmp/output.log {
size 1k
copytruncate
create
compress
compresscmd /bin/bzip2
compressext .bz2
rotate 4
}
参考
- man logrotate
- 被遗忘的logrotate
- HowTo: The Ultimate Logrotate Command Tutorial with 10 Examples
- logrotate 进行nginx日志分割
简单好用的日志管理工具 Logrotate的更多相关文章
- LogCook 一个简单实用的Android日志管理工具
众所周知,日志的管理是软件系统很重要的一部分,千万不可忽略其重要性.完整的日志将会在系统维护中起着异常重要的作用,就好像磨刀不误砍柴工一样,日志就像对系统进行分析的工具,工具便捷了,对系统分析起来就能 ...
- 日志管理工具logrotate
工作所需,需要管理脚本的打印日志,百度一圈,发现了logrotate这款工具,经测试确实挺好的! 话不多说,直接上重点,以便于以后需要时查看 命令: whereis logrotate 可以看到log ...
- 日志管理工具之logrotate
Logrotate配置和测试 logrotate软件是一个日志管理工具,用于非分隔日志,删除旧的日志文件,并创建新的日志文件,起到“转储作用”,可以为系统节省磁盘空间.logrotate是基于cron ...
- 系统自带的日志管理工具-rsyslogd
系统自带的日志管理工具-rsyslogd 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志管理简介 1.什么是日志 系统日志是记录系统中硬件.软件和系统问题的信息,同时还可以 ...
- [.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS
[.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS 本篇要点:在进阶篇快要结束的时候说说源代码管理器,我们的开发,不是一个人可以完成的事,团队协作很重要,而且 ...
- Java程序员须知的七个日志管理工具(转)
Splunk vs. Sumo Logic vs. LogStash vs. GrayLog vs. Loggly vs. PaperTrails vs. Splunk>Storm 英文原文:T ...
- 使用Linux自带日志滚动工具logrotate滚动redis日志示例
截至到redis-5.0版本,redis仍然不会自动滚动日志文件,如果不处理则日志文件日积月累越来越大,最终将导致磁盘满告警: # ls -lh total 12G -rw-r--r-- 1 redi ...
- mysql 开发进阶篇系列 33 工具篇(mysqlbinlog日志管理工具)
一.概述 由于服务器生成的二进制日志文件以二进制格式保存,所以如果要想检查这些文件的文本格式,就会用到mysqlbinlog日志管理工具. mysqlbinlog的语法如下: mysqlbinlog ...
- Java程序员须知的七个日志管理工具
本文由 ImportNew - 赖 信涛 翻译自 takipiblog.欢迎加入翻译小组.转载请见文末要求. Splunk vs. Sumo Logic vs. LogStash vs. GrayLo ...
随机推荐
- Chrome弹窗的简单应用(选择结构与循环结构)
★选择结构★ ★JS实现弹窗显示随机数 示例代码效果图 ★ 弹窗实现对随机数的进一步判断 示例代码效果图 ★综合应用 比较大小 ★ 判断成绩等级 ): : : : : alert(" ...
- DotNetCore跨平台~性能测试~可以放心使用了
使用dotnetCore发布站点后,它的处理请求能力不逊色IIS等大型服务的能力,号称每秒能处理115万个请求,太牛X了也. 先看看它支持的数据库 以下主流数据库都是为支持的 Microsoft SQ ...
- 【jQuery基础学习】04 jQuery中的表格操作及cookie插件的使用
这章本来准备写成jQuery的表单操作和表格操作的. 然而昨天吧jQuery的表单操作看完,发现全部在炒之前章节的剩饭,所以就没写出来. 那么今天就来看看表格吧. 因为平常做的都是公司的内部管理系统, ...
- 方法----MessageDigest和DigestUtils加密算法
总结:使用DigestUtils的方法加密的结果与messageDigest的方法加密结果一致,可使用DigestUtils替换MessageDigest 可省掉部分代码 package com.ac ...
- maven-dependency-plugin插件的使用
maven-dependency-plugin插件的使用 maven-dependency-plugin是 处理与依赖相关的插件.它有很多可用的goal,大部分是和依赖构建.分析和解决相关的goa ...
- Java 进程占用 VIRT 虚拟内存超高的问题研究
1. 现象 最近发现线上机器 java 8 进程的 VIRT 虚拟内存使用达到了 50G+,如下图所示: 2. 不管用的 -Xmx 首先第一想到的当然使用 java 的 -Xmx 去限制堆的使用.但是 ...
- VS2010在空解决方案中添加项目
如题,在空解决方案中添加第一个项目的时候会看不到那个solution解决方案文件,而是你当前添加的项目,当你再添加其他项目的时候就悲催了,找不到这个solution,只能在这个项目文件上新加文件,很郁 ...
- html5 大幅度地增加和改良input元素的种类
增加和改良input元素 url类型.email类型.date类型.time类型.datetime类型.datetime-local类型.month类型.week类型.number类型.range类型 ...
- Office版本问题0x80029C4A
说来奇怪,以前运行正常的程序(涉及excel表格输出),现在运行失败了,一调试,发现了如下问题: 无法将类型为"Microsoft.Office.Interop.Excel.Applicat ...
- Atitit.图片木马的原理与防范 attilax 总结
Atitit.图片木马的原理与防范 attilax 总结 1.1. 像图片的木马桌面程序1 1.2. Web 服务端图片木马1 1.3. 利用了Windows的漏洞1 1.4. 这些漏洞不止Windo ...