logrotateを使用して古いログファイルを削除する方法

logrotateを使用して古いログファイルを削除する方法

私のCentOSには、多くのログファイルを生成するLogstashがあります。ログファイルは次のとおりです。

logstash-2023-03-09.log  logstash-2023-03-20.log                   logstash-deprecation-2023-03-08-1.log.gz  logstash-plain-2023-03-14-1.log.gz  logstash-plain-2023-03-25-1.log.gz
logstash-2023-03-10.log  logstash-2023-03-21.log                   logstash-deprecation-2023-03-09-1.log.gz  logstash-plain-2023-03-15-1.log.gz  logstash-plain-2023-03-26-1.log.gz
logstash-2023-03-11.log  logstash-2023-03-22.log                   logstash-deprecation-2023-03-10-1.log.gz  logstash-plain-2023-03-16-1.log.gz  logstash-plain-2023-03-27-1.log.gz
logstash-2023-03-12.log  logstash-2023-03-23.log                   logstash-deprecation.log                  logstash-plain-2023-03-17-1.log.gz  logstash-plain-2023-03-28-1.log.gz
logstash-2023-03-13.log  logstash-2023-03-24.log                   logstash-json.log                         logstash-plain-2023-03-18-1.log.gz  logstash-plain.log
logstash-2023-03-14.log  logstash-2023-03-25.log                   logstash-plain-2023-03-07-1.log.gz        logstash-plain-2023-03-19-1.log.gz  logstash-slowlog-json.log
logstash-2023-03-15.log  logstash-2023-03-26.log                   logstash-plain-2023-03-09-1.log.gz        logstash-plain-2023-03-20-1.log.gz  logstash-slowlog-plain.log
logstash-2023-03-16.log  logstash-2023-03-27.log                   logstash-plain-2023-03-10-1.log.gz        logstash-plain-2023-03-21-1.log.gz
logstash-2023-03-17.log  logstash-2023-03-28.log                   logstash-plain-2023-03-11-1.log.gz        logstash-plain-2023-03-22-1.log.gz
logstash-2023-03-18.log  logstash-2023-03-29.log                   logstash-plain-2023-03-12-1.log.gz        logstash-plain-2023-03-23-1.log.gz
logstash-2023-03-19.log  logstash-deprecation-2023-03-07-1.log.gz  logstash-plain-2023-03-13-1.log.gz        logstash-plain-2023-03-24-1.log.gz

これらはすべてLogstashによって生成されます。

logrotateそれでは、古いファイルを削除するために使用したいと思います。

これは私の設定ですlogrotate

[envoy@mirror-dfh0splogv logstash]$ cat /etc/logrotate.d/logstash
/var/log/logstash/logstash-20*.log {
    daily
    rotate 15
    compress
    delaycompress
}

/var/log/logstash/logstash-plain*.log.gz {
    daily
    rotate 5
}

私が望むのは事実非常に簡単です。ファイルの場合は、logstash-20*.log最新の15個のファイルのみをアーカイブしたいと思います。の場合、logstash-plain*.log.gz最新の5つだけを維持したいと思います。

ただし、コマンドを実行すると、logrotate --force /etc/logrotate.d/logstashすべてのファイル名が追加され、.1ファイルは削除されません。

logstash-2023-03-09.log.1  logstash-2023-03-20.log.1  logstash-deprecation-2023-03-07-1.log.gz  logstash-plain-2023-03-13-1.log.gz.1  logstash-plain-2023-03-24-1.log.gz.1
logstash-2023-03-10.log.1  logstash-2023-03-21.log.1  logstash-deprecation-2023-03-08-1.log.gz  logstash-plain-2023-03-14-1.log.gz.1  logstash-plain-2023-03-25-1.log.gz.1
logstash-2023-03-11.log.1  logstash-2023-03-22.log.1  logstash-deprecation-2023-03-09-1.log.gz  logstash-plain-2023-03-15-1.log.gz.1  logstash-plain-2023-03-26-1.log.gz.1
logstash-2023-03-12.log.1  logstash-2023-03-23.log.1  logstash-deprecation-2023-03-10-1.log.gz  logstash-plain-2023-03-16-1.log.gz.1  logstash-plain-2023-03-27-1.log.gz.1
logstash-2023-03-13.log.1  logstash-2023-03-24.log.1  logstash-deprecation.log                  logstash-plain-2023-03-17-1.log.gz.1  logstash-plain-2023-03-28-1.log.gz.1
logstash-2023-03-14.log.1  logstash-2023-03-25.log.1  logstash-json.log                         logstash-plain-2023-03-18-1.log.gz.1  logstash-plain.log
logstash-2023-03-15.log.1  logstash-2023-03-26.log.1  logstash-plain-2023-03-07-1.log.gz.1      logstash-plain-2023-03-19-1.log.gz.1  logstash-slowlog-json.log
logstash-2023-03-16.log.1  logstash-2023-03-27.log.1  logstash-plain-2023-03-09-1.log.gz.1      logstash-plain-2023-03-20-1.log.gz.1  logstash-slowlog-plain.log
logstash-2023-03-17.log.1  logstash-2023-03-28.log.1  logstash-plain-2023-03-10-1.log.gz.1      logstash-plain-2023-03-21-1.log.gz.1
logstash-2023-03-18.log.1  logstash-2023-03-29.log    logstash-plain-2023-03-11-1.log.gz.1      logstash-plain-2023-03-22-1.log.gz.1
logstash-2023-03-19.log.1  logstash-2023-03-29.log.1  logstash-plain-2023-03-12-1.log.gz.1      logstash-plain-2023-03-23-1.log.gz.1

答え1

これを行う正しい方法は、アプリケーション内のlog4j2構成にあります。例えば:

appender.rolling.strategy.delete.ifLastModified.age = 30d

logrotateLogstashによって効果的に置き換えられたファイルを削除するには、古いログファイルが実際に独自に作成されたことを確認する必要があります。したがって、このような古いファイルの場合は、回転したい元の logstash-2023-03-09.logファイルがあり、 logstash使用したい回転メカニズムは日付拡張子形式を追加することです-%Y-%m-%d.log。これにより、次のような構成ファイルが生成されます。

# for eg logstash-2023-03-09.log
"logstash" {
 dateext
 dateformat -%Y-%m-%d.log
 daily
 rotate 15
}

--forceこれが機能するには、「トリガー」ファイルが使用されても存在する必要があるため、logstash最初に実行する前に手動で空のファイルを作成する必要があります。たとえば、logstash-2023-04-01.log今日の日付の場合は回転する予定なので、createトリガーファイルを再生成するオプションも必要です。また、名前が変更された偽のファイルを削除する必要があります。構成ファイルは次のとおりです。

# for eg logstash-2023-03-09.log
"logstash" {
 dateext
 dateformat -%Y-%m-%d.log
 daily
 rotate 15
 create
 postrotate
  f=logstash-$(date +%Y-%m-%d).log; [ ! -s "$f" ] && rm "$f"
 endscript
}

削除するファイルが空であることを確認してください。ロギングアプリケーションが最初にファイルを作成した場合、logrotateはトリガーファイルを回転しません。

ファイルの同様の項目は次logstash-plain-2023-03-25-1.log.gz のとおりです。

# for eg logstash-plain-2023-03-25-1.log.gz
"logstash-plain" {
 dateext
 dateformat -%Y-%m-%d-1.log.gz
 daily
 rotate 5
 create
 postrotate
  f=logstash-$(date +%Y-%m-%d)-1.log.gz; [ ! -s "$f" ] && rm "$f"
 endscript
}

トリガーファイルlogstash-plainも手動で生成する必要があります。

これはハッキングなので、ファイルを別のディレクトリにコピーして使用しないでください--force。 2回目の実行のために24時間待ってから-v何が起こっているかを確認してください。

関連情報