내 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
. 두 번째 실행을 위해 24시간을 기다린 후 -v
무슨 일이 일어나고 있는지 확인하십시오.