日志轮替logrotate

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TM6zNf87MDG7Bo/article/details/79417638
序言

    

    每年都要买衣服,有的衣服旧了,有的衣服破了,所以总是要将旧衣服放在一边,进行归档,新的衣服放在一边,是正在使用的。


    在生成环境中,一个应用程序只要接受到请求就会产生日志,例如nginx会产生访问日志,错误日志,而如果日志都卸载一个文件中,那么日积月累,占用的磁盘空间也越来越多,从而就需要日志轮替。将老的日志进行归档压缩,并且限定总的日志空间大小,从而防止磁盘使用率满而无法定位问题。

logrotate介绍

    在linux系统中,其实已经自带了日志轮替的软件,那就是logrotate,而系统的日志文件都是使用这个进行轮替,从而在/var/log中,有各种带有后缀的日志文件。

640?wx_fmt=png&wxfrom=5&wx_lazy=1

    而这个实现的软件就是logrotate,主要是用来进行日志的归档工具之一。

640?wx_fmt=png&wxfrom=5&wx_lazy=1&retryload=1

扫描二维码关注公众号,回复: 5229550 查看本文章

    配置文件所在的目录如上所示,要想强制生效,那么可以执行如下指令(加参数-v主要显示过程的详细信息,-f表示强制):

640?wx_fmt=png

    参数的大概意思是,每周进行一次归档,保留的日志文件个数为10个,先拷贝,然后清空日志,这种会丢失部分日志,归档之后压缩,空不进行归档。

    

日志归档原理

    在进行日志归档的时候,总是想着日志会有部分的丢失,WHY?


    当进行日志轮替的时候,日志文件正在使用中,程序会不停的朝着日志文件写入日志信息,这个时候,直接将日志文件mv重名名进行归档,然后创建一个新文件,重启进程或者重新加载配置文件,那么中间必定有一个中断的时间,这个日志会丢失么?


    并不会,当程序写入文件的时候,其实使用的inode号,而不是文件名称,当你mv的时候,文件的inode号并不会发生改变,从而还是将相关的日志文件写到此文件中;当你再次重启或者重载的时候,那么新的日志就会写入到新的文件中,从而不会丢失日志。。。其实这也就是logrotate中的create方式。


    那么上面一种是不丢失日志,其中,还有一种就是丢失日志的方式,那就copytruncate,这种主要的使用场景就是应用程序能接受丢失部分的日志,主要的原因是应用程序不能接受重新加载日志文件的方式,从而需要丢失。


    而这种轮替的逻辑是,首先将当前的日志cp一份作为备份轮替,然后将当前的日志进行truncate,从而达到轮替的目的。


    而再次考虑一种场景。。。电商站点进行大促,在大促期间,日志的增长,总共的磁盘空间就40G,而日志的增长十几分钟就1G了怎么办,轮替?一个日志也很大很大。。。那么就要考虑另外的一种方案,除了正常的轮替之外,还需要一个根据日志文件的大小来进行判断的,例如设置为512M,如果文件到了512M,那么就进行一次轮替,进行压缩,然后归档,从而也就有了参数size来设定每个文件的大小。


容器的日志归档:

    在docker中,每个容器都有自己的日志,默认的驱动是json-file,也就是将日志保存在一个json文件中,那么如果请求过大,这个容器的日志空间会大大的占用宿主机的磁盘空间,从而需要设定日志参数--log-opt max-file=4  --log-opt max-size 25m,也就是从两个纬度来限定此容器的日志大小,从而最大也就使用100M的空间。

    这个设置是全局设置,也就是直接怼dockerd设置,设置后对所有的容器都生效。

640?wx_fmt=png

    容器也需要日志的轮替,不然。。。磁盘空间也扛不住。

640?wx_fmt=png

 

——NAN



    

    

640?wx_fmt=jpeg





猜你喜欢

转载自blog.csdn.net/TM6zNf87MDG7Bo/article/details/79417638
今日推荐