Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 142|回复: 0

[默认分类] 日志切割工具logrotate解决Tomcat catalina.out日志过大的问题

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2020-8-5 13:36:51 | 显示全部楼层 |阅读模式
    一、介绍日志切割logrotate
      对于Linux系统安全来说,日志文件是极其重要的工具。不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过!
      logrotate程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用。可以节省磁盘空间。例如,你可以设置logrotate,让/var/log/logfile日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。
       
    二、logrotate配置使用
    1、安装logrotate
    (1)系统版本,我使用的如下

    1. [root@along ~]# cat /etc/redhat-release
    2. CentOS Linux release 7.3.1611 (Core)
    3. [root@along ~]# uname -r
    4. 3.10.0-514.26.2.el7.x86_6  
    复制代码


    (2)默认centos系统安装自带logrotate,直接使用yum 安装
    [root@along ~]# yum -y install logrotate   
      
    (3)软件包说明

    1. [root@along ~]# rpm -ql logrotate
    2. /etc/cron.daily/logrotate
    3. /etc/logrotate.conf   #logrotate 自身的配置文件
    4. /etc/logrotate.d   #配置切割设置的目录
    复制代码


    注:logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。
    日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。
       
    2、配置使用logrotate
    (1)准备测试日志
    创建测试日志/log-file,然后在其中填入一个10MB的随机比特流数据文件
    [root@along ~]# touch /var/log/log-file
    [root@along ~]# head -c 10M < /dev/urandom > /var/log/log-file
       
    (2)配置切割设置
    [root@along ~]# vim /etc/logrotate.d/log-file

    1. [root@along ~]# vim /etc/logrotate.d/log-file
    2. /var/log/test/log-file {
    3.         daily
    4.         rotate 15
    5.         compress
    6.         delaycompress
    7.         missingok
    8.         notifempty
    9.         dateext
    10.         sharedscripts
    11.         create 644 root root
    12.         postrotate
    13.                 /usr/bin/killall -HUP rsyslogd
    14.         endscript
    15. }  
    复制代码


      
    (3)配置文件参数说明

      
       
        配置参数  
        说明  
       
       
        monthly  
        日志文件将按月轮循。其它可用值为"daily","weekly"或者"yearly"。  
       
       
        rotate 5  
        一次将存储5个归档日志。对于第六个归档,时间最久的归档将被删除。  
       
       
        compress  
        在轮循任务完成后,已轮循的归档将使用gzip进行压缩。  
       
       
        delaycompress  
        总是与compress选项一起用,delaycompress选项指示logrotate不要将最近的归档压缩,压缩将在下一次轮循周期进行。这在你或任何软件仍然需要读取最新归档时很有用。  
       
       
        missingok  
        在日志轮循期间,任何错误将被忽略,例如“文件无法找到”之类的错误。  
       
       
        notifempty  
        如果日志文件为空,轮循不会进行。  
       
       
        dateext  
        切换后的日志文件会附加上一个短横线和YYYYMMDD格式的日期,没有这个配置项会附加一个小数点加一个数字序号  
       
       
        sharedscripts  
        在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。  
       
       
        create 644 root root  
        以指定的权限创建全新的日志文件,同时logrotate也会重命名原始日志文件。  
       
       
        postrotate/endscript  
        在所有其它指令完成后,postrotate和endscript里面指定的命令将被执行。在这种情况下,rsyslogd 进程将立即再次读取其配置并继续运行。  
       
       
        以上信息来源 "man logrotate"  
       
      

      
    (4)运行logrotate
    logrotate可以在任何时候从命令行手动调用
    ① 要调用为/etc/lograte.d/下配置的所有日志切割配置
    [root@along ~]# logrotate /etc/logrotate.conf   
    ② 要为某个特定的配置调用logrotate,执行一次切割任务测试

    1. [root@along ~]# ll /var/log/log-file*
    2. -rw-r--r-- 1 root root 10485760 Jun 19 11:33 /var/log/test/log-file
    3. [root@along ~]# logrotate -vf /etc/logrotate.d/log-file
    4. [root@along ~]# ll /var/log/log-file*
    5. -rw-r--r-- 1 root root        0 Jun 19 11:33 /var/log/test/log-file
    6. -rw-r--r-- 1 root root 10485760 Jun 19 11:22 /var/log/test/log-file-20180619
    复制代码


    ③ 选项注释
      -f:选项来强制logrotate轮循日志文件
      -v:参数提供了详细的输出
       
    (5)设置logrotate定时任务

    1. [root@along ~]# crontab -e
    2. #auth root
    3. #date 2018-06-19
    4. 00 00 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/log-file &>/dev/null
    复制代码


       
    三、使用logrotate处理tomcat catalina.out日志过大问题
    问题描述:一般在部署Tomcat后,运行久了,catalina.out文件会越来越大,对系统的稳定造成了一定的影响。
    1、定义tomcat的pid 文件
    (1)修改catalina.sh 文件,定义Tomcat的pid文件的路径

    1. [root@along ~]# vim /data/tomca/bin/catalina.sh
    2. # Get standard environment variables
    3. PRGDIR=`dirname "$PRG"`
    4. CATALINA_PID=/var/run/tomcat.pid
    复制代码


       
    (2)重启Tomcat,且查询pid
    [root@along ~]# systemctl restart tomcat.service
    [root@along ~]# cat /var/run/tomcat.pid
    21924
       
    2、配置切割设置
    (1)配置切割

    1. [root@along ~]# vim /etc/logrotate.d/tomcat_catalina
    2. /data/tomcat/logs/catalina.out {
    3.         daily
    4.         rotate 15
    5.         missingok
    6.         notifempty
    7.         dateext
    8.         compress
    9.         delaycompress
    10.         sharedscripts
    11.         create 644 root root
    12.         postrotate
    13.                 if [ -f /var/run/tomcat.pid ]; then
    14.                         kill -USR1 `cat /var/run/tomcat.pid`
    15.                 fi
    16.         endscript
    17. }
    复制代码


      
    (2)USR1信号解释
      USR1亦通常被用来告知应用程序重载配置文件;例如,向Apache HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。
      在没有执行kill -USR1 `cat ${pid_path}`之前,即便已经对文件执行了mv命令而改变了文件名称,tomcat还是会向新命名的文件" xxx.out_ 20180619"照常写入日志数据的。原因在于:linux系统中,内核是根据文件描述符来找文件的。
       
    3、测试执行
    [root@along ~]# logrotate -vf /etc/logrotate.d/tomcat_catalina
       
    4、设置logrotate定时任务

    1. [root@along ~]# crontab -e
    2. #auth root
    3. #date 2018-06-19
    4. 00 00 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat_catalina &>/dev/null
    复制代码


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-1 00:00 , Processed in 0.480331 second(s), 37 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表