본문 바로가기

IT Knowledge

Fluent Bit - k8s Loging

Fluent Bit 란?


일반적으로 Loging은 Elastic search, LogStatsh, Kibana 의 앞자리를 따서 ELK 스택이라고 불립니다.

그러나 k8s 처럼 클러스터 환경에서 로그를 수집하는데 LogStatsh 대신 Fluent Bit 을 사용하여 EFK 라고 불리는 경우도 많습니다.

Fluent Bit는 로그 수집기 중 가장 가볍고(다른 수집기에 비해 10배 이상 가볍습니다.)

분산환경을 고려하여 만들어져 k8s 클러스터 환경의 로그 파이프라인 도구로 각광받고 있습니다.
Docs

 

특징


경량화 : 컨테이너 및 마이크로서비스 아키텍처를 고려하여 설계되었습니다.

다양한 플러그인 : 로그 파일, 메트릭, HTTP 등 다양한 소스에서 데이터를 수집할 수 있도록 플러그인을 제공합니다.

다양한 출력 : ElasticSearch, Kafka, Fluented 등 다양한 출력 플러그인을 제공합니다.

스트림 처리 : 메모리 또는 파일 기반의 버퍼로 데이터 스트림을 효율적으로 처리할 수 있습니다.

파이프라인 처리 : 필터를 통한 데이터 수정이나 데이터 처리가 가능하다

쉬운 배포 : Helm, YAML 등으로 쉬운 배포 및 설정이 가능하다

 

구성 요소


fluent-bit-daemonset : k8s의 각 노드마다 로그를 수집하는 fluent-bit pod 가 daemonset으로 배포됩니다.

*AWS 환경에 인증이 필요한 경우 fluent-bit pod 에 iam을 연동하여 한다면 oidc를 만들어 SA에 iam을 연동해야 합니다.

fluent-bit-configmap : configmap에 fluent-bit의 동작을 정의 해줘야 합니다.

fluentd : fluent-bit에서 전달한 로그를 수집하는 역할을 한다

 

 파이프라인


Input : fluent-bit이 수집한 로그, 메트릭을 event 또는 record 라고 하며 해당 파이프라인에서 어던 recode를 수집할 지 정의합니다.

Parser : 비 정형데이터를 정형 데이터로 변경할 수 있으며 정규표현식 기법을 사용합니다. docker 파서는 json 형태로 변경해 log라는 key에 stdout을 저장합니다.

Filter : 옵션을 지정하여 원하는 정보만 전송할 수 있습니다.

Buffer : 메모리나 파일에 데이터를 임시 저장할 수 있으며 tag 단위로 chunk가 생성됩니다.

Output : 어디로 보낼지 지정하는 부분으로 CloudWatch, S3, HTTP 등 원하는 곳으로 recode를 보낼 수 있습니다.

설치


Install Docs

 

Getting Started with Fluent Bit | Fluent Bit: Official Manual

A guide on how to install, deploy, and upgrade Fluent Bit

docs.fluentbit.io

SA, Role, Rolebinding, Configmap, Daemonset을 설치 해야하며 fluent-bit은 k8s 환경을 위한 manifest yaml을 제공합니다.

apiVersion: v1
kind: ConfigMap
date:
fluent-bit.conf: |
    [SERVICE]
      Parsers_File      C:\\fluent-bit\\parsers.conf

    [INPUT]
      Name              tail
      Tag               kube.*
      Path              C:\\var\\log\\containers\\*.log
      Parser            docker
      DB                C:\\fluent-bit\\tail_docker.db
      Mem_Buf_Limit     7MB
      Refresh_Interval  10

    [INPUT]
      Name              tail
      Tag               kubelet.err
      Path              C:\\k\\kubelet.err.log
      DB                C:\\fluent-bit\\tail_kubelet.db

    [FILTER]
      Name              kubernetes
      Match             kube.*
      Kube_URL          https://kubernetes.default.svc.cluster.local:443

    [OUTPUT]
      Name  stdout
      Match *

parsers.conf: |
    [PARSER]
        Name         docker
        Format       json
        Time_Key     time
        Time_Format  %Y-%m-%dT%H:%M:%S.%L
        Time_Keep    On

Service

fluent-bit 의 전반적인 동작을 정의

Flush : 버퍼 데이터를 출력 플러그인으로 플러시하는 초 간격

Log_Level : 로그 출력 레벨 설정 (info, error, debug 등)

Parsers_File : parser의 정의를 포함하는 파일의 이름

Input

로그 데이터 입력 소스를 정의

Name : 입력 플러그인의 이름을 지정, tail은 파일의 내용을 실시간으로 읽음)

Path : 로그 파일의 경로를 지정

Parser : 로그 파일을 파싱하기 위한 Parser의 이름을 지정

Tag : 입력 데이터에 할당할 태그 지정

Filter

옵션을 지정하여 입력 데이터를 처리하거나 변형

Name : 필터 플러그인의 이름을 지정(grep, modify 등)

Match : 필터가 적용될 태그의 패턴 지정

Regex : grep 필터 사용 시 로그 메시지를 필터링 할 정규 표현식 지정

Add : modify 필터 사용 시 로그 메시지에 추가할 필드 지정

Output

처리된 로그 데이터의 목적지 정의

Name : 출력 플러그인 이름 지정(stdout, loki 등)

Match : 출력에 적용할 태그 패턴 지정

Host, Path, URL : 로그 데이터를 전송할 경로 지정

tls : TLS/SSL 사용 여부 지정

Labels : 로그와 전송할 레이블 값 지정

Parser

로드 데이터 해석 규칙 정의

Name : 파서 이름 지정

Format : 로그의 포맷 유형 지정

Regex : 로그 파싱을 위한 정규 표현식 지정

Time_Key, Time_Format : 로그 메시지 시잔을 추출하기 위한 키와 시간 포맷 지정

'IT Knowledge' 카테고리의 다른 글

Gemini CLI 설치 및 개요  (0) 2025.06.26
Airflow EKS Helm 설치  (1) 2025.05.29
Node Exporter 설치 & Prometheus 설정  (0) 2024.12.11
Teams Workflow 생성하기  (0) 2024.08.20
인터넷 상에 노출된 자격증명 탐지  (0) 2024.05.03