阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Linux日志切割工具Logrotate配置详解

442次阅读
没有评论

共计 4345 个字符,预计需要花费 11 分钟才能阅读完成。

Logrotate 程序是一个日志文件管理工具。用于分割日志文件,压缩转存、删除旧的日志文件,并创建新的日志文件,下面就对 logrotate 日志轮转的记录:

1.1 Logrotate 配置文件介绍

Linux 系统默认安装 logrotate,默认的配置文件:

/etc/logrotate.conf
/etc/logrotate.d/

logrotate.conf:为主配置文件
logrotate.d:为配置相关子系统,用于隔离每个应用配置(Nginx、PHP、Tomcat…)
 
Logrotate 是基于 CRON 来运行的,其脚本是 /etc/cron.daily/logrotate,日志轮转是系统自动完成的。
实际运行时,Logrotate 会调用配置文件 /etc/logrotate.conf。
 
Logrotate 可以由自动或者手动触发日志轮转:

logrotate -f /etc/logrotate.d/nginx
logrotate -f /etc/logrotate.d/php
不过正式执行前最好通过 Debug 选项来验证一下(- d 参数)

具体 logrotate 命令格式如下:

logrotate [OPTION…] <configfile>
-d, –debug:debug 模式,测试配置文件是否有错误。
-f, –force:强制转储文件。
-m, –mail=command:压缩日志后,发送日志到指定邮箱。
-s, –state=statefile:使用指定的状态文件。
-v, –verbose:显示转储过程。

1.2 Logrotater 日志文件切割策略

查看 logrotate.conf 配置:

cat /etc/logrotate.conf

weekly // 默认每一周执行一次 rotate 轮转工作
rotate 4 // 保留多少个日志文件(轮转几次). 默认保留四个. 就是指定日志文件删除之前轮转的次数,0 指没有备份
create // 自动创建新的日志文件,新的日志文件具有和原来的文件相同的权限;因为日志被改名, 因此要创建一个新的来继续存储之前的日志
dateext // 这个参数很重要!就是切割后的日志文件以当前日期为格式结尾,如 xxx.log-20131216 这样, 如果注释掉, 切割出来是按数字递增, 即前面说的 xxx.log- 1 这种格式
compress // 是否通过 gzip 压缩转储以后的日志文件,如 xxx.log-20131216.gz;如果不需要压缩,注释掉就行
include /etc/logrotate.d // 导入 /etc/logrotate.d/ 目录中的各个应用配置
/var/log/wtmp {// 仅针对 /var/log/wtmp 所设定的参数
monthly // 每月一次切割, 取代默认的一周
minsize 1M // 文件大小超过 1M 后才会切割
create 0664 root utmp // 指定新建的日志文件权限以及所属用户和组
rotate 1 // 只保留一个日志.
}
# 这个 wtmp 可记录用户登录系统及系统重启的时间
# 因为有 minsize 的参数,因此不见得每个月一定会执行一次喔. 要看文件大小。

 
Logrotate 中其他可配置参数,具体如下:

compress // 通过 gzip 压缩转储以后的日志
nocompress // 不做 gzip 压缩处理
copytruncate // 用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
nocopytruncate // 备份日志文件不过不截断
create mode owner group // 轮转时指定创建新文件的属性,如 create 0777 nobody nobody
nocreate // 不建立新的日志文件
delaycompress // 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress // 覆盖 delaycompress 选项,转储同时压缩。
missingok // 如果日志丢失,不报错继续滚动下一个日志
errors address // 专储时的错误信息发送到指定的 Email 地址
ifempty // 即使日志文件为空文件也做轮转,这个是 logrotate 的缺省选项。
notifempty // 当日志文件为空时,不进行轮转
mail address // 把转储的日志文件发送到指定的 E -mail 地址
nomail // 转储时不发送日志文件
olddir directory // 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir // 转储后的日志文件和当前日志文件放在同一个目录下
sharedscripts // 运行 postrotate 脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
prerotate // 在 logrotate 转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行
postrotate // 在 logrotate 转储之后需要执行的指令,例如重新启动 (kill -HUP) 某个服务!必须独立成行
daily // 指定转储周期为每天
weekly // 指定转储周期为每周
monthly // 指定转储周期为每月
rotate count // 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留 5 个备份
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

1.3 NGINX 日志的配置实例参考:

vim /etc/logrotate.d/nginx
/var/log/weblog/*.log {
    daily  // 指定转储周期为每天
    compress  // 通过 gzip 压缩转储以后的日志
    rotate 7  // 保存 7 天的日志
    missingok  // 如果日志文件丢失,不要显示错误
    notifempty  // 当日志文件为空时,不进行轮转
    dateext  // 使用当期日期作为命名格式,exp: nginx_access.log-20190120
    sharedscripts  // 运行 postrotate 脚本
    postrotate  // 执行的指令
            if [-f /run/nginx.pid]; then
                    kill -USR1 `cat /run/nginx.pid`
            fi
    endscript  // 结束指令
}

 

1.4 PHP-FPM 日志的配置实例参考:

vim /etc/logrotate.d/nginx
/usr/local/php/var/log/*.log {
daily
compress
rotate 7
missingok
notifempty
dateext
sharedscripts
postrotate
    if [-f /usr/local/php/var/run/php-fpm.pid]; then
        kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`
    fi
endscript
}

 

1.5 Logrotater 日志切割轮询

由于 Logrotate 是基于 CRON 运行的,所以这个日志轮转的时间是由 CRON 控制的,具体可以查询 CRON 的配置文件 /etc/anacrontab,过往的老版本的文件为(/etc/crontab)

查看轮转文件:/etc/anacrontab

cat /etc/anacrontab
    SHELL=/bin/sh
    PATH=/sbin:/bin:/usr/sbin:/usr/bin
    MAILTO=root
    RANDOM_DELAY=45
    START_HOURS_RANGE=3-22
    1   5   cron.daily      nice run-parts /etc/cron.daily
    7   25  cron.weekly     nice run-parts /etc/cron.weekly
    @monthly 45 cron.monthly        nice run-parts /etc/cron.monthly

使用 anacrontab 轮转的配置文件,日志切割的生效时间是在凌晨 3 点到 22 点之间,而且随机延迟时间是 45 分钟,但是这样配置无法满足我们在现实中的应用
 
现在的需求是将切割时间调整到每天的晚上 12 点,即每天切割的日志是前一天的 0 -24 点之间的内容,操作如下:

mv /etc/anacrontab /etc/anacrontab.bak          // 取消日志自动轮转的设置

使用 crontab 来作为日志轮转的触发容器来修改 Logrotate 默认执行时间

vi /etc/crontab 
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

1.6 解决 logrotate 无法自动轮询日志的办法

现象说明:
使用 logrotate 轮询 nginx 日志,配置好之后,发现 nginx 日志连续两天没被切割,检查后确定配置文件一切正常,这是为什么呢??

强行启动记录文件维护操作,纵使 logrotate 指令认为没有需要,应该有可能是 logroate 认为 nginx 日志太小,不进行轮询。
故需要强制轮询,即在 /etc/cron.daily/logrotate 脚本中将 -t 参数替换成 -f 参数

vim /etc/cron.daily/logrotate 
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [$EXITVALUE != 0]; then
    /usr/bin/logger -f logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

最后最后重启下 cron 服务:

/etc/init.d/crond restart
Stopping crond: [OK]
Starting crond: [OK]

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4345字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7976396
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

开源MoneyPrinterTurbo 利用AI大模型,一键生成高清短视频!

  开源 MoneyPrinterTurbo 利用 AI 大模型,一键生成高清短视频! 在短视频内容...
在Windows系统中通过VMware安装苹果macOS15

在Windows系统中通过VMware安装苹果macOS15

在 Windows 系统中通过 VMware 安装苹果 macOS15 许多开发者和爱好者希望在 Window...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...
每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年0.99刀,拿下你的第一个顶级域名,详细注册使用

每年 0.99 刀,拿下你的第一个顶级域名,详细注册使用 前言 作为长期折腾云服务、域名建站的老玩家,星哥一直...
三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Android 的最优解?

  三大开源投屏神器横评:QtScrcpy、scrcpy、escrcpy 谁才是跨平台控制 Andr...