본문 바로가기

좋아하는것_부자되는매직TV

fluent-bit 이란 무엇인가? (ft. fluentd와 차이점)

반응형

Fluent Bit 홈페이지에서는 Fluent Bit에 대해서 매우 빠르고 가볍고 확장성이 뛰어난 로깅 및 메트릭 프로세서 및 포워더라고 설명하고 있고요.
클라우드 및 컨테이너화 환경에서 선호되는 선택이라고 이야기하고 있죠

(저는 한마디로 아래와 같이 머릿속에 정리해두었는데요)
Fluent Bit은 한마디로 "경량 로그 수집기"라고요.

다시말해서, Fluent Bit 은 실시간 로그 데이터를 수집하고 이를 처리하는 데 사용됩니다.
어떻게 보면 이것은 Fluentd의 경량 버전으로, IoT 및 임베디드 시스템과 같은 리소스 제한이 있는 환경에서 사용하기에 이상적이라고 보시면되고요.

특히 Fluent Bit은 C 언어로 작성되어 있다고 하고요.
결과적으로 효율적인 메모리 사용과 빠른 처리 속도를 제공합니다. (제가 직접 사용해보니 괜찮더라고요.)
이것은 여러 플러그인을 지원하며, 로그 데이터를 여러 목적지로 전송할 수 있었습니다. 

제가 Live 서버에 해당 Fluent Bit 을 적용전에 Fluentd 를 적용했었는데요...
그당시에는 Fluentd 만 알고 Fluent Bit 을 모른 상태였고, 결과적으로 아래와 같이 구조 변경을 했습니다. 
(아는게 힘인 것 같고, 그 아는 것을 실천해야 세상(?)이 바뀐다는 사실을 다시 리마인드 했습니다. ^^;)

Fluent Bit 을 알기전 예전 구조는 아래와 같았습니다. 

Fluent Bit 을 알고 난후 아래와 같이 변화를 주었습니다. 

docker stats 으로 확인해보니 Fluentd 보다 Fluentbit 이 더욱 경량인것을 확인하고 난후에 변경을 주었습니다. 
최대한 서비스에 영향도를 줄이기 위한 목적이였죠.

그래서 Fluent Bit 과 Fluentd 의 차이점이 궁금해졌고 찾아보니 FluentBit 홈페이지에 아래와 같이 비교해두었더라고요.

 

그래서 차근차근 공부해봤는데요. 공유해드리자면 아래와 같습니다.

둘다 라이센스는 Apache License v2.0 이고요. 


일반적으로 오픈소스SW 라이선스는 오픈소스SW의 상업적 이용에 대해 제한하지 않고 있으며,  Apache License 2.0 또한 마찬가지로 상업적 이용에 제한을 두지 않고 있습니다. 
특히 맨 마지막에 AWS, Microsoft, Google Cloud 및 여러 사용자가 채택해서 사용하고 있다라는 부분이 저의 눈에 들어오더라고요... (검증이 된 녀석이구나? 꼭써야 겠다 라고요.)

아무튼 차이점은 아래와 같습니다. 

FluentBit 이 C 로만 구성되어 있다보니  IoT 및 임베디드 시스템과 같은 리소스 제한이 있는 환경에서도 잘돌아 가는것 같습니다. 
Fluentd 와 비교해서 메모리도 적게 사용하는 것 같고요
직접 fluentbit 을 운용하면서 docker stats 로 확인해보니  CPU도 0.12% , 메모리는 5M 정도만 사용하고 있더라고요. 

Fluentd 는 C&Ruby 인 구조로 FluentBit 보다 무겁지만, 그래도 Fluentd 만의 장점은 Plugins 이 Fluent Bit 보다 10배 많다는 사실이 장점인것 같네요.
성능은 Fluentd 는 중간성능, FluentBit 은 고성능으로 분류되는것으로 보이고요.

참고로 둘다  Aggregator 또는 Forwarder로 작동할 수 있다고 하고요.
그리고 둘 다 서로를 보완하거나 독립형 솔루션으로 사용할 수 있다고도 하네요.

하지만 최근 몇 년 동안 클라우드 공급자는 성능 및 호환성을 위해 Fluentd에서 Fluent Bit로 전환했다고 하고요.
참고로 Fluent Bit는 이제 차세대 솔루션으로 간주된다고 할 만큼 사람들의 사랑을 받는 도구가 된것 같네요.

그럼 Fluent Bit 의 기능과 이점을 좀더 살펴볼께요~



Fluent Bit의 기능과 장점

하나, 가장 큰 장점은 Fluent Bit은 경량이고 빠르다는건데요.
Fluent Bit은 경량 로그 수집기로, 메모리 사용량이 적고 빠른 처리 속도를 제공합니다. 
이것은 IoT 및 임베디드 시스템과 같은 리소스 제한이 있는 환경에서 사용하기에 이상적이죠..

둘, 다양한 플러그인을 지원하고 있는데요.
Fluent Bit은 다양한 플러그인을 지원하며, 로그 데이터를 여러 목적지로 전송할 수 있습니다.
예를 들어, Elasticsearch, Amazon S3, Google Cloud Storage, Kafka 등과 같은 다양한 목적지로 로그 데이터를 전송할 수 있습니다.

그외에 기능을 좀더 보자면..
하나, 실시간 데이터 수집에서 활용됩니다. 
Fluent Bit은 실시간으로 로그 데이터를 수집하고 이를 처리할 수 있습니다.
이것은 실시간 분석 및 모니터링에 사용될 수 있습니다.

둘, 로그 데이터 처리에서 사용되는데요.
Fluent Bit은 로그 데이터를 처리할 수 있으며, 필터링, 포맷 변경, 필드 추가, 필드 삭제 등과 같은 작업을 수행할 수 있습니다.
이것은 로그 데이터를 분석하고 이를 다른 시스템에 전달하는 데 사용될 수 있습니다.

셋, 다양한 데이터 포맷 지원인데요.
Fluent Bit은 다양한 데이터 포맷을 지원하며, JSON, CSV, MsgPack 등과 같은 다양한 포맷의 로그 데이터를 처리할 수 있다고 하네요.
 
Fluent Bit 구성요소 
Fluent Bit은 크게 다음과 같은 주요 구성 요소로 구성됩니다.
 
Input Plugins
Input Plugins은 로그 데이터를 수집하는 역할을 합니다.
예를 들어, 파일, 시스템 로그, Docker 로그, Kubernetes 로그 등과 같은 다양한 소스로부터 로그 데이터를 수집할 수 있습니다.

Parser
Parser는 로그 데이터를 파싱하여 필요한 필드를 추출하는 역할을 합니다.
이것은 로그 데이터를 다른 시스템에 전달하기 전에 데이터를 구조화하는 데 사용됩니다.

Filter Plugins
Filter Plugins는 로그 데이터를 필터링하고 처리하는 역할을 합니다.
예를 들어, 필드 추가, 필드 삭제, 태그 추가, 태그 삭제, 포맷 변경 등과 같은 작업을 수행할 수 있습니다.

Output Plugins
Output Plugins은 처리된 로그 데이터를 다른 시스템에 전달하는 역할을 합니다.
예를 들어, Elasticsearch, Amazon S3, Google Cloud Storage, Kafka 등과 같은 다양한 목적지로 로그 데이터를 전송할 수 있습니다.

Service
Service는 Fluent Bit의 주요 서비스로, 입력 플러그인, 파서, 필터 플러그인, 출력 플러그인을 관리하고 이들 간의 데이터 흐름을 조정합니다.

해당 내용은 아래와 같이 환경설정에 나와 있습니다. 

$ cat fluent-bit.conf 
[SERVICE]
	Flush 5
	Daemon off
	Log_Level info
	Log_File /var/log/fluent-bit/fluentbit_app.log

@INCLUDE app_1004.conf
@INCLUDE app_1007.conf

$ cat app_1004.conf 
[INPUT]
	Name tail
	Path /log/app_1004/cmd/app_cmd.*.log
	Tag app_1004_cmd_log

[FILTER]
	Name modify
	Match app_1004_cmd_log
	Condition Key_value_matches log LINX
	Set keep true
	Set server live_01_app_1004

[FILTER]
	Name grep
	Match app_1004_cmd_log
	Regex keep true

[OUTPUT]
	Name forward
	Match app_1004_cmd_log
	host xxx.xxx.xxx.xxx (fluentd ip)
	port xxxx (fluentd port)

$ cat app_1007.conf 
[INPUT]
	Name tail
	Path /log/app_1007/cmd/app_cmd.*.log
	Tag app_1007_cmd_log

[FILTER]
	Name modify
	Match app_1007_cmd_log
	Condition Key_value_matches log LINX
	Set keep true
	Set server live_01_app_1007

[FILTER]
	Name grep
	Match app_1007_cmd_log
	Regex keep true

[OUTPUT]
	Name forward
	Match app_1007_cmd_log
	host xxx.xxx.xxx.xxx (fluentd ip)
	port xxxx (fluentd port)

 

위의 환경설정에 대해서 궁금해 하실것 같아서 간단하게 설명해보자면요.

각 섹션은 설정을 그룹화하고, 설정은 키-값 쌍으로 정의됩니다. 
아래는 각 섹션과 설정의 설명입니다:

[SERVICE]: Fluent Bit 서비스 관련 설정을 정의하는 섹션입니다.

Flush 5: 데이터를 출력하기 전에 버퍼링하는 시간 간격을 초 단위로 지정합니다. 여기서는 5초로 설정되어 있으므로 5초마다 데이터가 출력됩니다.
Daemon off: 데몬 모드를 사용하지 않도록 설정합니다.
Log_Level info: 로깅 레벨을 info로 설정합니다.
Log_File /var/log/fluent-bit/fluentbit_app.log: 로그 파일의 경로를 지정합니다.

@INCLUDE: 다른 설정 파일을 현재 설정 파일에 포함하는 지시어입니다.
@INCLUDE app_1004.conf: 다른 설정 파일인 app_1004.conf를 현재 설정 파일에 포함합니다.
@INCLUDE app_1007.conf: 다른 설정 파일인 app_1007.conf를 현재 설정 파일에 포함합니다.

[INPUT]: 데이터를 수집하는 입력 플러그인의 설정을 정의하는 섹션입니다.

Name tail: 로그 파일의 끝에서 데이터를 읽어오는 tail 입력 플러그인을 사용합니다.
Path /log/app_1004/cmd/app_cmd.*.log: 입력 데이터를 가져올 파일 경로를 지정합니다.
Tag app_1004_cmd_log: 입력 데이터에 부여할 태그를 정의합니다.

[FILTER]: 입력 데이터를 필터링 또는 변환하는 필터 플러그인의 설정을 정의하는 섹션입니다.
Name modify: 데이터를 변경하는 modify 필터 플러그인을 사용합니다.
Match app_1004_cmd_log: 해당 필터를 적용할 입력 데이터의 태그를 지정합니다.
Condition Key_value_matches log LINX: log 필드가 LINX인 경우에만 필터링합니다.
Set keep true: keep 필드를 true로 설정합니다.
Set server live_01_app_1004: server 필드를 live_01_app_1004로 설정합니다.
다음으로, grep 필터를 사용하여 keep 필드가 true인 데이터만 보유합니다.

[OUTPUT]: 변환된 데이터를 전송하는 출력 플러그인의 설정을 정의하는 섹션입니다.

Name forward: 데이터를 전송하는 forward 출력 플러그인을 사용합니다.
Match app_1004_cmd_log: 해당 출력을 적용할 입력 데이터의 태그를 지정합니다.
host xxx.xxx.xxx.xxx: 데이터를 전송할 대상 호스트의 IP 주소를 지정합니다.
port xxxx: 데이터를 전송할 대상 포트 번호를 지정합니다.

그럼, Fluent Bit 사용 사례에 대해서 한번 정리해볼까요?
 
하나, 로그 분석 및 모니터링입니다.
Fluent Bit은 로그 데이터를 실시간으로 수집하여 분석 및 모니터링에 사용될 수 있습니다.
이것은 시스템의 상태를 실시간으로 파악하고 문제를 신속하게 해결하는 데 사용될 수 있습니다.

둘, IoT 및 임베디드 시스템에 사용할 수 있습니다. 
Fluent Bit은 리소스 제한이 있는 환경에서 사용하기에 이상적입니다.
예를 들어, IoT 디바이스, 임베디드 시스템 등과 같은 환경에서 사용될 수 있습니다.

셋, 로그 데이터 전송에 사용할 수 있습니다. 
Fluent Bit은 다양한 목적지로 로그 데이터를 전송할 수 있습니다.
예를 들어, Elasticsearch, Amazon S3, Google Cloud Storage, Kafka 등과 같은 다양한 목적지로 로그 데이터를 전송할 수 있습니다.  

맺음말 

Fluent Bit에 대해서 간단하게 정리해보자면요.
경량 로그 수집기로, 실시간 로그 데이터를 수집하고 이를 처리하는 데 사용됩니다.
이것은 경량 및 빠른 처리 속도를 제공하며, 다양한 플러그인을 지원하여 로그 데이터를 여러 목적지로 전송할 수 있습니다.

그리고 Fluent Bit은 다양한 사용 사례에 사용될 수 있으며,
특히 IoT 및 임베디드 시스템과 같은 리소스 제한이 있는 환경에서 사용하기에 이상적이라고 하네요.

제가 운영하는 서버 중 PC클라이언트와 모바일클라이언트가 접속하는 서버에 최대한 영향을 안주기 위해서
fluentd 보다 fluent-bit 을 설치하는게 더 나을것 같아서 이번에 fluetnd 대신 fluent-bt 를 도입했습니다. 

오늘의 블로그는 여기까지고요.
항상 믿고 봐주셔서 감사합니다. 

728x90
300x250