LogrotateはLinuxでログデータの損失を処理します。

LogrotateはLinuxでログデータの損失を処理します。

我々は、ログファイルを回転させるためにLinux logrotateを使用します。

例:

/location/tomcat/logs/* /location/jboss/log/* {
      copytruncate
      daily
      rotate 10
      compress
      size 20M
      olddir rotated
      create 0644 test test
}

LINUXで提供されるコピー切り捨ての定義によると、

copytruncate
          Truncate  the  original log file in place after creating a copy,
          instead of moving the old log file and optionally creating a new
          one,  It  can be used when some program can not be told to close
          its logfile and thus might continue writing (appending)  to  the
          previous log file forever.  Note that there is a very small time
          slice between copying the file and truncating it, so  some  log-
          ging  data  might be lost.  When this option is used, the create
          option will have no effect, as the old log file stays in  place.

そのため、循環中にログファイルのデータが失われます。約5〜20秒ほどログが失われたことがわかりました。データを失うことなく同じプロセスを実行する方法/構成はありますか?

答え1

syslog-ngでは、変数を使用して日付などの項目を含めるように出力ファイル名を設定できるため、失われることなく新しい日の午前12時に自動的に新しいファイルの書き込みを開始できることがわかります。

ただし、syslogプログラムをsyslog-ngに変更する必要があります。しかし、柔軟性が必要なようです。

答え2

.set log/entry size を使用するか、以下をlogrotate使用してログファイルのログ記録と回転から切り替えることができます。journaldsystemd-cat -t indentifier cmdline/etc/systemd/journald.confjournalctl --vacuum-size=, --vacuum-time=, --vacuum-files=

もう1つの方法は、logrotate事前回転/後回転機能を使用してサーバーを1日1回停止し、ログを回転してからサーバーを再起動することです。ログの回転時間はsystemdlogrotate.timerまたは(ana)cron操作によって異なり、午前4時またはトラフィックがゼロほど低い時間でスケジュールできます。

prerotate
    # stop jboss/tomcat server 
endscript

daily
rotate 10
compress
size 20M

postrotate
    #start servers
endscript

答え3

これが私がログにすることですCatalina

/var/log/tomcat/catalina.out {
        daily
        size 100m
        compressext .gz
        compress
        delaycompress
        compressoptions "-9"
        dateformat -%Y%m%d-%s
        ifempty
        copytruncate
        prerotate
                SIZE=$(stat --printf='%s' /var/log/tomcat/catalina.out)
                /bin/bash -c "tail -c +$SIZE -f /var/log/tomcat/catalina.out > /var/log/tomcat/tmp.log" &
        endscript
        postrotate
                pgrep tail | xargs kill -9
                cat /var/log/tomcat/tmp.log >> /var/log/tomcat/catalina.out
                rm /var/log/tomcat/tmp.log -f
        endscript
}

オプションで、コマンド自体の更新間隔を減らすために-swithを指定できます。そしてオプションを使用しているので、速度が速いです。tailtail-c

関連情報