로그 수집기

가장 대표적인 로그 수집기로 Fluentd와 Logstash가 있다.

Logstash는 20개의 Fixed Size Event 제한 때문에 보통 Buffer로 별도의 큐(카프카)를 사용한다. 또한 로그 파일 전송을 위해선 Filebeat를 사용한다.

Fluentd는 내부의 버퍼링 시스템(인메모리, 디스크 모두 사용 가능)을 통해 대용량 처리도 가능함. 로그 전송

데이터 파이프라인 구축 시 신경쓸 점

  1. 서비스에서 필요한 데이터는 무엇인가 고민하기
  2. 더 편리하게 사용할 수 있는 Input & Output Format은 무엇일까 고민하기
  3. Event들을 Join해서 어떤 View를 만들 수 있을 지 고민해서 자동화시켜놓기 (비정규화)
  4. 사내에서 데이터를 얼마나 많이 보고 사용하는가 (비용 고려)
  5. 공식적인 데이터 스키마가 존재하는가?
  6. 테스트 환경을 구축할 것인가? MOCK 데이터베이스를 두고 테스트 해보기 등

로그의 생성시간과 수집시간이 다를 때?

ETL에서 BATCH 작업을 돌려 Firebase나 다른 소스에서 로그를 추출해 S3에 저장하는 워크플로우가 있다고 하자. 만약 이전에 생성된 로그가 정시에 들어오지 않는다면?

  1. 우선 Batch 처리하는 시간이나 Queue에 들어가는 시간, Processing되는 시간 등 Ingestion을 거치면서 들어가는 시간들을 로그에 추가로 기억한다. 그리고 이 시간을 바탕으로 뒷 단에서 PostProcessing한다.
  2. Batch Processing을 통해 이를 보정한다 (Sensor Operator를 통해 매시간마다 추가된 로그 데이터가 있으면 이를 읽어와서 이를 보정한다거나)
  3. Message by Message로 이벤트 시간을 기준으로 파일에 Write한다.