"Fluent Bit 문서/쿠버네티스"의 두 판 사이의 차이

 
(차이 없음)

2024년 4월 15일 (월) 15:00 기준 최신판

1 개요[ | ]

Kubernetes
쿠버네티스

Kubernetes 프로덕션급 로그 처리기

Fluentbit kube logging.png

Fluent Bit 는 Kubernetes를 완벽하게 지원하는 가볍고 확장가능한 로그 처리기입니다.

  • 파일 시스템 또는 Systemd/Journald에서 Kubernetes 컨테이너 로그를 처리합니다.
  • Kubernetes 메타데이터로 로그를 보강(enrich)하세요.
  • Elasticsearch, InfluxDB, HTTP와 같은 서드파티 스토리지 서비스로 로그를 중앙화하세요.

2 개념[ | ]

시작하기 전에 Fluent Bit가 어떻게 배포되는지 이해하는 것이 중요합니다. Kubernetes는 노드 클러스터를 관리하므로, 로그 에이전트 도구는 모든 POD에서 로그를 수집하기 위해 모든 노드에서 실행되어야 하므로 Fluent Bit는 DaemonSet(클러스터의 모든 노드에서 실행되는 POD)로 배포됩니다.

Fluent Bit가 실행되면 모든 POD의 로그를 읽고 파싱하고 필터링하며 다음 정보(메타데이터)로 각 항목을 보강합니다.

  • 파드 이름
  • 파드 ID
  • 컨테이너 이름
  • 컨테이너 ID
  • 레이블
  • 애노테이션

이 정보를 얻기 위해, kubernetes라는 빌트인 필터 플러그인은 Kubernetes API 서버와 통신하여 pod_id, labels, annotations과 같은 관련 정보를 조회하고, pod_name, container_id, container_name과 같은 기타 필드는 로컬에서 로그 파일 이름으로부터 조회됩니다. 이 모든 것이 자동으로 처리되므로 설정 측면에서 개입이 필요하지 않습니다.

Kubernetes 필터 플러그인은 전적으로, Jimmi Dyson이 작성한 Fluentd Kubernetes Metadata Filter에서 영감을 받았습니다.

3 설치[ | ]

Fluent Bit는 DaemonSet으로 배포되어야 하므로 Kubernetes 클러스터의 모든 노드에서 사용할 수 있습니다.

권장되는 Fluent Bit 배포 방법은 공식 Helm 차트( https://github.com/fluent/helm-charts )를 사용하는 것입니다.

3.1 OpenShift 참고사항[ | ]

Red Hat OpenShift를 사용하는 경우 SCC(보안 컨텍스트 제약 조건)도 설정해야 합니다.

$ kubectl create -f https://raw.githubusercontent.com/fluent/fluent-bit-kubernetes-logging/master/fluent-bit-openshift-security-context-constraints.yaml

3.2 Helm 차트로 설치[ | ]

Helm은 Kubernetes용 패키지 관리자이며 이를 통해 실행 중인 클러스터에 애플리케이션 패키지를 빠르게 배포할 수 있습니다. Fluent Bit는 Fluent Helm Charts 저장소( https://github.com/fluent/helm-charts )에 있는 helm 차트를 통해 배포됩니다.

Fluent Helm Charts 저장소를 추가하려면 다음 명령어를 사용하십시오.

helm repo add fluent https://fluent.github.io/helm-charts

저장소와 차트가 추가되었는지 확인하기 위해 helm search repo fluent를 실행할 수 있습니다. 그리고 다음을 실행하여 기본 차트를 설치할 수 있습니다.

helm upgrade --install fluent-bit fluent/fluent-bit

3.3 기본값[ | ]

기본 차트 값에는 Docker 파싱을 통해 컨테이너 로그를 읽는 구성이 포함되며, systemd 로그는 Kubernetes 메타데이터 보강을 적용하고 최종적으로 Elasticsearch 클러스터에 출력됩니다. https://github.com/fluent/helm-charts/blob/master/charts/fluent-bit/values.yaml 에 포함된 값 파일을 수정하여 추가 출력, 상태 확인, 모니터링 엔드포인트, 기타 설정 옵션을 지정할 수 있습니다.

4 세부사항[ | ]

Fluent Bit의 기본 설정은 다음을 확인합니다.

  • 실행 중인 Node에서 모든 컨테이너 로그를 수집합니다.
  • Tail 입력 플러그인은 Elasticsearch 백엔드에 플러시될 때까지 엔진에 5MB 이상을 추가하지 않습니다. 이 제한은 백프레셔 시나리오에 대한 해결방법을 제공하는 것을 목표로 합니다.
  • Kubernetes 필터는 Kubernetes 메타데이터, 특히 레이블 및 애노테이션으로 로그를 보강합니다. 필터는 캐시된 정보를 찾을 수 없는 경우에만 API 서버로 이동하고, 그렇지 않으면 캐시를 사용합니다.
  • 설정에서 기본 백엔드는 Elasticsearch 출력 플러그인에 의해 설정된 Elasticsearch입니다. Logstash 형식을 사용하여 로그를 수집합니다. 다른 Index와 Type이 필요한 경우, 플러그인 옵션을 참고하여 직접 조정하시기 바랍니다.
  • Retry_Limit라는 옵션이 False로 설정되어 있는데, Fluent Bit가 레코드를 Elasticsearch로 플러시할 수 없는 경우에 성공할 때까지 무기한 재시도한다는 의미입니다.

5 컨테이너 런타임 인터페이스(CRI) 파서[ | ]

Fluent Bit는 기본적으로 로그가 Docker 인터페이스 표준에 따른 형식이라고 가정합니다. 그러나 CRI를 사용할 때 사용된 파서를 수정하지 않으면 기형 JSON 문제가 발생할 수 있습니다. Fluent Bit에는 그 대신 사용할 수 있는 CRI 로그 파서가 포함되어 있습니다. 파서의 예시는 다음과 같습니다.

# CRI Parser
[PARSER]
    # http://rubular.com/r/tjUt3Awgg4
    Name cri
    Format regex
    Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>[^ ]*) (?<message>.*)$
    Time_Key    time
    Time_Format %Y-%m-%dT%H:%M:%S.%L%z

이 파서를 사용하려면 설정의 입력 섹션을 docker에서 cri로 변경하세요.

[INPUT]
    Name tail
    Path /var/log/containers/*.log
    Parser cri
    Tag kube.*
    Mem_Buf_Limit 5MB
    Skip_Long_Lines On

6 윈도우 배포[ | ]

v1.5.0부터 Fluent Bit는 Windows 파드에 대한 배포를 지원합니다.

6.1 로그 파일 개요[ | ]

Fluent Bit를 Kubernetes에 배포할 때, 관심 있게 봐야 할 로그 파일 세 가지가 있습니다.

C:\k\kubelet.err.log

  • 호스트에서 실행되는 kubelet 데몬의 오류 로그 파일입니다.
  • 향후 트러블슈팅(배포 실패 디버깅 등)을 위해 이 파일을 보관할 필요가 있습니다.

C:\var\log\containers\<pod>_<namespace>_<container>-<docker>.log

  • 이것은 감시(watch)해야 할 메인 로그 파일입니다. 이 파일을 따르도록 Fluent Bit를 설정합니다.
  • 이는 파일 이름에 일부 추가 메타데이터가 포함된, C:\ProgramData\ 내의 Docker 로그 파일에 대한 심볼릭 링크입니다 .

C:\ProgramData\Docker\containers\<docker>\<docker>.log

  • Docker에서 생성한 로그 파일입니다.
  • 일반적으로 이 파일에서 직접 읽지는 않지만 Fluent Bit에서 이 파일이 표시되는지 확인해야 합니다.

일반적으로 배포 yaml에는 다음 볼륨 구성이 포함됩니다.

spec:
  containers:
  - name: fluent-bit
    image: my-repo/fluent-bit:1.8.4
    volumeMounts:
    - mountPath: C:\k
      name: k
    - mountPath: C:\var\log
      name: varlog
    - mountPath: C:\ProgramData
      name: progdata
  volumes:
  - name: k
    hostPath:
      path: C:\k
  - name: varlog
    hostPath:
      path: C:\var\log
  - name: progdata
    hostPath:
      path: C:\ProgramData

6.2 Fluent Bit 설정[ | ]

위에서 설명한 기본 볼륨 설정을 가정하여, 다음 설정을 적용하면 로깅을 시작할 수 있습니다. 여기(등록 필요)에서 설정을 시각화할 수 있습니다.

fluent-bit.conf: |
    [SERVICE]
      Parsers_File      C:\\fluent-bit\\parsers.conf

    [INPUT]
      Name              tail
      Tag               kube.*
      Path              C:\\var\\log\\containers\\*.log
      Parser            docker
      DB                C:\\fluent-bit\\tail_docker.db
      Mem_Buf_Limit     7MB
      Refresh_Interval  10

    [INPUT]
      Name              tail
      Tag               kubelet.err
      Path              C:\\k\\kubelet.err.log
      DB                C:\\fluent-bit\\tail_kubelet.db

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

    [OUTPUT]
      Name  stdout
      Match *

parsers.conf: |
    [PARSER]
        Name         docker
        Format       json
        Time_Key     time
        Time_Format  %Y-%m-%dT%H:%M:%S.%L
        Time_Keep    On

6.3 윈도우 파드의 불안정한 네트워크 완화[ | ]

Windows 파드는 부팅 직후 작동하는 DNS가 부족한 경우가 많습니다(#78479). 이 이슈를 완화하기 위해 filter_kubernetes는, 네트워크가 시작될 때까지 기다리는 빌트인 메커니즘을 제공합니다.

  • DNS_Retries - 네트워크가 작동하기 시작할 때까지 N번 재시도 (6)
  • DNS_Wait_Time - 네트워크 상태 확인 간격 (30)

기본적으로, Fluent Bit는 3분(30초 x 6회)동안 기다립니다. 충분하지 않은 경우 다음과 같이 설정을 조정하십시오.

[filter]
    Name kubernetes
    ...
    DNS_Retries 10
    DNS_Wait_Time 30

7 참고[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}