들어가며
- 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 파일에 지정할 수 있습니다.
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 파일에 지정할 수 있습니다.
아티클이 유용했나요?
훌륭합니다!
피드백을 제공해 주셔서 감사합니다.
도움이 되지 못해 죄송합니다!
피드백을 제공해 주셔서 감사합니다.
피드백 전송
소중한 의견을 수렴하여 아티클을 개선하도록 노력하겠습니다.