logrotate日志切割

最近在搭建日志收集平台,将linux的部分日志收集到elasticsearch上通过kibana进行搜索展现,基本上是标准的ELK架构,但是agent端复用了已有的flume。在功能测试的时候,是将本地messages日志备份出来对备份的日志进行了切割测试。经过一周测试终于完成了,当时的内心是:

日志的切割,采用了linux自带的logrotate进行日志的切割。配置就不放了,主要就是去切割指定的文件,然后将切割的文件转移到agent收集工具监控的目录,然后将文件权限改一下就行。当功能性测试通过后,就需要进行正常的测试了,然后将切割的文件改为系统的messages日志,然后进行logrotate切割测试。然后崩溃的事情来了:

这是什么鬼!!!!!不是测试好好的吗???这到底是啥错啊?!!

当然作为一个坚强的小伙子,当经历过一段时间的WFK后,就果断的请来了谷歌大法了。

但是,当查了半天没结果的时候,在stackoverflow上看到有讨论说是logrotate的版本的BUG的时候,我整个人又。。。。。。。

当然作为一个坚强的小伙,我怎么可能真的去睡觉。在被卡了近半天以后,我决定还是去翻翻鸟哥linux的私房菜看看。然后看到了鸟哥linux私房菜里有这么一章《认识与分析日志文件》,然后我就通读里一遍。结果可想而知:

截取了其中一段内容如下:

加入了a这个属性之后,你的 /var/log/messages 登录文件从此就仅能被添加,而不能被删除,直到 root 以『 chattr -a /var/log/messages 』取消这个 a 的参数之后,才能被删除或移动喔!

也就是说,为了保证系统日志的准确性,linux对messages系统日志设置了只能追加不能删和移动,而logrotate需要将文件移动后新建一个新messages文件给系统。所以为了能用logrotate进行切割,我们需要先将messages文件的安全属性a给去掉,当然如果系统管理员直接将这个安全属性去掉的话,在生产环境来说还是不安全的设置。有什么办法能不需要管理员手工去调整安全权限呢?很多管理员第一想法是直接写个脚本去切割的时候改一下,切割完成后改回来不就完了。当然通过shell脚本是可以很好的完成,但是杀鸡焉用牛刀?这个时候logrotate的强大就体现出来了:logrotate可以在配置文件中配置logrotate启动前执行一些shell命令,然后logrotate启动后再执行一些shell命令。你看问题不是迎刃而解了吗?具体到详细的配置文件可以参考如下:

然后完美的完成了!logrotate可以完美切割日志文件,而不需要对当前messages的安全性做任何调整。何其方便!!!!

PS:还是要好好看书!还是要好好看书!还是要好好看书!重要的事情说三遍!

以上完成后,写个定时任务去跑就好了,然后可以到kibana上去搜索日志了:

以上,完美解决!

时间: 2024-10-11 20:42:59

logrotate日志切割的相关文章

rsyslog 结合logrotate日志切割处理

需求 公司日志系统收集规范为: /var/log/业务名/业务名+域名.log(不带日期) /var/log/业务名/业务名+域名-2017-04-25.log(为前一天的日期.业务不做压缩,由运维统一处理) /var/log/业务名 目录的权限为特定用户(系统中的uid.gid固定) 现状 harbor业务由docker容器启用logrotate来收集日志,日志生成规则为/var/log/日期/业务名.log 需要改造容器的logrotate配置实现要求,初期设想是通过logrotate直接实

logrotate日志切割配置

1 logrotate介绍 logrotate软件是一个日志管理工具,用于非分隔日志,删除旧的日志文件,并创建新的日志文件,起到"转储作用",可以为系统节省磁盘空间.一般centos系统已经自带安装好了. logrotate是基于crontab运行的,其脚本是/etc/cron.daily/logtotate,日志轮转是系统自发完成的,实际运行时,logrotate会调用配置文件/etc/logrotate.conf.可以在/etc/logrotate.d目录里放置自定义好的配置文件,

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

Logrotate 程序是一个日志文件管理工具.用于分割日志文件,压缩转存.删除旧的日志文件,并创建新的日志文件,下面就对logrotate日志轮转的记录: 1.1 Logrotate配置文件介绍 Linux系统默认安装logrotate,默认的配置文件: /etc/logrotate.conf /etc/logrotate.d/ logrotate.conf:为主配置文件logrotate.d:为配置相关子系统,用于隔离每个应用配置(Nginx.PHP.Tomcat...)  Logrotat

Syslog-ng+Rsyslog收集日志:logrotate日志切割、轮询(七)

很多软件都自带切割日志,比如tomcat可以按时间来命名.rsyslog可按日期生成文件,但是并不支持用"%$year%-%$month%-%$day%"这些变量来读取文件(目前版本号:rsyslog-8.17.0-1.el6.x86_64). 那么,就要用到日志轮询logrotate. 概要,配置. 全局配置:/etc/logrotate.conf 局部配置:/etc/logrotate.d/ 为了便于管理,自定义的配置都放到/etc/logrotate.d/里 使用. 创建文件to

logrotate日志切割、轮询、删除

1.创建轮询日志文件,加入如下内容,log-file是我自已指定的文件日志名字 [[email protected] mnt]# cat /etc/logrotate.d/log-file /mnt/log-file { size=100M rotate 5 compress dateext dateformat %Y-%m-%d-%s delaycompress notifempty missingok create 644 root root postrotate /usr/bin/kill

logrotate日志切割如何才能优雅

logrotate

Linux下logrotate日志轮转操作梳理

对于Linux系统安全来说,日志文件是极其重要的工具.logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用.可以节省磁盘空间.下面就对logrotate日志轮转操作做一梳理记录: 1)配置文件介绍Linux系统默认安装logrotate工具,它默认的配置文件在:/etc/logrotate.conf/etc/logrotate.d/ logrotate.conf 才主要的配置文件,logrotate.d 是一个目录,该目

Tomcat日志切割(logrotate)

logrotate是个强大的系统软件,它对日志文件有着一套完整的操作模式,譬如:转储.邮件和压缩等,并且默认logrotate加到cron(/etc/cron.daily/logrotate)作为每日任务执行.自动有了logrotate,我想不用再自己写日志切割脚本. 如下对Tomcat日志catalina.out日志切割 # ls -lh /usr/local/tomcat/logs/catalina.out -rw-r--r-- 1 www www 14M Aug 28 15:55 /usr

日志切割:logrotate

logrotate 用于切割日志,logrotate 的配置文件是 /etc/logrotate.conf ,直接配置该文件即可实现日志切割 [[email protected] ~]# cat /etc/logrotate.confweekly # 表示每周切割一次 rotate 4 # 表示最多切割成几个文件 create # 表示切割后生成一个新的文件 dateext # 表示切割后以日期的形式命名 include /etc/logrotate.d # 该配置文件加载的其他配置文件 /va