Fluent-bit

Fluent Bit은 경량의 로그 데이터 수집기로서, 데이터를 수집하고 처리하는 데 사용됩니다 애플리케이션에 sidecar 형태로 Flentbit를 설치하여 애플리케이션의 로그를 파싱하여 데이터 수집, 처리 및 전송을 담당하는 Opentelemetry-Collector로 전달하는 형태입니다.

위 가이드는 애플리케이션이 /var/log의 디렉토리안에 로그를 저장하는 방식에 대해 설명합니다 사용자의 환경에 맞게 디렉토리 수정과 로그 패턴을 수정하시길 바랍니다.

1. Fluent-bit 설정

1) 컨테이너 생성

로그를 수집할 애플리케이션 - 설정 - 컨테이너 "추가" 버튼을 클릭하여 다음과 같이 컨테이너를 생성합니다.

이미지: fluent/fluent-bit:3.0.0

저장버튼을 누르게 되면 기존 애플리케이션에 fluent-bit sidecar 형식으로 컨테이너가 실행됩니다.

2. 애플리케이션 설정

1) 로깅 - 애플리케이션 관리 에서 생성한 애플리케이션의 토큰 복사

2) 볼륨 마운트 - 로그

Log Appender에 설정한 경로에 로그가 저장되므로 컨테이너에서 볼륨을 생성하고 마운트해야합니다.

로그를 수집할 애플리케이션 - 설정 - 볼륨 - "생성" 버튼을 클릭하여 다음과 같이 볼륨을 생성합니다.

볼륨 유형 : Empty Dir

볼륨 명 : 사용자 지정 이름

다음은 생성한 볼륨을 마운트하는 과정입니다.

로그를 수집할 애플리케이션 - 설정 - 볼륨 마운트 - "추가" 버튼을 클릭하여 다음과 같이 설정하여 볼륨에 마운트시킵니다.

컨테이너 경로 : Log Appender에서 설정한 파일 경로 (eg. /var/log)

3) 볼륨 마운트 - Fluent-bit

컨테이너가 로그를 저장하는 디렉토리 경로에 마운트해야 파일을 읽어 로그를 파싱할 수 있습니다.

또한 fluent-bit가 제공하는 Config를 통하여 라벨을 추가하거나, 라벨 이름을 바꿀수 있습니다.

fluent-bit Config Map 생성

로그를 수집할 서비스맵 - 설정 정보 - "생성" 버튼을 클릭하여 컨피그 맵을 클릭합니다.

이름 : 사용자가 설정할 컨피그 맵의 이름

설명 : 추가적으로 사용자가 명시할 컨피그 맵의 설명

"추가" 버튼을 클릭하여 컨피그 파일을 추가합니다.

다음 컨피그 파일은 절대적인 방식은 아닙니다. 로그를 적재하는 위치나, 로그 패턴이 다를 수 있으므로 사용자의 환경에 맞게 설정하길 바랍니다.

fluent-bit.conf

[SERVICE]
        Flush         1
        Log_Level     info
        Daemon        off
        Parsers_File  parsers.conf


[INPUT]
        Name         tail
        Path         [로그가 적재될 로그파일 경로]
        
[OUTPUT]
        Name         stdout
        Match        *

[FILTER]
        Name parser
        Match *
        Key_Name log
        Parser nginx
        # 파싱하기전의 기존 로그메세지를 보존하는 설정(true: 보존)
        Preserve_Key true
        Reserve_Data true

# body에 instrumentation_scope, service.name.. 들어감
[FILTER]
        Name        modify
        Match       *
        Add         service.name '애플리케이션 이름'       

# 스크립트를 삽입하여 사용자가 핸들링함
[FILTER]
        Name        lua
        Match       *
        script      rewrite.lua
        call        rewrite_tag
        

[OUTPUT]
        Name         opentelemetry
        Match        *
        Host         cocktail-telemetry-collector.cocktail-addon
        Port         4318
        metrics_uri  /v1/metrics
        logs_uri     /v1/logs
        traces_uri   /v1/traces
        header       app_token '토큰'
        header	     app_name  '애플리케이션 이름'
        Log_response_payload True
        tls          off
        tls.verify   off
        logs_body_key_attributes true

log-agent 서비스 주소 : 인프라 - 클러스터 - 애드온 - 'log-agent' 클릭 후 서비스 이름 확인

( http 포트 = 4318 , grpc 포트 = 4317)

parsers.conf

[PARSER]
    Name   nginx
    Format regex
    Regex ^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")
    Time_Key time
    Time_Format %d/%b/%Y:%H:%M:%S 

rewrite.lua

# code 값이 200일 경우 level이라는 값에 INFO, 200이 아니면 ERROR라는 값을 추가하는 스크립트
function rewrite_tag(tag, timestamp, record)
    if record["code"] == "200" then
        record["level"] = "INFO"
    else
        record["level"] = "ERROR"
    end
    return 1, timestamp, record
end

컨피그 맵 생성이 완료되면 다시 애플리케이션으로 돌아와 볼륨을 생성합니다.

로그를 수집할 애플리케이션 - 설정 - 볼륨 - "생성" 버튼을 클릭하여 다음과 같이 볼륨을 생성합니다.

볼륨 유형 : Config Map

볼륨 명 : 사용자 지정 이름

컨피그맵 : 사용자가 생성한 컨피그맵 이름

권한 : 644

다음은 생성한 볼륨을 마운트하는 과정입니다.

로그를 수집할 애플리케이션 - 설정 - 볼륨 마운트 - "추가" 버튼을 클릭하여 다음과 같이 설정하여 볼륨에 마운트시킵니다.

컨테이너 경로 : Log Data - 로그가 저장된 디렉토리 경로 (eg. /var/log)

컨테이너 경로 : Fluent-bit -conf -fluent-bit의 설정파일 경로 (eg. /fluent-bit/etc)

fluent-bit 컨테이너가 정상적으로 작동하지 않을때

4. 애플리케이션 로그 확인

1) 로깅 - 애플리케이션 로그 - 애플리케이션 목록에서 설정한 애플리케이션 검색

Last updated