-
Logstash에서 S3 input을 정상적으로 가져오지 못할때소프트웨어개발 이야기 2020. 2. 11. 17:40
Logstash에서 input으로 S3 플러그인을 사용할 경우, 데이터를 정상적으로 불러오지 못하는 경우가 있다. 본글에서는 다양한 원인 중 가장 마지막에 읽었던 지점을 저장하는 sincedb_path와 관련된 내용을 정리한다.
Logstash에서 S3에 있는 파일을 불러와서 ETL 작업을 수행하는 모듈을 개발하다 보면, 아래처럼 더이상 데이터를 가져오지 않고 멍하니 멈춰 있는 경우가 있다. ElasticSearch로 연계한 경우, 인덱스를 아무리 지워도 같은 현상이 반복된다.
logstash log 이는 Logstash input 플러그인에서 데이터를 불러올때 마지막으로 읽어온 부분을 파일(sincedb)로 저장하기 때문이다. Logstash는 입력 데이터가 변경되면 sincedb에서 마지막 부분 정보를 찾아 그 이후 데이터를 불러온다. Logstash를 재시작하더라도 데이터가 변경되지 않는 한 한번 읽어온 데이터는 다시 불러오지 않는다. (개발하면서 멈춰있는 로그 내용에 당황하지 말자 =.=)
이를 해결하는 방법은 간단하다.
마지막으로 읽어온 부분을 저장하고 있는 파일(sincedb)을 지우면 된다.
다음 순서대로 진행하자.
1. logstash 종료
2. sincedb 파일 삭제
sincedb 파일은 Logstash input 플러그인 로그부분에서 아래와 같이 확인할 수 있으며, 별도 지정이 없으면 기본으로 "{path.data}/plugins/inputs/s3/"에 저장된다.
Generated file for the sincedb {:filename=>"/var/lib/logstash/plugins/inputs/s3/sincedb_20bf9f6e2379336a61c1e3add60987cf"}
sincedb 파일위치를 찾아서 해당 디렉토리에 있는 sincedb 파일을 삭제한다.
3. logstash 시작
추가로,
sincedb의 위치는 s3 플러그인의 sincedb_path 속성을 통해 지정할 수 있다.
S3 input plugin | Logstash Reference [7.6] | Elastic
Plugin version: v3.4.1 Released on: 2018-09-14 Changelog For other versions, see the Versioned plugin docs. For questions about the plugin, open a topic in the Discuss forums. For bugs or feature requests, open an issue in Github. For the list of Elastic s
www.elastic.co
ETL 개발이나 테스트 단계에서는 아래와 같이 sincedb 정보를 저장하지 않고 일정 반복 시간을 설정하여 주기적으로 호출되도록 진행하는 것이 여러모로 도움이 된다.
input { s3 { // sincedb 파일이 저장되지 않도록 처리 sincedb_path => "/dev/null" // 120초 간격으로 데이터 로딩 interval => 120 } }
'소프트웨어개발 이야기' 카테고리의 다른 글
유튜브(Youtube) API - 8.페이징 (0) 2020.02.12 Logstash 복수 파이프라인 파일 (0) 2020.02.12 Logstash에서 날짜, 시간 데이터 변경하기 (0) 2020.02.11 Postman 사용하기 (0) 2020.02.10 웹 서버 로그 분석도구 GoAccess (0) 2020.02.10