Fluentd 의 사용법

작성자 이경미 수정일 2022-12-16 16:44

#fluentd

들어가며

  • fluentd 가 어떤 용도로 사용되는지 알 수 있습니다.
  • fluentd 를 활용하는 방법에 대해 알 수 있습니다. 



내용


kubernetes 는 자체적으로 각 pod 들의 log 를 수집할 수 있습니다.

하지만 수집된 Log 는 컨테이너가 다시 시작되거나 pod 가 node 에서 축출되었을 때 해당 log 도 함께 축출됩니다. 



클러스터 레벨 로깅 아키텍처 

kubernetes 는 cluster-level logging 을 위한 네이티브 솔루션을 제공하지 않습니다. 따라서 몇 가지의 일반적인 접근 방법을 고려하여 옵션을 추가할 수 있습니다. 

  • 모든 노드에서 실행되는 노드-레벨 로깅 에이전트를 사용한다.
  • 애플리케이션 파드에 로깅을 위한 전용 사이드카 컨테이너를 포함한다.
  • 애플리케이션 내에서 로그를 백엔드로 직접 푸시한다.


로깅 에이전트가 있는 사이드카 컨테이너

node-level logging 이 상황에 맞게 충분히 수집할 수 없는 경우 사용하는 것이 바로 fluentd 입니다. 

fluentd 는 애플리케이션과 함께 실행하도록 구성된 별도의 logging agent 를 사용하여 사이드카 컨테이너를 생성할 수 있습니다. 

사이드카 컨테이너의 방식을 사용하면 리소스의 소비가 커질 수 밖에 없습니다.
또한 kubelet 에 의해 작동하지 않기 때문에 kubelet 명령어를 통한 fluentd 의 logs 를 확인할 수 없습니다. 



SparklingSoDA의 fluentd 활용법

fluentd 를 컨테이너로 띄우게되면 namespace 가 logging 으로 등록되며, 모든 node에서 작동합니다. 

kubectl get po -nlogging -owide                                                                                                                                 LP645: Mon Nov  7 09:53:52 2022

NAME            READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
fluentd-n7h4q   1/1     Running   0          93s   6.2.64.206    lp646   <none>           <none>
fluentd-n85dq   1/1     Running   1          93s   6.2.122.160   lp648   <none>           <none>
fluentd-ncvdx   1/1     Running   0          93s   6.2.106.73    lp647   <none>           <none>
fluentd-rr287   1/1     Running   1          93s   6.2.122.195   lp645   <none>           <none>


각 node 별로 sodaflow 의 namespace 를 갖는 pod 들의 log 를 수집합니다. 

수집된 log 는 minio 에 저장되며 해당 로그를 pod 별로 관리할 수 있습니다. 

cd <NAS>/minio-minio-data-volume-pvc-xxxxxxxxxxxxxx/minio/logging

해당 디렉터리로 이동하게되면 json 형태로 지정된 날짜에 맞춰 저장된 파일을 확인할 수 있습니다. 

cd <NAS>/minio-minio-data-volume-pvc-xxxxxxxxxxxxxx/minio/logging
cd kubernetes.var.log.containers.sodaflow-app-5465854c95-wp28f_sodaflow_sodaflow-1db9a7ebbd884811ee04d1fa245e37de6bbcbbe6f4945188519a30e69131bb60.log
tree
.
`-- 2022
    `-- 10
        |-- 27
        |   |-- 08-events_0.json
        |   |-- 08-events_1.json
        |   |-- 08-events_10.json
        |   |-- 08-events_11.json
        |   |-- 08-events_12.json
        |   |-- 08-events_13.json
        |   |-- 08-events_2.json
        |   |-- 08-events_3.json
        |   |-- 08-events_4.json
        |   |-- 08-events_5.json
        |   |-- 08-events_6.json
        |   |-- 08-events_7.json
        |   |-- 08-events_8.json
        |   |-- 08-events_9.json
        |   |-- 09-events_0.json
        |   |-- 09-events_1.json
        |   |-- 09-events_10.json
        |   |-- 09-events_11.json
        |   |-- 09-events_12.json
        |   |-- 09-events_13.json
        |   |-- 09-events_2.json
        |   |-- 09-events_3.json
        |   |-- 09-events_4.json
        |   |-- 09-events_5.json
        |   |-- 09-events_6.json
        |   |-- 09-events_7.json
        |   |-- 09-events_8.json
        |   `-- 09-events_9.json
        |-- 28
        |   |-- 04-events_0.json
        |   |-- 04-events_1.json
        |   |-- 04-events_2.json
        |   |-- 05-events_0.json
        |   |-- 05-events_1.json
        |   |-- 05-events_2.json
        |   |-- 05-events_3.json
        |   |-- 05-events_4.json
        |   |-- 05-events_5.json
        |   |-- 05-events_6.json
        |   |-- 06-events_0.json
        |   |-- 06-events_1.json
        |   |-- 06-events_2.json
        |   |-- 06-events_3.json
        |   |-- 06-events_4.json
        |   `-- 06-events_5.json

fluentd 가 시간마다 log 를 수집하는 것은 yaml 파일에 지정할 수 있습니다. 

아티클이 유용했나요?

훌륭합니다!

피드백을 제공해 주셔서 감사합니다.

도움이 되지 못해 죄송합니다!

피드백을 제공해 주셔서 감사합니다.

아티클을 개선할 수 있는 방법을 알려주세요!

최소 하나의 이유를 선택하세요
CAPTCHA 확인이 필요합니다.

피드백 전송

소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.

02-558-8300