2015년 2월 12일 목요일

logstash vs flume vs fluentd

중앙 집중 로깅 시스템

방법론

  • 스크립트로 중앙 서버로 복사하는것
    단순 중앙 저장, 네트워크 에러등 에러 처리 힘듬
  • syslog
    message generation client, message storage system, message report and analysis
    • implementation
    • syslog-ng
    • rsyslog
  • 데이터 량이 많아지고 여러 요구 조건이 나오면서 새로운 디자인이 나옴
    • 이벤트 스트림에 특화됨
    1. 각서버당 로깅 클라이언트를 뛰움
    2. 클라이언트에서 중앙 서버(클러스터 or 어그리게이터)로 로깅을 쏨
    3. 모은 후 분산 그리고 확장 가능한 저장소에 저장(하둡 등)
    • 수평적으로 분산 처리가 되어야함

Apache Flume

  • 언어 : java
  • Run : JVM
하둡을 주 타겟으로 만듬
소스 -> 채널 -> 싱크
  1. 소스
    로깅을 만들어내는주체
  2. 채널(큐)
    로깅을 보내는 곳(버퍼 등의역활)
  3. 저장소(싱크)
    채널에 쌓여 있는 로깅데이터를 순서대로 원하는 저장소에 저

지원하는 소스

  • Avro Source.
  • Thrift Source.
  • Exec Source.
  • NetCat Source.
  • Syslog Sources.

지원하는 싱크

  • HDFS Sink.
  • Logger Sink.
  • Avro Sink.
  • Thrift Sink.
  • File Roll Sink.
  • HBase Sink.
  • ElasticSearch Sink.

장점

  • guarantees data delivery
  • scales horizontally
  • high throughput
  • fault tolerance

Log stash

  • 언어 : JRuby
  • Run : JVM
로그전달자(lumberjack) -> Broker(redis) -> LogStash(indexer) -> Search & Storage
  • 로그전달자
    각 클라이언트에서 생성되는 로그를 중앙 서버로 전송
  • Broker
    중간 또는 분산 처리된 레디스 서버에 로그를 저장
  • LogStash
    Broker 에 싸인 데이터를 처리 해서 처리 후 저장 또는 걍 저장
  • search & storage ( Elasticsearch & Kibana)
    자동화된 툴을 사용해 로그 모니터링 등 (단 다른 애들도 뒤에 붙여 쓸수 있음)

Fluentd

  • 언어 : CRuby
  • Run : vanilla(ruby)
Fluentd(클라이언트) -> Fluentd(컬랙터) -> Storage
  • Fluentd(클라이언트)
    각 클라이언트에서 생성되는 로그를 중앙 서버로 전송
  • Fluentd(컬랙터)
    중간 또는 분산 해서 저장
  • Storage
    컬랙터에서 S3등에 저장

참고