클라우드프로그래밍 13주차 — 중앙 집중식 로그 관리 (Fluent Bit + Elasticsearch + Kibana)
분산된 컨테이너 로그를 한곳에 모으는 중앙 로깅을 다룬 13주차 기록. Fluent Bit → Elasticsearch → Kibana 파이프라인을 클러스터에 배포하고 로그 적재를 확인했다.
13주차는 분산된 컨테이너 로그를 한곳에 모으는 중앙 로깅 을 구축한다. Fluent Bit(수집) → Elasticsearch(저장) → Kibana(시각화) 파이프라인을 7주차 클러스터에 배포했다.
핵심 개념
- EFK/ELK 스택: 노드마다 도는 Fluent Bit(DaemonSet)가
/var/log/containers/*.log를 tail → 쿠버네티스 메타데이터(파드/네임스페이스)로 enrich → Elasticsearch 인덱스에 저장 → Kibana 로 검색·시각화한다. - 왜 중앙 로깅인가: 파드는 일회용이고 여러 노드에 흩어진다.
kubectl logs로 일일이 보기 어렵기 때문에 한 곳에 모아 검색한다.
파이프라인 구축
Elasticsearch 배포 (단일 노드)
1
2
3
4
5
$ kubectl apply -f elasticsearch.yaml # discovery.type=single-node, -Xms512m
$ kubectl exec deploy/elasticsearch -- curl -s localhost:9200/_cluster/health
status: green | nodes: 1
$ kubectl exec deploy/elasticsearch -- curl -s localhost:9200 | jq .version.number
"7.17.10"
Kibana 배포
1
2
3
$ kubectl apply -f kibana.yaml # ELASTICSEARCH_HOSTS=http://elasticsearch:9200
$ kubectl wait --for=condition=Available deploy/kibana
deployment.apps/kibana condition met
로그 생성 파드 + Fluent Bit(DaemonSet) 배포
1
2
3
4
$ kubectl apply -f logger.yaml # "CLOUDPROG-WEEK13 ... log entry number N" 출력
$ helm install fluent-bit fluent/fluent-bit -f fluentbit-values.yaml # OUTPUT → es(elasticsearch:9200)
$ kubectl rollout status ds/fluent-bit
daemon set "fluent-bit" successfully rolled out
파이프라인 확인 — 로그가 ES에 적재되는지
1
2
3
4
5
6
7
$ kubectl exec deploy/elasticsearch -- curl -s "localhost:9200/_cat/indices/fluentbit?h=index,docs.count,store.size"
fluentbit 48 166.7kb
$ kubectl exec deploy/elasticsearch -- curl -s "localhost:9200/fluentbit/_search?q=CLOUDPROG-WEEK13"
총 매칭: 14
log: CLOUDPROG-WEEK13 timecheck log entry number 4 | ns: default
log: CLOUDPROG-WEEK13 timecheck log entry number 5 | ns: default
로거 파드의 stdout이 Fluent Bit를 거쳐 Elasticsearch fluentbit 인덱스에 적재됐고, 쿠버네티스 네임스페이스 메타데이터(ns: default)까지 함께 붙는다.
Kibana에서 인덱스 패턴 생성 + Discover 검색
1
2
3
4
# 인덱스 패턴 생성(API)
$ curl -X POST localhost:5601/api/saved_objects/index-pattern/fluentbit -H "kbn-xsrf: true" \
-d '{"attributes":{"title":"fluentbit","timeFieldName":"@timestamp"}}'
생성된 패턴 id: fluentbit
Kibana Discover 에서 CLOUDPROG-WEEK13 으로 검색하면, 로그 메시지·파드명·네임스페이스 컬럼으로 조회된다.
로그가 log, kubernetes.pod_name(timecheck-logger), kubernetes.namespace_name(default) 컬럼과 함께 표시된다.
정리
1
2
$ helm uninstall fluent-bit
$ kubectl delete -f kibana.yaml -f elasticsearch.yaml -f logger.yaml
정리
11주차의 사이드카(공유 볼륨 로그 수집)가 노드 단위 DaemonSet(Fluent Bit) 로 확장된 구조다. 앱은 stdout에만 출력하면 되고(12factor), 수집·저장·검색은 인프라가 담당한다. _cat/indices 와 _search 로 로그가 ES에 적재된 것을 확인한 뒤 Kibana로 시각화하면 파이프라인 각 단계를 구분해 볼 수 있다. ES 기동에 vm.max_map_count=262144(커널 파라미터)가 필요했던 점은, 네트워크/리눅스 기초가 운영 단계에서 쓰이는 사례다.