본문 바로가기

Dev Tech/Elasticsearch

[EFK] Fluentd

EFK 에서 F 를 맡고있는 Fluentd 에 대한 간략한 개념에 대해 정리

 

What is Fluentd  ?

Fluentd is an open source data collector, which lets you unify the data collection and consumption for a better use and understanding of data.

Fluentd는 데이터 수집 및 전송을 위한 오픈 소스 데이터 수집기이다. 데이터를 조금 더 효율적이고, 이해하기 쉽게 하기 위한 목적으로 사용된다고 한다. 주로 로그 데이터의 수집, 변환, 저장을 효율적으로 처리하기 위해 사용 ( 다양한 Source 로부터 데이터를 수집해서, 이를 Destination 에 Trans 하는 역할을 수행 )

 

JSON 을 사용한 통합 로깅 : 데이터 형태를 JSON 형태로의 변환 등을 통해서, 여러 종류의 로그 데이터들의 수집/필터링/버퍼링/출력을 통합처리 할 수 있고, 이를 통해서 데이터 처리/분석 단계에서의 사용이 용이할 수 있다.
플러그형 아키텍쳐 : 다양한 플러그인을 통해 기능을 확장하여, 다양한 I/O 데이터를 처리할 수 있다
최소한의 자원 사용 : C , Ruby 로 개발되어서 시스템 리소스를 사용량이 적음 ( Memory 40mb 에서 13,000event/sec 처리 )
준비된 신뢰성 : Memory / File-based Buffering ( 메모리/파일시스템에 저장 ) 기능을 제공하고, Failover 및 HA(High availability) 설정을 통해서 장애 대응이 가능

fluentd lifecylce : 플러그형 아키텍처, 엔진외에는 플러그인 기능을 제공하여 다양한 처리가 가능

 

Fluentd 생명주기

Fluentd의 생명주기는 데이터를 수집하여 전송하는 전 과정을 포함합니다. 아래는 Fluentd의 기본적인 생명주기 단계입니다:

  1. Input 단계: 다양한 데이터 소스로부터 로그를 수집합니다. in_tail, in_syslog와 같은 Input 플러그인이 이 역할을 수행합니다.
  2. Buffer 단계: 수집된 로그 데이터를 메모리 또는 파일 시스템에 버퍼링합니다. 이는 네트워크 지연이나 장애가 발생했을 때 데이터 손실을 방지합니다.
  3. Filter 단계: 버퍼링된 로그 데이터를 필터링하고 변환합니다. filter_grep, filter_record_transformer와 같은 플러그인이 이 단계에서 사용됩니다.
  4. Output 단계: 처리된 로그 데이터를 지정된 목적지로 전송합니다. out_file, out_elasticsearch, out_http와 같은 Output 플러그인이 이 역할을 수행합니다.

 

주요 플러그인 유형과 대표 플러그인

  1. Input Plugins: 데이터를 수집하는 역할을 합니다.
    • in_tail: 파일에서 로그 데이터를 읽어옵니다.
    • in_syslog: Syslog 메시지를 수신합니다.
    • in_forward: 다른 Fluentd 노드에서 전달된 로그를 수신합니다.
  2. Filter Plugins: 데이터를 변환하거나 필터링합니다.
    • filter_grep: 특정 조건에 맞는 로그만 필터링합니다.
    • filter_record_transformer: 로그 레코드의 내용을 변경합니다.
    • filter_parser: 로그 내용을 파싱하여 특정 필드를 추출합니다.
  3. Output Plugins: 데이터를 저장하거나 전송합니다.
    • out_file: 로그를 파일에 저장합니다.
    • out_elasticsearch: 로그를 Elasticsearch에 전송합니다.
    • out_http: 로그를 HTTP를 통해 전송합니다.
  4. Buffer Plugins: 데이터를 버퍼링하여 손실을 방지합니다.
    • buf_file: 로그를 파일 시스템에 버퍼링합니다.
    • buf_memory: 로그를 메모리에 버퍼링합니다.
  5. Parser Plugins: 로그 형식을 파싱합니다.
    • parser_json: JSON 형식의 로그를 파싱합니다.
    • parser_regex: 정규 표현식을 사용하여 로그를 파싱합니다.
  6. Formatter Plugins: 로그를 특정 형식으로 변환합니다.
    • formatter_json: 로그를 JSON 형식으로 변환합니다.
    • formatter_ltsv: Labeled Tab-separated Values 형식으로 변환합니다.
  7. Storage Plugins : 수집된 데이터를 다양한 스토리지 시스템에 저장
    • out_s3 : AWS S3에 로그 데이터를 저장 플러그인
    • out_mongo : MongoDB 로그 데이터 저장 플러그인
  8. Service Discovery Plugins : 로그 수집 및 전송을 위한 동적 구성 및 자동화된 서비스 등록을 지원
    • in_kubernetes_nodes : 쿠버네티스 클러스터 내에서 노드를 자동으로 탐색하고 로그를 수집
    • in_prometheus_monitor : Prometheus 모니터링 시스템에서 메트릭스를 수집
    • out_etcd : etcd를 통해 서비스 디스커버리 및 구성 관리를 수행
  9. Metrics Plugins : Fluentd의 성능 모니터링 및 로깅을 위해 다양한 메트릭 데이터를 수집
    • in_monitor_agent : Fluentd의 상태와 메트릭 데이터를 수집하는 플러그인
    • out_prometheus: Prometheus로 메트릭 데이터를 전송하는 플러그인
    • filter_prometheus : Fluentd 로그를 Prometheus 메트릭으로 변환하는 필터 플러그인

참고 

https://www.fluentd.org