日志文件管理者:Logrotate

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

rotate:轮转、交替、转动、试转动


服务器在服务运行的时候,难免会生成大量日志,一般来说遇到日志过多的情况,就会写一个看门狗:监控磁盘容量的大小,如果磁盘剩余空间小于某个值,就去日志文件夹里把一个月或者几个月之前的废弃日志删除掉以达到释放磁盘空间的目的。


但是往往有的时候过期的日志很重要,或者即使是一周的时间内,也会生成容量非常可观的日志,那么就需要使用logrotate命令来管理这些日志,这个命令是linux自带的。


logrotate这个命令的用法请看:https://linux.cn/article-8227-1-rel.html 和 https://linux.cn/article-4126-1.html 。


这里简单做一个实验,首先,假设服务器里某个日志文件夹里的日志auc.log.10是这样的:

wKiom1lSQfXASwi8AAC-cpOGlH8365.png


然后在logrotate的配置文件是这么写的:

1
2
3
4
5
6
7
8
/mnt/hswx/auc/logs/auc .log.10 {             这里是目标日志的绝对路径
         daily        每天执行一次
         minsize 200M    文件容量大于200M开始处理,如果到了时间但是没有大于200M,不会处理
         compress          压缩
         dateext          文件会以日期为后缀
         create 777 root root    新建的那个日志文件属性是777
         rotate 2         保留最多2个文件
}


然后执行#logrotate -vf /etc/logrotate.conf,看到的效果是:

wKiom1lSRFLgwj-PAAGKxufJLQk441.png


命令执行后,服务器create了新的auc.log.10,而且属性变成了777,同时把原有的部分压缩成gz的格式。


上面那个测试的对象是已经过期的日志,现在我们要压缩当前的日志,目的是“在压缩了auc.log并且重命名之后,可以生成新的auc.log,同时这个新的auc.log会被写入”。


现在我们尝试一下,把原来的配置文件改成这样:

1
2
3
4
5
6
/mnt/hswx/auc/logs/auc .log {
         weekly
         minsize 200M
         compress
         rotate 2
}


但是执行之后,我们发现变成了这样:

wKioL1lSShOhzzWIAAFYalH58wE386.png


原来的auc.log不见了,而出现的auc.log.1里面的内容是原来auc.log的内容,可见原有的auc.log已经被顶掉了。这是因为我们上面的配置文件里面没有加上dateext,所以默认会以.1、.2、.3为后缀。


问题是我们没有生成auc.log,那么这段时间的日志就会找不到auc.log而凭空消失。可见这个方法没有达到我们的目的,需要改进。


但是只有重新启动这个auc进程才会生成auc.log,既然要解决这样的问题,我们很自然的就想到“kill -HUP”这种平滑启动的方式,但是要注意!kill -HUP 对deamon会进行重新读取配置启动,但是对于普通的进程只会把其杀死!而这个auc 就是一个普通的java程序,没有配套的守护进程。所以只能使用一般的重启方式来达到生成auc.log这个目的。


首先我们把原来的配置文件改成这样:

1
2
3
4
5
6
7
8
9
10
11
/mnt/hswx/auc/logs/auc .log {
         weekly     #每周执行
         dateext     #以日期作为后缀
         minsize 200M     #到达了200M自动执行,不然即使到了一周的时间也不执行
         compress     #压缩
         rotate 2     #最多保留两个文件
         sharedsripts    
         postrotate     #在执行完日志压缩之后就执行如下动作
                 /bin/bash  /root/restart .sh     #动作就是执行这个绝对路径的脚本
         endscript     #收工
}

而这个restart.sh的内容很简单: 

1
2
3
4
#!/bin/bash
cd  /mnt  && . /stopAUC .sh     #停止auc进程
cd  /mnt  && . /startAUC .sh     #启动auc进程
echo  HAHAHAHA!!!     #表示已经OK了,让我们发出杠铃一般的笑声


现在我们重新跑一下logrotate,#logrotate -vf /etc/logrotate.conf。看一下效果:

wKiom1lZuf3AT21VAADUljhenN0831.png


可以看到先把日志改名压缩,完事后也执行了restart.sh这个脚本,再日志里一看,auc.log也顺利生成了!

wKioL1lZusaTWnb1AABBW5caqHg141.png




参考资料:http://www.pythondev.org/post/8.html



 本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1942514

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
监控 Shell Linux
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
【Shell 命令集合 系统管理 】Linux 自动轮转(log rotation)日志文件 logrotate命令 使用指南
144 0
|
存储 Unix Linux
CentOS7下日志轮转logrotate简单入门与实践
CentOS7下日志轮转logrotate简单入门与实践
466 0
CentOS7下日志轮转logrotate简单入门与实践
|
5月前
|
监控 应用服务中间件 Linux
轻松解决日志文件积压问题:掌握logrotate的技巧
轻松解决日志文件积压问题:掌握logrotate的技巧
327 1
|
3月前
|
监控 关系型数据库 Linux
Linux日志管理工具:Logrotate(二)
Linux日志管理工具:Logrotate(二)
167 2
|
3月前
|
存储 监控 安全
Linux日志管理工具:Logrotate(一)
Linux日志管理工具:Logrotate(一)
205 0
|
5月前
logrotate 日志文件管理工具介绍和经典案例
logrotate 日志文件管理工具介绍和经典案例
126 0
|
6月前
|
XML 运维 监控
【深入探究 C++ 日志库清理策略】glog、log4cplus 和 spdlog 的日志文件管理策略
【深入探究 C++ 日志库清理策略】glog、log4cplus 和 spdlog 的日志文件管理策略
455 0
|
6月前
|
存储 监控 Ubuntu
日志切割工具-Logrotate实现nginx日志切割
日志切割工具-Logrotate实现nginx日志切割
85 0
|
6月前
|
Linux
linux下实现日志切割的两种方法 logrotate
linux下实现日志切割的两种方法 logrotate
307 0
|
存储 监控 Ubuntu
日志切割工具-Logrotate实现nginx日志切割
日志切割工具-Logrotate实现nginx日志切割
219 0