Fluent Bit 청크

1 개요[ | ]

Fluent Bit Chunks
Fluent Bit 청크

Fluent Bit를 사용할 때 청크(chunks)라는 것을 본 적이 있을 겁니다. 청크는 동일한 태그 아래에 동일한 유형의 여러 레코드를 그룹화하는 데이터 단위입니다.

파이프라인의 데이터 수집 워크플로우의 일부로, 다양한 소스에서 정보를 수집하는 역할을 하는 입력 플러그인은, 데이터를 MessagePack 버퍼의 레코드(records)로 인코딩하고 이를 태그(태그는 라우팅에 사용됨)와 연결합니다.

내부적으로, Fluent Bit는 수집(ingest)할 메시지 유형에 따라 레코드를 파이프라인으로 수집하는 두 가지 API를 제공합니다.

  • flb_input_chunk_append_raw(): 로그 수집, flb_input_chunk.c에 정의됨
  • flb_input_metrics_append(): 메트릭 수집, flb_input_metric.c에 정의됨

위에 언급된 함수를 호출할 때, API는 호출자가 지정한 정확히 동일한 태그를 포함하는 동일한 유형의 기존 청크를 찾도록 하며, 사용가능한 청크가 없으면 새 청크가 생성됩니다.

안정성과 유연성을 이유로, 입력 플러그인은 연관된 모든 청크가 메모리에만 위치하도록 지정할 수 있으며, 청크가 파일시스템에도 위치하도록 storage.type filesystem를 활성화할 수도 있습니다.

2 청크 I/O: 저수준[ | ]

저수준에서는, 모든 청크 관리 마술(magic)은 청크 I/O라는 작은 라이브러리에서 일어납니다. 이 라이브러리는 메모리 및 파일시스템과 같은 다양한 백엔드 유형, 체크섬, 파일 시스템 데이터 동기화 관리를 제공하는 데 도움이 됩니다.

파일 시스템 수준의 청크에는 고유한 포맷이 있지만, Fluent Bit가 저장하는 콘텐츠와는 완전히 무관합니다.

다음은 파일시스템에서 청크의 레이아웃입니다.

+--------------+----------------+
|     0xC1     |     0x00       +--> Header 2 bytes
+--------------+----------------+
|    4 BYTES CRC32 + 16 BYTES   +--> CRC32(Content) + Padding
+-------------------------------+
|            Content            |
|  +-------------------------+  |
|  |         2 BYTES         +-----> Metadata Length
|  +-------------------------+  |
|  +-------------------------+  |
|  |                         |  |
|  |        Metadata         +-----> Optional Metadata (up to 65535 bytes)
|  |                         |  |
|  +-------------------------+  |
|  +-------------------------+  |
|  |                         |  |
|  |       Content Data      +-----> User Data
|  |                         |  |
|  +-------------------------+  |
+-------------------------------+

Fluent Bit에서, 중요한 정보 영역은 메타데이터 및 콘텐츠 데이터입니다 .

3 메타데이터 및 콘텐츠 데이터[ | ]

Fluent Bit에서 메타데이터 및 콘텐츠 처리는 약간 변경되었는데, 특히 v1.8에 구현된 기존 버전과 새로운 v1.9 계열 사이의 변경사항이 그렇습니다.

3.1 Fluent Bit >= v1.9[ | ]

이 버전의 메타데이터에는 첫부분에 바이트 0xF1과 0x77을 세팅하여 포맷 버전을 식별하는 4바이트가 도입되었습니다. type이라는 세 번째 바이트는 청크가 저장하는 레코드 유형을 지정하는데, 값은 로그의 경우 0x0, 메트릭의 경우 0x1입니다. 현재 4바이트는 사용되지 않습니다.

다음 다이어그램은 데이터 형식을 보여줍니다.

                --   +---------+-------+
               /     |  0xF1   | 0x77  |  <- Magic Bytes
              /      +---------+-------+
Metadata     <       |  Type   | 0x00  |  <- Chunk type and unused byte
              \      +---------+-------+
               \     |      Tag        |  <- Tag associated to records in the content
                --   +-----------------+
               /     |  +-----------+  |
              /      |  |           |  |
Content Data <       |  |  records  |  |
              \      |  |           |  |
               \     |  +-----------+  |
                --   +-----------------+

Fluent Bit API는 v1.8 계열에 있는 이전 메타데이터 및 콘텐츠 형식과의 하위 호환성을 제공합니다.

4 Fluent Bit <= v1.8[ | ]

Fluent Bit <= 1.8.x까지는 메타데이터와 콘텐츠 데이터가 단순합니다. 메타데이터는 msgpack이 기록하는 태그 및 콘텐츠 데이터만 저장합니다.

                     +-----------------+
Metadata     <       |      Tag        |  <- Tag associated to records in the content
                --   +-----------------+
               /     |  +-----------+  |
              /      |  |           |  |
Content Data <       |  |  records  |  |
              \      |  |           |  |
               \     |  +-----------+  |
                --   +-----------------+

5 같이 보기[ | ]

6 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}