[Error/ELK/LogStash] pipeline has terminated

2025. 11. 19. 23:36Backend/ELK

 

😭Error

 

ELK 설정 변경을 위해 테스트를 할 수 있는 서버에서 ELK stack을 만져보고 있었습니다. ELK stask 중 Filebeat에서 수집한 로그들을 수집하는 logstash를 재기동하려는데, LogStash가 실행되다가 자동으로 꺼지는 겁니다. 

 

그리고 LogStash 프로세스 기록을 남기는 로그에서 다음과 같은 로그가 마지막으로 발견된 이후, 새롭게 작성되는 로그는 발견할 수 없었습니다.

Pipeline has terminated {:pipeline_id=>"main", :thread=>"#<Thread: ~~~~ run>"}

 

 

😂원인

그래서 ChatGPT 검색과 구글링을 병행하며 원인을 수소문하기 시작하였습니다.

 

1. ElasticSearch 설정 파일 수정 때문?

ElasticSearch 설정 파일을 수정한 뒤에, LogStash를 재기동하다가 위와 같은 이슈가 발생했었습니다. 모든 조건이 동일하다는 가정하에, 수정 파일에서 변경한 점이 LogStash에 영향을 주었을지 찾아봤습니다. 하지만 제가 만졌던 부분은 xpack과 관련된 부분이고, LogStash => ElasticSearch 로 연결되는 지점에서 인증 등 내역들을 수정한 적은 없었습니다.

 

2. ELK stack 기동 순서?

저와 같은 경우에는, ELK를 구동할 때 순서가 크게 중요하지 않았습니다. 애초에 ElasticSearch가 종료되어 있으면, LogStash가 ElasticSearch에 계속 연결 시도를 하는 로그를 남기는 것 외에는 특이사항이 없었습니다.

 

3. jvm option 이 문제?

Local에서 ElasticSearch 등을 구동할 때, java 버전이 중요합니다. 예를 들어 ElasticSearch는 옛날 버전인데, java는 최신 버전이라면 에러가 발생할 수 있습니다. 하지만 서버 내 ElasticSearch 에 맞는 java 버전을 사용하고 있었습니다.

 

4. Out of Memory?

ElasticSearch와 LogStash를 처음 기동하게 되면 CPU 사용량도 증가하고 Mem 사용량도 증가하게 됩니다. 혹시나 급격한 증가로 서버에서 OOM이 발생하여 LogStash를 kill 할 수도 있겠다는 생각이 들었습니다. 

 dmesg --ctime | grep -Ei "killed process|oom|out of memory|java"

 

그래서 과거 기록을 찾아봤는데, logstash가 재기동 되었다가 종료되는 시점에 남겨진 oom 흔적은 없었습니다.

 

📝해결

예전에 개발을 막 배우기 시작할 때, 선생님이 해주셨던 이야기가 있었습니다.

 

"띄어쓰기가 중요할 수 있다."

 

네. 그렇습니다. 띄어쓰기가 원인이었습니다.

 

외부 원인이 없다면, 내부 원인이 있을 수 있겠다 싶었습니다. Pipeline 이 왜 종료된 것일까. LogStash 설정 파일을 점검하기 시작하였습니다.

# 정상
pipeline.batch.size: 125
pipeline.batch.delay: 50

# 에러 원인
  pipeline.batch.size: 125
  pipeline.batch.delay: 50

 

yml 파일에서 띄어쓰기는 굉장히 민감한 부분입니다. 그런데 해당 파일 띄어쓰기가 잘못 작성되어 있었던 겁니다. 

 

그래서 '정상'처럼 변경을 하고 LogStash를 재기동하였습니다. 그러자 LogStash가 로그를 수집하여 ElasticSearch에 잘 넘겨주었고, Kibana에서 수집된 로그들을 확인할 수 있게 되었습니다.

 

References

1. logstash.yml