linux logrotate 配置

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:


一、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 
指定日志文件删除之前转储的次数,指没有备份,指保留个备份
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,有兴趣可以看看。

















本文转自leonardos51CTO博客,原文链接: http://blog.51cto.com/leomars/1560477,如需转载请自行联系原作者





相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
3月前
|
Ubuntu Linux 网络安全
Linux服务器之Ubuntu的安装与配置
Ubuntu Desktop是目前最成功、最流行的图形界面的Linux发行版;而Ubuntu Server也在服务器端市场占据了较大的份额。今天为大家详细介绍了Ubuntu Server的安装与配置,希望对你能有所帮助。关于VMware、VirtualBox等虚拟化软件的使用,朱哥还会在后续的文章中为大家详细介绍,敬请关注!
|
1月前
|
存储 Linux 开发工具
Linux环境下使用Buildroot配置软件包
使用Buildroot可以大大简化嵌入式Linux系统的开发和维护工作,但它需要对Linux系统和交叉编译有深入的理解。通过上述步骤,可以有效地配置和定制软件包,为特定的嵌入式应用构建高效、稳定的系统。
195 11
|
8月前
|
安全 Linux 开发工具
【Linux】vim使用与配置教程
Vim是一款功能强大的文本编辑器,广泛应用于Linux环境,是开发者和系统管理员的必备工具。本文介绍了Vim的基本操作与简单配置,涵盖命令模式、插入模式和底行模式的使用方法,以及光标定位、复制粘贴、搜索替换等常用技巧。同时,文章还提供了实用的分屏操作和代码注释方法,并分享了通过`.vimrc`文件进行个性化配置(如显示行号、语法高亮、自动缩进等)的技巧,帮助用户提升文本编辑效率。掌握这些内容,能让Vim更好地服务于日常工作与开发需求。
571 3
|
4月前
|
Kubernetes Linux 网络安全
Rocky Linux 8.9配置Kubernetes集群详解,适用于CentOS环境
初始化成功后,记录下显示的 `kubeadm join`命令。
265 0
|
6月前
|
关系型数据库 MySQL Java
安装和配置JDK、Tomcat、MySQL环境,以及如何在Linux下更改后端端口。
遵循这些步骤,你可以顺利完成JDK、Tomcat、MySQL环境的安装和配置,并在Linux下更改后端端口。祝你顺利!
458 11
|
5月前
|
Linux 网络安全 开发工具
在Linux下配置gitee与Github的远程仓库
注意,git push后,是输入你的账号与密码。这个步骤可以通过特殊设置省去,但是一开始还是不要太省。
316 0
|
7月前
|
安全 Linux 网络安全
在Linux(CentOS和AWS)上安装更新的git2的方法并配置github-ssh
经过以上这些步骤,你现在就能在GitHub上顺利往返,如同海洋中的航海者自由驰骋。欢迎你加入码农的世界,享受这编程的乐趣吧!
319 10
|
8月前
|
Java Linux 应用服务中间件
在Rocky Linux 9上安装JDK并配置环境变量!
本教程介绍在Rocky Linux 9上安装JDK并配置环境变量的完整步骤。首先更新系统,清理旧版本JDK相关包及残留文件,确保环境干净。接着搜索并安装所需版本的JDK(如OpenJDK 17),验证安装是否成功。然后查找JDK安装路径,配置全局环境变量`JAVA_HOME`和`PATH`,最后验证环境变量设置。按照此流程操作,可顺利完成Java开发环境搭建,支持多版本切换(如JDK 8/11/17)。生产环境请谨慎操作,避免影响现有服务。
1385 21
|
7月前
|
人工智能 Kubernetes Ubuntu
linux配置IP
linux配置IP
696 1
|
8月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。