利用Linux自带的logrotate管理日志
日常运维中,经常要对各类日志进行管理,清理,监控,尤其是因为应用bug,在1小时内就能写几十个G日志,导致磁盘爆满,系统挂掉。
nohup.out,access.log,catalina.out
本文简单介绍利用Linux自带的logrotate来对操作系统中各类日志进行管理。
1、logrotate简介
The logrotate utility is designed to simplify the administration of log files on a system which generates a lot of log files. Logrotate allows for the automatic rotation compression, removal and mailing of log files. Logrotate can be set to handle a log file daily, weekly, monthly or when the log file gets to a certain size.
为了使用它,主要有两个地方需要修改一下:一个是/etc/logrotate.conf,另一个是/etc/logrotate.d/下面的文件。
你既可以在logrotate.conf中直接定义如何处理你的log文件,也可以在/logrotate.d/下面针对自己的log新建一个对应的文件来定义处理log的行为,推荐在目录 /logrotate.d/ 下面创建自己的文件来对个性化的日志进行处理。
logrotate定义了如何处理日志,而它本身则是被crond定时调用的。
我使用的一个生产实例:
/usr/local/nginx/logs/*.log {
create 0644 root root
daily
rotate 2
missingok
copytruncate
ifempty
compress
noolddir
}
上述内容保存到nginxlog文件,存放到目录:/etc/logrotate.d/nginxlog
设置权限:owner=root group=root mode=0644
测试配置是否正确:
lograte -d /etc/logrotate.d/nginxlog
2、logrotate配置参数
logrotate 全局配置文件: /etc/logrotate.conf
| 配置参数 | 功能说明 |
| compress | 通过gzip 压缩转储以后的日志 |
| nocompress | 不需要压缩时,用这个参数 |
| copytruncate | 用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。 |
| nocopytruncate | 备份日志文件但是不截断 |
| create mode owner group | 转储文件,使用指定的文件模式创建新的日志文件。轮转时指定创建新文件的属性,如create 0777 nobody nobody |
| nocreate | 不建立新的日志文件 |
| delaycompress | 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩 |
| nodelaycompress | 覆盖 delaycompress 选项,转储同时压缩 |
| errors address | 专储时的错误信息发送到指定的Email 地址 |
| ifempty | 即使是空文件也转储,这个是 logrotate 的缺省选项。 |
| notifempty | 如果是空文件的话,不转储 |
| mail address | 把转储的日志文件发送到指定的E-mail 地址 |
| nomail | 转储时不发送日志文件 |
| olddir directory | 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统 |
| noolddir | 转储后的日志文件和当前日志文件放在同一个目录下 |
|
prerotate/endscript |
在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;这两个关键字必须单独成行; |
| postrotate/endscript | 在logrotate转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行; |
| daily | 指定转储周期为每天 |
| weekly | 指定转储周期为每周 |
| monthly | 指定转储周期为每月 |
| rotate count | 指定日志文件删除之前转储的个数,0 指没有备份,5 指保留5个备份 |
| tabootext [+] list 让logrotate | 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~ |
| size | size当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem). |
| missingok | 如果日志丢失,不报错继续滚动下一个日志 |
| notifempty | 当日志文件为空时,不进行轮转 |
| sharedscripts | 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本 |
| dateext | 使用当期日期作为命名格式 |
| dateformat .%s | 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数 |
| size(或minsize) log-size | 当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem). |
说明:
当日志文件 >= log-size 的时候就转储。
以下为合法格式:(其他格式的单位大小写没有试过)
size = 5 或 size 5 (>= 5 个字节就转储)
size = 100k 或 size 100k
size = 100M 或 size 100M
实例:
/home/deploy/apps/production.log {
missingok
copytruncate
rotate
notifempty
sharedscripts
dateext
dateformat -%Y-%m-%d-%s
size=10M
postrotate
mv /home/deploy/apps/production.log-* /data1/log/rails
gzip /data1/log/rails/production.log-*
endscript
}
问题:rotate和maxage的区别是什么?
它们都是用来控制保存多少日志文件的,区别在于 rotate 是以个数为单位的,而 maxage 是以天数为单位的。如果我们是以按天来轮转日志,那么二者的差别就不大了。
4、nginx日志切割实例
vim /etc/logrotate.d/nginx #创建nginx日志切割配置文件
/application/nginx/logs/*.log{
daily
rotate 10
create
dateext
}
logrotate -d /etc/logrotate.d/nginx 调试测试 -d debug
logrotate -d /etc/logrotate.d/nginx 手动切割日志测试
ls /application/nginx/logs/ 带日期的表示是切割好的日志
access.log bbs.log-20180228 error.log www.log
access.log-20180228 blog.log error.log-20180228 www.log-20180228
bbs.log blog.log-20180228 nginx.pid
配置好nginx切割日志生效时间
# cat /etc/anacrontab #此文件里有生效时间
# /etc/anacrontab: configuration file for anacron # See anacron() and anacrontab() for details. SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root # the maximal random delay added to the base delay of the jobs
RANDOM_DELAY= # the jobs will be started during the following hours only
START_HOURS_RANGE=- #生效时间范围是3点到22点 #period in days delay in minutes job-identifier command
cron.daily nice run-parts /etc/cron.daily
cron.weekly nice run-parts /etc/cron.weekly
@monthly cron.monthly nice run-parts /etc/cron.monthly
也就是说,配好的nginx切割日志,生效时间是在凌晨3点到22点之间,而且随机延迟时间是45分钟
5、其他配置示例
/var/log/htmlaccess.log {
errors jim
notifempty
nocompress
weekly
prerotate
/usr/bin/chattr -a /var/log/htmlaccess.log
endscript
postrotate
/usr/bin/chattr +a /var/log/htmlaccess.log
endscript
}
持续集成系统日志处理配置
/var/log/jenkins/jenkins.log /var/log/jenkins/access_log {
compress
dateext
maxage #保留最大365天
rotate #最大保留99个备份
size=+4096k
notifempty
missingok
create
copytruncate
}
自定义日志处理
/medialog/*.log {
create 0644 root root
daily
rotate 30
missingok
copytruncate
notifempty
compress
delaycompress
olddir /medialog/backlog # 将归档日志单独目录存储
}
利用Linux自带的logrotate管理日志的更多相关文章
- linux之使用cron,logrotate管理日志文件
1) logrotate配置 logrotate 程序是一个日志文件管理工具.用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做“转储”. 我们可以根据日志文件的大小,也可以根据其天数来 ...
- 用 Linux自带的logrotate 来管理日志
大家可能都有管理日志的需要,比如定时压缩日志,或者当日志超过一定大小时就自动分裂成两个文件等.最近就接到这样一个小任务.我们的程序用的是C语言,用log4cpp的library来实现日志记录.但是问题 ...
- Linux自带神器logrotate详解
Linux自带神器logrotate详解 散尽浮华 运维 3天前 作者:散尽浮华 链接:https://www.cnblogs.com/kevingrace/p/6307298.html 对于 L ...
- [转]利用C#自带组件强壮程序日志
利用C#自带组件强壮程序日志 在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简 ...
- 转载——利用C#自带组件强壮程序日志
利用C#自带组件强壮程序日志 在项目正式上线后,如果出现错误,异常,崩溃等情况 我们往往第一想到的事就是查看日志 所以日志对于一个系统的维护是非常重要的 声明 正文中的代码只是一个栗子,一个非常简 ...
- 在Linux下使用logrotate管理日志(转)
原文地址:http://www.tuicool.com/articles/ieAnMjN logrotate是日志循环管理工具,可以分割日志文件,删除旧的日志文件,创建新的日志文件,循环管理日志从而节 ...
- 使用 Linux 下的的logrotate进行日志的切割
实际生产中,使用一个log文件来记录所有信息的话,一方面,时间过久,就会占用很大的空间:另一方面,就是一个文件记录对于后期日志的查看非常不利.为了解决查看了一下资料,发现linux里面有一个logro ...
- 用Linux自带的Logrotate来管理日志
Logrotate是由cron控制,cron在规定的时间执行 " logrotate /etc/logrotate.conf "命令.将对象日志进行转储,删除,压缩等操作... ...
- 使用 Linux 自带的 logrotate 程序来控制日志文件尺寸
1. 编写配置文件,内容如下(以 Amadeus 系统为例): 编写配置文件,放在 /etc/logrotate.d/xxxx 下,其中 xxxx 是自己取的名字,无需后缀.例如 Amadeus 系统 ...
随机推荐
- [转帖]Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染
Docker Hub上镜像发现挖矿蠕虫病毒,已导致2000台主机感染 https://www.kubernetes.org.cn/5951.html 本来想说可以用 official版本的镜像 但是一 ...
- Thinking In Java 4th Chap8 多态(未完)
多态的意义:改善代码的可读性并且使得程序“可扩展” 多态方法调用允许一种类型表现出与其他相似类型之间的"区别",基于方法的行为不同而表现出来 将一个方法调用同一个方法主体关联起来称 ...
- 【HC89S003F4开发板】 7ASM&C混合编程
HC89S003F4开发板ASM&C混合编程 一.前言 在配套资料里有实现ASM&C混合编程的说明文档,这里来实现这个功能. 二.实现ASM&C混合编程 1.打开 Keil 工 ...
- 十八、Nand Flash驱动和Nor Flash驱动
在读者学习本章之前,最好了解Nand Flash读写过程和操作,可以参考:Nand Flash裸机操作. 一开始想在本章写eMMC框架和设备驱动,但是没有找到关于eMMC设备驱动具体写法,所以本章仍继 ...
- Webpack将静态资源拷贝并压缩至输出文件夹
就拿Vue项目来说,比如要将src/assets/js下的静态js文件,直接在public/index.html中引用: 这时候没有在项目中引用,不会经过wenpack的loader,也就不会自己打包 ...
- beego入门笔记
Beego Learn Note 示例环境在Deepin系统下. deepin 15.9.3 ├── Beego : 1.11.2 ├── GoVersion : go1.12.4 ├── GOOS ...
- Vue使用指南(二)
'''1.指令 ***** 文本指令 属性指令 方法(事件)指令 表单指令 条件指令 循环指令 2.组件 *** 局部组件 全局组件 父子组件间的交互''' 文件指令 <body> < ...
- windows下使用 fdfs_client 上传文件(转)
https://www.cnblogs.com/kindleheart/p/10134502.html 注意:client = Fdfs_client(r"绝对路径"),一定要是绝 ...
- Visual Web Developer 2012安裝教程
1.打开网页链接http://www.w3school.com.cn/aspnet/mvc_intro.asp 点击Visual Web Developer 2012进行安装安装平台(WebPlatf ...
- SQL Server存储过程中字符串前加N的含义
使用方法: N'字符串' 解释: 意思为后面的数据类型为NChar或者NVarchar 使用N前缀 在服务器上执行的代码中(例如在存储过程和触发器中)显示的Unicode字符串常量必须以大写字母N为前 ...