본문 바로가기

인프라,데이터/Fluentd, Fluent Bit

Fluent Bit에서 특정 경로의 로그 파일 받아와 쿠버네티스 메타데이터 추가하기

한줄 미리보기 : 제목처럼 안 됩니다. 이거 되게 하려고 몇 시간을 허비했는지..... 저같이 '이거 설정 좀만 바꾸면 되는 거 아냐?' 하고 매달리실 분들을 위해 씁니다... 

환경 : EKS (쿠버네티스 버전 1.8)
fluent bit : latest 

fluent bit의 tail의 인풋 설정은 다음과 같은데, 

    [INPUT]
        Name              tail
        Tag               kube.*
        Path              /var/log/containers/*.log

여기서 Path를 /var/log/containers/custom-*.log 와 같이 조금이라도 바꾸면... 쿠버네티스 메타정보가 추가되지 않습니다.

 

시스템 로그(var/log/containers/~  하위의 podname별로 생기는 {podname}_{namespace}_{container_name}_{dockerId}.log 형태의 로그파일)이 아닌,
특정 경로에 마운트해둔 사용자 로그(애플리케이션에서 특정한 목적으로 남기는 로그)의 경우,

파일 이름을 시스템 로그파일과 같이 {podname}_{namespace}_{container_name}_{dockerId}.log 로 맞춰준다면 해당 정보가 로그에 추가됩니다. 

하지만 개발자 한 명이라도 로그 파일 이름을 저렇게 남기지 않는다면... 로그는 나가리됩니다... 

차라리 로그 파일을 남기는 형식에 {podname}, {namespace}, {container_name} 을 추가해달라고 한 후,

parser filter로 정규식을 사용해 파싱하면 쿠버네티스 메타정보가 아름답게 추가됩니다. 

[0] kube_app: [1643108334.526676309, {"time_local"=>"2022-01-25 10:58:54,526", "thread"=>"Timer-0", "level"=>"INFO", "marker"=>" ", "logger"=>"c.e.demo.SpringBootLoggerApplication", "log_message"=>"Hello World ::: 1", "pod_name"=>"springboot-logger-xx-z5s5m", "pod_namespace"=>"aa", "cluster_name"=>"dev-test-eks"}]