zoukankan      html  css  js  c++  java
  • 转一篇好文:日志切割工具logrotate解决Tomcat catalina.out日志过大的问题

    原文地址:https://www.cnblogs.com/along21/p/9198427.html

    感谢 阿龙 的这篇非常详细介绍logrotate的好文!

    一、介绍日志切割logrotate

      对于Linux系统安全来说,日志文件是极其重要的工具。不知为何,我发现很多运维同学的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过!

      logrotate程序是一个日志文件管理工具。用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用。可以节省磁盘空间例如,你可以设置logrotate,让/var/log/logfile日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。

     

    二、logrotate配置使用

    1、安装logrotate

    (1)系统版本,我使用的如下

    [root@along ~]# cat /etc/redhat-release 
    CentOS Linux release 7.3.1611 (Core) 
    [root@along ~]# uname -r
    3.10.0-514.26.2.el7.x86_6  

    (2)默认centos系统安装自带logrotate,直接使用yum 安装

    [root@along ~]# yum -y install logrotate  

    (3)软件包说明

    [root@along ~]# rpm -ql logrotate
    /etc/cron.daily/logrotate /etc/logrotate.conf #logrotate 自身的配置文件 /etc/logrotate.d #配置切割设置的目录

     注:logrotate的配置文件是/etc/logrotate.conf,通常不需要对它进行修改。

    日志文件的轮循设置在独立的配置文件中,它(们)放在/etc/logrotate.d/目录下。

     

    2、配置使用logrotate

    (1)准备测试日志

    ,然后在其中填入一个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

    [root@along ~]# vim /etc/logrotate.d/log-file
    /var/log/test/log-file {
            daily
            rotate 15
            compress
            delaycompress
            missingok
            notifempty
            dateext
            sharedscripts
            create 644 root root
            postrotate
                    /usr/bin/killall -HUP rsyslogd
            endscript
    }  

    (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,执行一次切割任务测试

    [root@along ~]# ll /var/log/log-file*
    -rw-r--r-- 1 root root 10485760 Jun 19 11:33 /var/log/test/log-file
    [root@along ~]# logrotate -vf /etc/logrotate.d/log-file 
    [root@along ~]# ll /var/log/log-file* 
    -rw-r--r-- 1 root root        0 Jun 19 11:33 /var/log/test/log-file
    -rw-r--r-- 1 root root 10485760 Jun 19 11:22 /var/log/test/log-file-20180619

     ③ 选项注释

      -f:选项来强制logrotate轮循日志文件

      -v:参数提供了详细的输出

     

    (5)设置logrotate定时任务

    [root@along ~]# crontab -e
    #auth root
    #date 2018-06-19
    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文件的路径

    [root@along ~]# vim /data/tomca/bin/catalina.sh
    # Get standard environment variables
    PRGDIR=`dirname "$PRG"`
    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)配置切割

    [root@along ~]# vim /etc/logrotate.d/tomcat_catalina
    /data/tomcat/logs/catalina.out {
            daily
            rotate 15
            missingok
            notifempty
            dateext
            compress
            delaycompress
            sharedscripts
            create 644 root root
            postrotate
                    if [ -f /var/run/tomcat.pid ]; then
                            kill -USR1 `cat /var/run/tomcat.pid`
                    fi
            endscript
    }

    (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定时任务

    [root@along ~]# crontab -e
    #auth root
    #date 2018-06-19
    00 00 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat_catalina &>/dev/null

    宠辱不惊,看庭前花开花落;去留无意,望天上云卷云舒
  • 相关阅读:
    Java零基础学习(四)JSP与Servlet
    Java零基础学习(三)封装继承多态
    vsftpd+nginx搭建图片服务器的一些问题
    1003. 我要通过!(20)(两种语言的运行时间差异)
    acm 1108 java做法
    acm 2020 用java实现
    acm 2519 java做法
    acm 2040 java做法
    acm 2003 java做法
    acm 2041 java的做法
  • 原文地址:https://www.cnblogs.com/netWild/p/15151579.html
Copyright © 2011-2022 走看看