0. 들어가며
ElasticStack을 구축하며 beat와 logstash를 연동하여 운영하는데, beat를 통해 데이터를 수집하는 서버에서 아래 이미지와 같은 에러가 지속적으로 발생함을 알수있었다.
해당 글은 지속적으로 발생하는 해당 에러를 조치하는 방안을 작성한 글이다.
1. 원인 파악
원인을 파악하기 위해 클라이언트(beat)에서 로그스태시로 telnet 접속시도를 했는데 정상적으로 커넥션이 되는걸 확인할 수 있었다. 즉 통신에는 문제가 없음을 확인하였고, 로그를 확인해보니 내용에 나와있는 connection reset by peer의 경우 클라이언트가 아닌 서버측에서 RST를 던져서 접속이 끊길때 발생하는 에러이기에, RST를 던진쪽이 서버(logstash)인지
상단 또는 네트워크장비인지 확인을 하기위해 방화벽장비에서 패킷을 캡쳐하여 와이어샤크로 확인을해봤다.
위 이미지와 서버내 tcpdump와 같은 추가적인 확인을 통해 서버(logstash)에서 RST를 던지고 있음을 확인하였고, 추가로 서버에서 통신을 끊는 이유를 확인하기 위하여 logstash에서 타임아웃관련 옵션을 공식 docs를 통해 확인해봤다.
Client_inactivity_timeout
Beats input plugin | Logstash Reference [8.15] | Elastic
If you configure the plugin to use 'TLSv1.1' on any recent JVM, such as the one packaged with Logstash, the protocol is disabled by default and needs to be enabled manually by changing jdk.tls.disabledAlgorithms in the $JDK_HOME/conf/security/java.security
www.elastic.co
위 공식 Docs 링크에 나와있듯이 logstash의 input plugin의 옵션중 client_inactivity_timeout이라는 옵션이 있으며,
해당 옵션은 클라이언트가 inactivity상태라면 X초후에 끊는다 라는 의미로 보인다.
* Close Idle clients after X seconds of inactivity.
기본값은 60초이므로 즉 예상하건데, beat에서 60초내에 데이터를 보내지않는다면 접속을 끊는다는 의미인거같다.
2. 해결방안
이미 위에 내용에서 예상했겠지만, 간단한 조치방법은 해당 옵션을 활성화 하여 알맞은 시간을 할당하는 방법이다. 필자는 타임아웃값을 30분(1800초)으로 줬으나, 만약 빈번하게 데이터흐름이 발생한다면 좀더시간을 줄여도 괜찮을듯하다.
vi /etc/logstash.conf
input {
beats {
port => 5044
client_inactivity_timeout => 1800
}
}
####중략######
'Project > ElasticStack' 카테고리의 다른 글
beat-rsyslog 연동 이슈 (1) | 2024.09.26 |
---|---|
ElastAlert2 Alert UTC 타임존 문제 해결 (0) | 2024.09.25 |
로그 모니터링 시스템 구축 도전기 #2 로그 파싱룰 잡기(Grok) (0) | 2024.02.23 |
로그 모니터링 시스템 구축 도전기 #1 index? query? documents? (0) | 2024.02.02 |
로그 모니터링 시스템 구축 도전기 #0.1 ElastAlert (0) | 2024.01.28 |