linux日志转储&清除工具——logrotate使用记录

1.logrotate介绍

  logrotate是一个linux自带得日志管理工具,可以起到日志得分割,清除,转储,邮寄,压缩功能。通过配置文件和linux得定时任务进行工作。

2.logrotate使用  

  2.1确认一下是否安装logrotate

        主流linux都是安装好logrotate得,如果你的系统中找不到,可以使用apt-get或者yum命令来下载;

#查看logrotate版本
logrotate --version

  2.2编写配置文件

  •         logrotate得配置文件位置
#全局默认配置,系统自带得,很多我们没配得配置都是取得这个配置文件得值
/etc/logrotate.conf  
#子配置,我们自定义得配置文件都要放在这个文件夹下,例如nginx,tomcat得日志轮转
/etc/logrotate.d/
  •         logrotate得配置有很多我先举个例子,然后在逐一说明
# 配置清理(Nginx)日志
/usr/local/nginx/logs/*.log {
    # 日志轮询周期,可以是 daily, weekly, monthly, yearly
    daily  
    # 当日志文件达到最大值时进行额外切割
    maxsize 200M
    # 只存储十天
    maxage 10
    # 日志文件切割时添加日期后缀
    dateext
    # 可以解决同一天无法分割两次得问题
    dateformat -%Y%m%d-%s
    # 指定存储位置
    olddir /export/nginx_log
    # 如果没有日志文件也不报错
    missingok
    # 日志为空时不进行切换,默认为 ifempty
    notifempty
    # 转储后文件为新建权限设置为644
    create 644 root root
    # 所有的文件切割之后只执行一次下面脚本(重启nginx防止日志无法写入)
    sharedscripts
    # 轮转后执行以下脚本
    postrotate
        # 通知nginx重启保证写入--常规操作
        if [ -f /usr/local/openresty/nginx/logs/nginx.pid ]; then
            kill -USR1 $(cat /usr/local/openresty/nginx/logs/nginx.pid)
        fi
    endscript
}

logrotate得配置参数

参数        说明
daily
weekly
monthly
yearly
日志轮转得频率;以daily为例,虽然每天会轮转但是具体轮转时间以cron得设定为主,也会受size配置项影响

size 100k

minsize 100k

maxsize 100k

默认单位是 bytes。bytes (缺省) 及 KB (sizek) 或 MB (sizem)
size 100k :如果是每天一次,那么到达这个size会转储一次,之后就不转储了

minsize 100k:如果到了cron定时得时间但是文件大小小于100k那么不转储;

maxsize 100k:如果一个周期内定时任务跑过一次转储了,但是又到达了100k,会额外进行一次转储

rotate 5日志文件保留备份的个数。默认是 0 。
如:0 指没有备份;5 指保留最近的5个备份,其余的全部删除。
maxage count保留多少天的日志文件。
如:5 指保留最近的5天的日志文件,其余的全部删除。
如果 日志文件按天转储,则 rotate 与 maxage 基本上是一样的。
tabooext [+] list让 logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和~
missingokmissing ok ,在日志轮循期间,错误将被忽略。
例如 “文件无法找到” 之类的错误。
copytruncate
nocopytruncate
copytruncate: 用于还在打开中的日志文件,把当前日志备份并截断。 把正在输出的日志拷 (copy) 一份出来,再清空 (trucate) 原来的日志。
nocopytruncate: 备份日志文件,但是不截断 。

create mode owner group
nocreate  

 create mode owner group:转储文件,使用指定的文件模式创建新的日志文件。
nocreate: 不建立新的日志文件。
如: create 644 root root
nocompress
compress
nocompress: 不压缩(默认)
compress: 通过 gzip 压缩转储以后的日志。如 XXX.gz

delaycompress
nodelaycompress

delaycompress: 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩。
nodelaycompress: 覆盖 delaycompress 选项,转储同时压缩。
prerotate
endscript
在所有其它指令完成  执行。这两个关键字必须单独成行
postrotate
endscript
在所有其它指令完成  执行。这两个关键字必须单独成行

sharedscripts    

  

共享脚本,整个日志组运行一次脚本 。
比如 nginx 涉及到多个日志文件,一般使用 * 号 通配符:/var/log/nginx/*.log { ... } ,

如果没有 sharedscripts ,那么 每个日志文件 轮转完毕后 都会执行一次

errors address转储时的错误信息发送到指定的 Email 地址。
mail address
nomail
mail address : 把转储的日志文件发送到指定的 E-mail 地址
nomail : (默认)转储时不发送日志文件
ifempty
notifempty
ifempty :if empty ,即使是空文件也转储(默认)。
notifempty :not if empty ,如果是空文件的话,不转储。
olddir directory
noolddir

olddir directory :切割后的日志文件放入指定的目录,但是必须和当前日志文件在同一个文件系统。

例如:olddir /etc/log/nginx_log
noolddir : 转储后的日志文件和当前日志文件放在同一个目录下。

dateext    

是否添加日志后缀;一般配合dateformat使用默认是当前日期。格式是 -%Y%m%d 的后缀。

如:nginx_access.log --> nginx_access.log-20240905

dateformat    

对 dateext 的拓展,必须配合 dateext 使用
在V3.9.0 之前,只支持 %Y、%m、%d、 %s 参数。
%s 不是秒,是类似时间戳得一长串数字;配置%s可以解决当天得多次轮转,测试得时候可以用
在V3.9.0 及之后,支持 %H 参数。
如: dateformat -%Y-%m-%d
结果:nginx_access.log --> nginx_access.log-2021-01-20
注意: 文件名称中禁止出现分号(:) ,因为文件名称是不能含有分号的
dateyesterday

日期提前一天;cron表达式如果写的是每天12点触发一次,就要使用这个配置,让命名与真实日志时间匹配

如果cron是23点59分触发就不用这个配置

extension    
                        

与 dateext 、dateformat 配合使用,指定文件的后缀。
如:extension .log
结果:nginx_access.log --> nginx_access-2021-01-20.log
说明:nginx_access.log , 文件名是nginx_access,后缀是.log, 文件名 + -%Y-%m-%d 格式的日期 + .log 后缀,结果是 nginx_access-2021-01-20.log

3.使用logrotate命令

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

logrotate -f  /var/tmp/logtest/myTest_rotate

4使用crontab定时任务

#常用crontab命令
#创建或修改定时任务
crontab -e
#查看定时任务
crontab -l

创建一个每天23点59分执行得日志转储任务

#cron表达式从分开始   logrotate命令    -f强制执行   配置文件所在位置
59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx_rotate

可能会用到得bash命令

#打开文件夹
cd /etc
#创建一个新的文件newlogfile并把logfile中的内容复制进去如果文件已存在则会追加
cat /etc/logfile >> /etc/newlogfile
#查询所有含nginx得进程
ps aux | grep nginx

### logrotate 使用方法与配置示例 #### 一、logrotate 基础命令 `logrotate` 是 Linux 系统中用于管理和轮转日志文件的工具。其基本命令格式如下: ```bash logrotate [OPTION...] &lt;configfile&gt; ``` 常用选项包括: - `-d, --debug`: 调试模式,测试配置文件是否有错误[^1]。 - `-f, --force`: 强制执行日志轮转,即使未达到条件也进行切割。 - `-m, --mail=command`: 将压缩后的日志发送至指定邮箱。 - `-s, --state=&lt;statefile&gt;`: 指定状态文件路径,记录上次运行的信息。 - `-v, --verbose`: 输出详细的日志轮转过程信息。 #### 二、logrotate 配置文件结构 `logrotate` 的核心功能通过配置文件实现,默认全局配置位于 `/etc/logrotate.conf` 文件中。此外,还可以在 `/etc/logrotate.d/` 目录下创建独立的日志轮转配置文件[^4]。 以下是常见的配置项及其作用: - `daily|weekly|monthly`: 设置日志轮转的时间间隔(每日、每周或每月)[^2]。 - `rotate count`: 定义保留多少份旧日志副本。 - `compress`: 启用压缩机制,通常使用 gzip 进行压缩。 - `delaycompress`: 推迟压缩直到下一个周期再对上一份日志进行压缩。 - `missingok`: 如果日志文件不存在,则忽略错误并继续处理其他日志。 - `notifempty`: 当日志为空时不进行任何操作。 - `postrotate ... endscript`: 在每次完成日志轮转后执行一段自定义脚本。 #### 三、logrotate 配置示例 以下是一个典型的 `logrotate` 配置文件示例,假设我们希望每天轮转一次 Apache Web Server 的访问日志,并将其保存为 `.gz` 格式的压缩文件: ```bash /var/log/apache2/access.log { daily # 每天轮转一次 rotate 7 # 保留最近 7 天的历史日志 compress # 对历史日志启用压缩 delaycompress # 下次轮转时才压缩当前日志 missingok # 若日志丢失则跳过而不报错 notifempty # 只有当日志非空时才会被轮转 create 0640 root adm # 创建新日志文件权限设置 sharedscripts # 所有匹配的日志共享同一组脚本 postrotate # 日志轮转完成后执行的操作 /usr/sbin/apachectl graceful &gt; /dev/null 2&gt;&amp;1 || true endscript } ``` 此配置说明: - 每天检查 `/var/log/apache2/access.log` 是否需要轮转; - 最多保留过去 7 天的日志; - 新生成的日志会被赋予 `root:adm` 用户和组以及 `0640` 权限; - 轮转结束后重新加载 Apache 服务以刷新日志位置。 #### 四、手动测试配置有效性 为了验证配置是否正确,在实际部署之前可以先运行调试命令来模拟整个流程: ```bash sudo logrotate -dfv /path/to/config/file ``` 其中: - `-d`: 开启调试模式,仅打印预期行为而不真正更改文件; - `-f`: 即使不符合时间或其他触发条件也会强制执行; - `-v`: 展现更详尽的过程描述以便排查潜在问题[^3]。 例如,针对上述 Apache 日志配置文件的手动测试可写成这样: ```bash sudo logrotate -dfv /etc/logrotate.d/apache2 ``` 如果一切正常,屏幕上应该能看到每一步的具体动作;如果有误,则会提示具体哪部分有问题供修正之用。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值