DevOps와 Infra/DevOps 일반
[Docker] Fluent Bit 설치 & 오픈서치 연동 (filter)
Tech정또해방
2025. 7. 9. 15:08
도커 fluentbit 컨테이너 이미지를 활용한 로그 관리 수집 그리고 opensearch 연동
Fluent Bit (이미지)
C 언어로 만들어진 초경량 버전입니다. OpenSearch를 포함한 주요 플러그인들이 내장(built-in)되어 있어 별도의 설치가 필요 없습니다. 또한, 경량화를 위해 쉘(sh)이나 gem 같은 도구가 이미지 안에 포함되어 있지 않습니다.
1. 기본 설치
Fluent Bit은 경량화된 로그 수집기입니다. 우리는 Docker 컨테이너에서 수집되는 로그를 Opensearch에 전달하는 형태로 사용합니다. 아래는 Docker compose 파일과 fluent-bit.conf 파일에 내용을 구성하고 Opensearch로 로그를 전송하도록 구성한 기본예시입니다.
fluentbit-compose.yaml
- image : 컨테이너 내부에서 여러가지를 확인하기위해 debug 이미지를 사용했습니다.
- network_mode : 호스트 네트워크를 사용합니다 (24224)
services:
fluent-bit:
image: fluent/fluent-bit:4.0.3-debug
container_name: fluent-bit
network_mode: host
volumes:
- ./fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf
restart: unless-stopped
fluent-bit 구성은 대표적으로 [SERVICE] , [INPUT], [OUTPUT] 으로 이루어집니다.
- SERVICE : 로그 레벨과 로그의 수집/전송 주기 그리고 포그라운드(Docker에서 off 필수) 실행 여부 설정
- INPUT : 수신위치와 프로토콜 그리고 포트를 설정
- OUTPUT : Match를 통해서 태그와 일치하는 로그를 전송 설정하고 Opensearch 인증조건을 작성
도커 컨테이너 생성 예시
docker run -d --network host --name ${DOCKER_CONTAINER_NAME} --log-driver=fluentd --log-opt tag=${DOCKER_CONTAINER_NAME} --log-opt fluentd-address=127.0.0.1:24224 ${DOCKER_IMAGE_NAME}:latest
fluent-bit.conf
########################################
# SERVICE
########################################
[SERVICE]
Flush 1
Log_Level info
Daemon Off
########################################
# INPUTS (Project Specific)
########################################
[INPUT]
Name forward
Listen 0.0.0.0
Port 24224
########################################
# OUTPUTS (Project Specific)
########################################
[OUTPUT]
Name opensearch
Match aurora-x2bee-api-common_stg.logs
Index x2bee-api-common-%Y.%m.%d
Host opensearch-stg.x2bee.com
Port 443
TLS On
TLS.Verify Off
HTTP_User admin
HTTP_Passwd **************
Suppress_Type_Name On
Logstash_Format Off
########################################
# ---- 반복 생략 ----
########################################
[OUTPUT]
Name opensearch
Match aurora-x2bee-api-bo_stg.logs
Index x2bee-api-bo-%Y.%m.%d
Host opensearch-stg.x2bee.com
Port 443
TLS On
TLS.Verify Off
HTTP_User admin
HTTP_Passwd **************
Suppress_Type_Name On
Logstash_Format Off
########################################
# ---- 반복 생략 ----
########################################
2. Lua 스크립트로 FILTER 설정
반복되는 Output 구성을 해야하는 경우가 생긴다면 Lua 스크립트를 작성하여 효과적인 구성을 할 수 있습니다.
fluentbit-compose.yaml
services:
fluent-bit:
image: fluent/fluent-bit:4.0.3-debug
container_name: fluent-bit
network_mode: host
volumes:
- ./fluent-bit.conf:/fluent-bit/etc/fluent-bit.conf
- ./extract_tag.lua:/fluent-bit/etc/extract_tag.lua
restart: unless-stopped
extract_tag.lua
- string.match(...) : 정규표현식을 통해 aurora-와 stg.logs 사이의 서비스명을 추출
- record["log_index_prefix"] : 추출된 값을 로그 레코드의 필드로 삽입
function cb_extract_tag(tag, timestamp, record)
record["log_index_prefix"] = string.match(tag, "^aurora%-(.-)_stg%.logs$")
return 1, timestamp, record
end
fluent-bit.conf
- SERVICE에 Lua 스크립트 필터 파일 등록
- 태그에서 서비스명 추출하여 log_index_prefix 필드 삽입
- log_index_prefix 필드를 기반으로 OpenSearch Index 구성
(Logstash_Prefix_Key log_index_prefix)
[SERVICE]
Flush 1
Log_Level info
Daemon Off
Lua_File extract_tag.lua
[INPUT]
Name forward
Listen 0.0.0.0
Port 24224
# STEP 1: tag → record["log_index_prefix"]
[FILTER]
Name lua
Match aurora-x2bee-*_stg.logs
script extract_tag.lua
call cb_extract_tag
# STEP 2: OpenSearch에 log_index_prefix를 prefix로 사용
[OUTPUT]
Name opensearch
Match aurora-x2bee-*_stg.logs
Host opensearch-stg.x2bee.com
Port 443
TLS On
TLS.Verify Off
HTTP_User admin
HTTP_Passwd ************
Suppress_Type_Name On
Logstash_Format On
Logstash_Prefix_Key log_index_prefix
Logstash_DateFormat %Y.%m.%d
Retry_Limit 5
# fallback
[OUTPUT]
Name stdout
Match *
3. Opensearch에서 확인하기
Dev Tools에서 확인GET _cat/indices?s=index