Fluent-bit
Fluent Bit은 경량의 로그 데이터 수집기로서, 데이터를 수집하고 처리하는 데 사용됩니다 애플리케이션에 sidecar 형태로 Flentbit를 설치하여 애플리케이션의 로그를 파싱하여 데이터 수집, 처리 및 전송을 담당하는 Opentelemetry-Collector로 전달하는 형태입니다.
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
애플리케이션 로그는 'level'이라는 라벨을 생성해서 사용자에게 레벨별로 필터링하는 기능을 제공합니다. 다음은 사용자의 애플리케이션이 level이라는 값이 없을 경우 nginx의 code값을 level로 변환하는 예시입니다.
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