MSA/쿠버네티스

[Kubernetes] Fluentbit 로그 수집 방법(Sidecar vs DaemonSet)

miracle21 2025. 9. 16. 16:20
반응형

EKS에서 fluentbit를 sidecar로 띄울때와 daemonset으로 띄울때의 설정을 다르게 줘야한다.

 

sidecar는 pod name을 바로 가져올 수 있지만, daemonset 은 기본적으로 노드 이름을 가져와서 설정을 따로 더 해줘야한다.

 

 

 

[sidecar] fluentbit-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluentbit-config
  namespace: ns-app
data:
  fluent-bit.conf: |
    [SERVICE]
        Flush                     1
        Grace                     30
        Log_Level                 trace
        Daemon                    off

    [INPUT]
        Name                tail
        Log_Level           trace
        Path                /app.log
        Tag                 ${POD_NAME}
        Skip_Long_Lines     Off
        Refresh_Interval    10
        Read_from_Head      True
        DB                  /app.db

    [OUTPUT]
        Name                cloudwatch_logs
        Match               *
        region              ap-northeast-2
        log_group_name      /app
        log_stream_prefix   log-
        auto_create_group   true
        log_key             log

    [FILTER]
        Name                aws
        Match               ${POD_NAME}
        imds_version        v1

 

 

 

 

[daemonset] fluentbit-configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluentbit-config
  namespace: ns-app
data:
  fluent-bit.conf: |
    [SERVICE]
        Flush                     1
        Grace                     30
        Log_Level                 trace
        Daemon                    off

    [INPUT]
        Name                tail
        Log_Level           trace
        Path                /app.log
        Tag                 *
        Skip_Long_Lines     Off
        Refresh_Interval    10
        Read_from_Head      True
        DB                  /app.db

    [OUTPUT]
        Name                cloudwatch_logs
        Match               *
        region              ap-northeast-2
        log_group_name      /app
        log_stream_name     ${kubernetes['pod_name']}
        log_stream_prefix   log-
        auto_create_group   true
        log_key             log

    [FILTER]
        Name                aws
        Match               *
        imds_version        v1

    [FILTER]
        Name                kubernetes
        Match               *
        Kube_URL            https://kubernetes.default.svc:443

 

 

 

deployment는 sidecar나 daemonset이나 차이가 없다.

 

단, 볼륨 설정은 sidecar는 emptydir 로, daemonset은 hostpath 로 해야한다.

  • DaemonSet: 노드 로그를 수집하려면 Pod가 호스트 파일 시스템에 접근해야 하므로 hostpath 를 사용해야 함(emptydir  불가)
  • Sidecar: Pod 내부 로그를 수집하기 때문에  emptydir을 공유해서 로그를 전달

 

 

+  ${kubernetes['pod_name']} 으로 pod 이름을 가져오려면 RBAC 설정을 해야하는것 같다. 권한이 없어서 임시로 로그 이름에 pod 이름이 아예 추가가 되도록 설정하고, 로그파일 이름을 로그스트림 이름으로 가져가도록 했다. Daemonset 설정에서 어떤게 불필요한 코드인지 검증해보고 싶은데 기회가 되면 다시 수정할 예정이다.

host_name=$(hostname -f)
logfile="/logs/${host_name}-$(date +'%Y%m%d%H').log"

 



 

 
반응형