设为首页 收藏本站
查看: 1122|回复: 0

[经验分享] linux logrotate 配置

[复制链接]

尚未签到

发表于 2018-5-23 12:37:52 | 显示全部楼层 |阅读模式
  
一、
logrotate
配置

logrotate
程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,我们把它叫做
转储
。我们可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过
cron
程序来执行。

logrotate
程序还可以用于压缩日志文件,以及发送日志到指定的
E-mail

logrotate
的配置文件是
/etc/logrotate.conf
。主要参数如下表:

参数
功能

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

nocompress
不需要压缩时,用这个参数

copytruncate
用于还在打开中的日志文件,把当前日志备份并截断

nocopytruncate
备份日志文件但是不截断

create mode owner group
转储文件,使用指定的文件模式创建新的日志文件

nocreate
不建立新的日志文件

delaycompress
compress
一起使用时,转储的日志文件到下一次转储时才压缩

nodelaycompress
覆盖
delaycompress
选项,转储同时压缩。

errors address
专储时的错误信息发送到指定的
Email
地址

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

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

mail address
把转储的日志文件发送到指定的
E-mail
地址

nomail
转储时不发送日志文件

olddir directory
转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统

noolddir
转储后的日志文件和当前日志文件放在同一个目录下

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

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

daily
指定转储周期为每天

weekly
指定转储周期为每周

monthly
指定转储周期为每月

rotate count
指定日志文件删除之前转储的次数,
0
指没有备份,
5
指保留
5
个备份

tabootext [+] list
logrotate
不转储指定扩展名的文件,缺省的扩展名是:
.rpm-orig,.rpmsave, v,
~

  
size size
当日志文件到达指定的大小时才转储,
Size
可以指定
bytes(
缺省
)
以及
K(sizek)
或者
M (sizem).

  
二、缺省配置
logrotate
logrotate
缺省的配置募
/etc/logrotate.conf

Red Hat linux
缺省安装的文件内容是:

# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# send errors to root
errors root
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
1
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own lastlog or wtmp --we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
/var/log/lastlog {
monthly
rotate 1
}
# system-specific logs may be configured here
缺省的配置一般放在
logrotate.conf
文件的最开始处,影响整个系统。在本例中就是前面
12
行。

第三行
weekly
指定所有的日志文件每周转储一次。

第五行
rotate 4
指定转储文件的保留
4
份。

第七行
errors root
指定错误信息发送给
root

第九行
create
指定
logrotate
自动建立新的日志文件,新的日志文件具有和

原来的文件一样的权限。

11
#compress
指定不压缩转储文件,如果需要压缩,去掉注释就可以了。


  
三、使用
include
选项读取其他配置文件

include
选项允许系统管理员把分散到几个文件的转储信息,集中到一个

主要的配置文件。当
logrotate
logrotate.conf
读到
include
选项时,会从指定文件读入配置信息,就好像他们已经在
/etc/logrotate.conf
中一样。

13
include/etc/logrotate.d
告诉
logrotate
读入存放在
/etc/logrotate.d
目录中的日志转储参数,当系统中安装了
RPM
软件包时,使用
include
选项十分有用。
RPM
软件包的日志转储参数一般存放在
/etc/logrotate.d
目录。

include
选项十分重要,一些应用把日志转储参数存放在
/etc/logrotate.d,/etc/logrotate.d/里的每个文件配置会覆盖或追加该文件默认的参数,如果未指定参数,则采用logrotate.conf中默认的参
数,比如logrotate.conf中,rotate默认为4, test(四章中的例子)文件指定rotate为50,将覆盖rotate配置,

典型的应用有:
apache, linuxconf,samba, cron
以及
syslog,squid

这样,系统管理员只要管理一个
/etc/logrotate.conf
文件就可以了。

logrotate 也可以直接执行 后直接跟配置文件就可以了。

-v 给出详细信息

-d debug模式,不更改日志文件内容 模拟执行

-f 强制执行,忽略所有规则

  

Logrotate的介绍
  显而易见,Logrotate是基于CRON来运行的,其脚本是「/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  实际运行时,Logrotate会调用配置文件「/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
# 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 {
    monthly
    minsize 1M
    create 0664 root utmp
    rotate 1
}
# system-specific logs may be also be configured here.  这里的设置可以理解为Logrotate的缺省值,当然了,可以我们在「/etc/logrotate.d」目录里放置自己的配置文件,用来覆盖Logrotate的缺省值。
Logrotate的演示
  按天保存一周的Nginx日志压缩文件,配置文件为「/etc/logrotate.d/nginx」:
/usr/local/nginx/logs/*.log {
    daily
    dateext
    compress
    rotate 7
    sharedscripts
    postrotate
        kill -USR1 `cat /var/run/nginx.pid`
    endscript
}  如果你等不及CRON,可以通过如下命令来手动执行:
shell> logrotate -f /etc/logrotate.d/nginx  当然,正式执行前最好通过Debug选项来验证一下,这对调试也很重要:
shell> logrotate -d -f /etc/logrotate.d/nginx  BTW:类似的还有Verbose选项,这里就不多说了。
Logrotate的疑问
  问题:sharedscripts的作用是什么?
  大家可能注意到了,我在前面Nginx的例子里声明日志文件的时候用了星号通配符,也就是说这里可能涉及多个日志文件,比如:access.log
和error.log。说到这里大家或许就明白了,sharedscripts的作用是在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条
指令,那么每个日志文件轮转完毕后都会执行一次脚本。
  问题:rotate和maxage的区别是什么?
  它们都是用来控制保存多少日志文件的,区别在于rotate是以个数为单位的,而maxage是以天数为单位的。如果我们是以按天来轮转日志,那么二者的差别就不大了。
  问题:为什么生成日志的时间是凌晨四五点?
  前面我们说过,Logrotate是基于CRON运行的,所以这个时间是由CRON控制的,具体可以查询CRON的配置文件「/etc/crontab」,可以手动改成如23:59等时间执行:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
59 23 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly  如果使用的是新版CentOS,那么配置文件为:/etc/anacrontab。
  问题:如何告诉应用程序重新打开日志文件?
  以Nginx为例,是通过postrotate指令发送USR1信号来通知Nginx重新打开日志文件的。但是其他的应用程序不一定遵循这样的约
定,比如说MySQL是通过flush-logs来重新打开日志文件的。更有甚者,有些应用程序就压根没有提供类似的方法,此时如果想重新打开日志文件,
就必须重启服务,但为了高可用性,这往往不能接受。还好Logrotate提供了一个名为copytruncate的指令,此方法采用的是先拷贝再清空的
方式,整个过程中日志文件的操作句柄没有发生改变,所以不需要通知应用程序重新打开日志文件,但是需要注意的是,在拷贝和清空之间有一个时间差,所以可能
会丢失部分日志数据。
  BTW:MySQL本身在support-files目录已经包含了一个名为mysql-log-rotate的脚本,不过它比较简单,更详细的日志轮转详见「Rotating MySQL Slow Logs Safely」。
  …
  熟悉Apache的朋友可能会记得cronolog,不过Nginx并不支持它,有人通过mkfifo命令曲线救国,先给日志文件创建管道,再搭配cronolog轮转,虽然理论上没有问题,但效率上有折扣。另外,Debian/Ubuntu下有一个简化版工具savelog,有兴趣可以看看。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-480357-1-1.html 上篇帖子: linux 进程间的通信 下篇帖子: Linux Server User
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表