Kubernetes 환경에서 Application Log를 중앙에서 관리하기 위해서는 Log 수집 Agent가 필요합니다.
앞선 글에서 Kubernetes Logging Architecture 구조를 알아봤다면, 실제 운영 환경에서는 Node마다 발생하는 Container Log를 어떻게 수집하는지가 중요합니다.
Production Kubernetes Cluster에서는 수십 개 이상의 Node와 수백 개 이상의 Pod가 실행될 수 있습니다.
이때 모든 Pod의 Log를 직접 확인하는 것은 현실적으로 어렵습니다.
예:
Application Pod 500개
↓
각각 Log 발생
↓
운영자가 직접 확인 불가능
따라서 Kubernetes에서는 Log Agent를 사용하여 자동으로 Log를 수집합니다.
대표적인 Log Agent:
- Fluent Bit
- Fluentd
- Filebeat
그중 Fluent Bit은 가볍고 빠른 성능 때문에 Kubernetes 환경에서 가장 많이 사용되는 Log 수집 Agent 중 하나입니다.
| 구성 요소 | 역할 |
|---|---|
| Fluent Bit | Log 수집 Agent |
| DaemonSet | Node별 Agent 실행 |
| Input | Log 입력 |
| Filter | Log 가공 |
| Output | Log 전달 |
Fluent Bit 구조를 이해하면 Kubernetes 환경에서 Container Log를 자동 수집하고 중앙 Logging 시스템을 구축할 수 있습니다.
Kubernetes Fluent Bit이 필요한 이유
Kubernetes Container Log는 기본적으로 Node 내부에 저장됩니다.
구조:
Application Container
↓
stdout / stderr
↓
Container Runtime
↓
Node Log
↓
삭제 가능
문제:
Pod 삭제
↓
Local Log 손실
또는
Node 장애
↓
Log 접근 불가
따라서 Log를 외부 Storage로 전달하는 과정이 필요합니다.
Fluent Bit이란?
Fluent Bit은 Cloud Native 환경을 위한 경량 Log Processor입니다.
주요 특징:
- 낮은 Memory 사용량
- 빠른 Log 처리
- 다양한 Output 지원
- Kubernetes 친화적 구조
특히 Kubernetes에서는 DaemonSet 형태로 배포됩니다.
Kubernetes Fluent Bit 동작 구조
전체 흐름:
Application Container
↓
Container Log 생성
↓
Node Log File
↓
Fluent Bit Pod
↓
Log Parsing
↓
Central Logging Storage
↓
검색 및 분석
각 Node에서 발생하는 Log를 자동으로 수집합니다.
Kubernetes Fluent Bit과 DaemonSet 관계
Fluent Bit은 대부분 DaemonSet으로 설치합니다.
이유:
Kubernetes Cluster:
Node 1
↓
Fluent Bit 실행
Node 2
↓
Fluent Bit 실행
Node 3
↓
Fluent Bit 실행
모든 Node의 Log를 수집해야 하기 때문입니다.
새로운 Node 추가:
Node 생성
↓
DaemonSet Controller 확인
↓
Fluent Bit 자동 생성
운영 확장성이 뛰어납니다.
Kubernetes Fluent Bit Input 구조
Input은 Log 데이터를 어디에서 가져올지 정의합니다.
대표 Input:
Tail Input
가장 많이 사용됩니다.
역할:
Node Log File 읽기
예:
/var/log/containers/*.log
Container Log를 수집합니다.
Kubernetes Fluent Bit Filter 구조
Filter는 수집한 Log를 가공합니다.
예:
기존 Log:
error occurred
변환:
{
"level":"error",
"message":"error occurred",
"namespace":"production"
}
분석하기 좋은 형태로 변경합니다.
Kubernetes Fluent Bit Kubernetes Filter
Kubernetes 환경에서는 Kubernetes Metadata를 추가할 수 있습니다.
추가 정보:
- Pod 이름
- Namespace
- Container 이름
- Label
예:
Log:
Database connection failed
변환:
{
"pod":"mysql-0",
"namespace":"production",
"message":"Database connection failed"
}
장애 분석이 쉬워집니다.
Kubernetes Fluent Bit Output 구조
Output은 Log를 어디로 전달할지 결정합니다.
대표:
| Output | 용도 |
|---|---|
| Elasticsearch | 검색 중심 Logging |
| Loki | Grafana 기반 Logging |
| CloudWatch | AWS 환경 |
| Kafka | 대규모 Streaming |
운영 환경에 맞게 선택합니다.
Kubernetes Fluent Bit 설치 구조
일반적인 구성:
Namespace 생성
↓
ConfigMap 생성
↓
DaemonSet 배포
↓
ServiceAccount 연결
↓
Log 수집 시작
Kubernetes Resource로 관리됩니다.
Fluent Bit ConfigMap 구조
Fluent Bit 설정은 ConfigMap으로 관리합니다.
포함:
- Input 설정
- Filter 설정
- Output 설정
예:
kind: ConfigMap
metadata:
name: fluent-bit-config
설정을 변경하면 Logging 동작을 조정할 수 있습니다.
Kubernetes Fluent Bit Resource 관리
Log Agent도 Container이기 때문에 Resource 관리가 필요합니다.
설정:
- CPU Request
- Memory Request
- Limit
이유:
Log 수집 Agent가 Node Resource를 과도하게 사용하면 Application에 영향을 줄 수 있습니다.
Kubernetes Fluent Bit 장애 사례
| 문제 | 원인 |
|---|---|
| Log 미수집 | Path 설정 오류 |
| Log 중복 | Buffer 설정 문제 |
| Memory 증가 | Filter 처리 문제 |
| Output 실패 | Storage 연결 오류 |
Log Pipeline 전체 확인이 필요합니다.
Kubernetes Fluent Bit Log 보관 구조
일반적인 운영 구조:
Fluent Bit
↓
Loki / Elasticsearch
↓
Storage
↓
Retention Policy
장기간 장애 분석을 위해 보관 정책을 설정합니다.
Kubernetes Fluent Bit와 Loki 비교
최근 Kubernetes 환경에서는 Loki 조합도 많이 사용합니다.
구조:
Fluent Bit
↓
Loki
↓
Grafana
장점:
- 가벼운 구조
- Kubernetes 친화적
- 비용 효율적
대규모 검색 환경에서는 Elasticsearch 조합도 사용합니다.
Kubernetes Fluent Bit 운영 전략
Production 환경에서는:
1단계
Log Format 통일
↓
2단계
Fluent Bit 배포
↓
3단계
Storage 연결
↓
4단계
Dashboard 구성
↓
5단계
Alert 연결
순서로 구성합니다.
Kubernetes Fluent Bit 장점
| 장점 | 설명 |
|---|---|
| 경량성 | 낮은 Resource 사용 |
| 확장성 | Node 증가 대응 |
| 자동 수집 | 운영 효율 증가 |
| 다양한 연결 | 여러 Storage 지원 |
Kubernetes Logging 환경에서 중요한 Component입니다.
자주 묻는 질문
Fluent Bit과 Fluentd 차이는 무엇인가요?
Fluent Bit은 경량 Agent에 적합하고 Fluentd는 더 복잡한 데이터 처리에 적합합니다.
Fluent Bit은 왜 DaemonSet으로 실행하나요?
모든 Kubernetes Node의 Log를 수집해야 하기 때문입니다.
Fluent Bit 없이 Kubernetes 운영이 가능한가요?
가능하지만 Production 환경에서는 중앙 Logging 구성이 일반적입니다.
마무리
Kubernetes Fluent Bit은 Container Log를 자동으로 수집하고 중앙 Logging 시스템으로 전달하는 핵심 Log Agent입니다.
| 구성 요소 | 역할 |
|---|---|
| Fluent Bit | Log 수집 |
| DaemonSet | Node별 실행 |
| Filter | Log 가공 |
| Output | Storage 전달 |
Fluent Bit 구조를 이해하면 Kubernetes 환경에서 대규모 Container Log를 안정적으로 관리하고 장애 분석 환경을 구축할 수 있습니다.
다음 글에서는 Kubernetes Log 저장과 검색 시스템을 구성하는 Kubernetes Loki 완벽 가이드! Grafana 기반 Lightweight Logging 시스템 구축 방법 이해하기를 알아보겠습니다.