본문 바로가기

카테고리 없음

Fluent Bit

  • 오픈소스 멀티플랫폼 로그 프로세서입니다.

1. 용어 설명

1) Event or Record

flunet bit가 log나 metric으로부터 가져오는 모든 데이터들을 event 또는 record로 간주합니다.

 

2) filtering

event를 변경 또는 삭제하는 과정을 filtering이라고 합니다.

필터링이 필요한 사례

  • ip 주소나 메타데이터와 같은 특정 정보를 이벤트에 추가합니다.
  • event 내용의 특정 부분 사용
  • 특정 패턴과 일치하는 event를 삭제

 

3) Tag

fluent bit으로 들어가는 모든 event에는 tag가 부여됩니다. 이러한 태그를 확인하여 필터 또는 출력 단계를 결정합니다.

대부분의 태그는 구성에서 수동으로 할당합니다. 태그가 설정되지 않으면 자동으로 해당 이벤트가 발생한 input plugin의 인스턴스명으로 태그를 부여합니다.

 

4) Timestamp

모든 event는 timestamp를 가지고 있으며 event가 생성된 시간을 말합니다.

형식은 unix time으로 표현됩니다.

SECONDS.NANOSECONDS

 

5) Match

수집 및 처리된 event를 하나 이상의 destination으로 전달할 수 있습니다.

태그가 정의된 규칙과 일치하는 event를 선택하는 간단한 규칙입니다.

  • ‘*’를 사용하여 모든 tag에 대해 match 할 수 있습니다.

 

6) Structured Messages

event에는 구조가 있을 수도 있고 없을 수도 있습니다.

구조는 event 안에 있는 key value 의미합니다.

no structured
"Project Fluent Bit created on 1398289291"

structured
{"project": "Fluent Bit", "created": 1398289291}
  • 둘 다 바이트 배열이지만 구조화된 메세지는 키와 값을 정의하므로 구조를 갖는 것은 더 빠른 작업을 구현하는데 도움을 줍니다.

 

2. Buffering

fluent bit는 데이터를 처리할 시스템 메모리(힙)를 임시적인 장소로 사용하여 기록할 로그가 전달되기 전에 저장되며, 해당 메모리 영역에서는 기록이 처리됩니다.

  • 기록을 어딘가에 저장하고 기록이 처리 및 전달되는 동안 계속 저장을 할 수 있다.

Buffering은 메모리 안에서 가장 빠른 매커니즘이지만 backpressure, 데이터 안전성, 메모리 최적화를 위해 특별한 작업을 해야할 수도 있습니다.

버퍼링 전략에 따라 fluent bit는 메모리에 기본 버퍼링 매커니즘을 제공하고 파일 시스템을 사용하여 선택적 보조 매커니즘을 제공합니다. 이 하이브리드 솔루션을 사용하면 모든 사용 사례를 안전하게 수용하고 데이터를 처리하는 동안 높은 성능을 유지할 수 있습니다.

하지만 두 매커니즘은 상호 배타적이지 않으며 데이터가 처리되거나 전달될 준비가 되면 데이터는 메모리 위에 존재하는 반면 다른 데이터는 처리될 준비가 되어 메모리로 이동할 때까지 파일 시스템에 있을 수 있습니다.

  • 메모리에 있거나 파일 시스템에 존재

 

3. DataPipeline

1) input

fluent bit는 다양한 input plugin을 제공합니다.

input plugin이 로드되면 내부 인스턴스가 생성됩니다. 생성된 인스턴스는 독립적입니다.

 

2) parser

구조화되지 않는 데이터를 구조화된 데이터로 변환할 수 있습니다.

**no structured**
192.168.2.20 - - [28/Jul/2006:10:27:10 -0300] "GET /cgi-bin/try/ HTTP/1.0" 200 3395

**structured**
{
  "host":    "192.168.2.20",
  "user":    "-",
  "method":  "GET",
  "path":    "/cgi-bin/try/",
  "code":    "200",
  "size":    "3395",
  "referer": "",
  "agent":   ""
 }

 

3) filter

데이터를 최종 목적지에 전달하기 전에 데이터를 변경합니다

input plugin처럼 내부 인스턴스에서 실행되고, 독립적인 구성을 가집니다. 또한 다양한 filter를 지원합니다.

 

4) buffer

데이터가 buffer 단계에 왔다면 불변상태가 됩니다. 그 이유는 raw 가 아닌 binary 형식이기 때문입니다.

그렇기에 더 이상의 수정이 불가능하고 버퍼 매커니즘을 통해 system failure로 인한 데이터 손실을 막을 수 있습니다.

 

5) router

routing은 필터를 거친 데이터를 최종적으로 다수의 목적지에 전달하는 핵심 기능입니다.

routing은 tag와 match 규칙에 의해 작동을 합니다.

[INPUT]
    Name cpu
    Tag  my_cpu

[INPUT]
    Name mem
    Tag  my_mem

[OUTPUT]
    Name   es
    Match  my_cpu

[OUTPUT]
    Name   stdout
    Match  my_mem
  • tag와 match가 일치하는 곳으로 출력됩니다.
  • 일부 데이터가 일치하지 않는 태그가 있는 경우 데이터는 삭제 됩니다.

 

6) output

output은 data의 최종 목적지를 결정합니다.

input과 마찬가지로 내부 인스턴스가 생성되고 독립적인 구성을 가집니다. 또한 다양한 plugin을 가집니다.