前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >日志轮替logrotate

日志轮替logrotate

作者头像
SRE运维实践
发布2019-07-08 12:18:57
1.1K0
发布2019-07-08 12:18:57
举报
文章被收录于专栏:SRE运维实践

序言

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

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

logrotate介绍

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

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

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

参数的大概意思是,每周进行一次归档,保留的日志文件个数为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设置,设置后对所有的容器都生效。

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

——NAN

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SRE运维实践 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档