私の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
logrotate
Logstashによって効果的に置き換えられたファイルを削除するには、古いログファイルが実際に独自に作成されたことを確認する必要があります。したがって、このような古いファイルの場合は、回転したい元の
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
何が起こっているかを確認してください。