- EKS
- cloudnative
- Lambda
- go
- aws
- kubernetes admission controller
- SAA-CO2
- containerorchestration
- JVM
- Certified Solutions Architect
- SMTP
- CKA
- nodeaffinity
- gochannel
- Java
- K8S
- aws ses
- kubernetes 클러스터 보안
- kubernetesscheduling
- SAA-CO3
- Kubernetes
- kubernetesadmin
- DKIM
- SPF
- Fargate
- DevOps
- kubernetesstudyguide
- dMarc
- 메일 인증 프로토콜
- Today
- Total
DevOps Tasks
[Kubernetes] EKS Fargate에서 Fluent Bit으로 CloudWatch 및 Firehose 로그 전송하기 본문
[Kubernetes] EKS Fargate에서 Fluent Bit으로 CloudWatch 및 Firehose 로그 전송하기
데밥스 2025. 2. 9. 21:211. 개요
`EKS Fargate`를 사용하면 `EC2` 기반 노드 없이 컨테이너를 실행할 수 있지만, 기본적으로 로깅 기능이 제공되지 않습니다.
따라서 `Fluent Bit`을 활용하여 로그를 수집하고 원하는 저장소로 전송해야 합니다.
이 글에서는 `EKS Fargate`에서 로깅이 어떻게 동작하는지, 그리고 `CloudWatch Logs`와 `Kinesis Firehose`를 활용한 로깅 설정 방법 및 비교를 설명하겠습니다.
EKS Fargate Logging with Fluent Bit
Kubernetes의 CoreDNS와 Logging Architecture을 알아봤으니 실제 Application Pod에서 발생하는 로그를 EKS Cluster 외부로 빼보자. 먼저, Kubernetes 클러스터 내에서 핵심 역할을 수행하는 CoreDNS와 로깅 기능의 핵심
rldnjsdlsi.tistory.com
2. CloudWatch Logs vs. Kinesis Firehose 비교
`EKS Fargate` 로깅 방식 선택 시 `CloudWatch Logs`와 `Kinesis Firehose`의 차이점을 이해하는 것이 중요합니다.
항목 | CloudWatch Logs | Kinesis Firehose |
주요 목적 | 빠른 로그 조회 및 모니터링 | 실시간 분석 및 장기 보관 |
저장 위치 | CloudWatch Logs | S3, Redshift, OpenSearch 등 |
운영 편의성 | 간편한 설정, AWS 기본 대시보드 제공 | 데이터 파이프라인 추가 설정 필요 |
장점 | - 빠른 로그 검색 가능 - 별도 인프라 설정 없이 간단 적용 | - 다양한 저장소 연계 가능 - 대량 데이터 분석 최적화 |
단점 | - 장기 보관 시 비용 부담 - 분석 기능 제한적 | - Firehose 스트림 설정 필요 - 직접적인 로그 조회 불가 |
🚀 결론
- 운영 로그를 빠르게 확인하려면 `CloudWatch Logs`가 유리합니다.
- 로그 분석 및 장기 보관이 필요하면 `Kinesis Firehose`가 적합합니다.
3. EKS Fargate 로깅 흐름
`EKS Fargate`에서 로그는 다음과 같은 흐름으로 처리됩니다.
- `Fargate`에서 실행 중인 컨테이너에서 로그 생성
- `Fluent Bit`이 로그를 수집하고 필터링/변환 수행
- `CloudWatch Logs` 또는 `Kinesis Firehose`로 로그 전송
- `CloudWatch Logs`는 바로 저장 및 조회 가능, `Firehose`는 `S3`, `OpenSearch` 등으로 전달 가능
`Fargate` 환경에서는 `EC2`와 달리 직접 로그 파일을 확인할 수 없기 때문에, `CloudWatch Logs` 또는 `Kinesis Firehose`를 이용한 중앙화된 로그 관리가 필수적입니다.
4. EKS Fargate 로깅 설정 방법
`Fargate`에서 로그를 수집하려면 `aws-observability` 네임스페이스에 `aws-logging` `ConfigMap`을 생성해야 합니다.
아래는 `CloudWatch Logs`와 `Kinesis Firehose`를 각각 설정하는 방법입니다.
CloudWatch Logs 설정
`CloudWatch Logs`로 로그를 전송하려면 `aws-logging ConfigMap`을 생성하고 `Fluent Bit`이 로그를 `CloudWatch`로 보내도록 설정해야 합니다.
kind: Namespace
apiVersion: v1
metadata:
name: aws-observability
labels:
aws-observability: enabled
---
kind: ConfigMap
apiVersion: v1
metadata:
name: aws-logging
namespace: aws-observability
data:
flb_log_cw: "true"
filters.conf: |
[FILTER]
Name parser
Match *
Key_name log
Parser crio
[FILTER]
Name kubernetes
Match kube.*
Merge_Log On
Keep_Log Off
Buffer_Size 0
Kube_Meta_Cache_TTL 300s
output.conf: |
[OUTPUT]
Name cloudwatch_logs
Match kube.*
region <AWS_REGION>
log_group_name <CLOUDWATCH_LOG_GROUP_NAME>
log_stream_prefix from-fluent-bit-
log_retention_days 60
auto_create_group true
parsers.conf: |
[PARSER]
Name crio
Format Regex
Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>P|F) (?<log>.*)$
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L%z
✅ CloudWatch Logs 방식 장점
- AWS 콘솔에서 바로 로그를 검색하고 확인할 수 있음
- 별도 인프라 구성 없이 간단하게 적용 가능
Kinesis Firehose 설정
Kinesis Firehose를 이용하면 로그를 다양한 저장소(S3, OpenSearch, Redshift 등)로 전송할 수 있습니다.
kind: Namespace
apiVersion: v1
metadata:
name: aws-observability
labels:
aws-observability: enabled
---
kind: ConfigMap
apiVersion: v1
metadata:
name: aws-logging
namespace: aws-observability
data:
flb_log_cw: "true"
filters.conf: |
[FILTER]
Name parser
Match *
Key_name log
Parser crio
[FILTER]
Name kubernetes
Match kube.*
Merge_Log On
Keep_Log Off
Buffer_Size 0
Kube_Meta_Cache_TTL 300s
output.conf: |
[OUTPUT]
Name kinesis_firehose
Match *
region ap-northeast-2
delivery_stream <AWS_FIREHOSE_NAME>
parsers.conf: |
[PARSER]
Name crio
Format Regex
Regex ^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<logtag>P|F) (?<log>.*)$
Time_Key time
Time_Format %Y-%m-%dT%H:%M:%S.%L%z
AWS Firehose 생성
✅ Kinesis Firehose 방식 장점
- 로그를 `S3`, `OpenSearch`, `Redshift` 등 다양한 저장소로 전송 가능
- 실시간 데이터 분석 및 장기 보관에 유리
5. IAM Role 설정
`Fluent Bit`이 `CloudWatch Logs` 또는 `Firehose`에 로그를 보내려면 `IAM Role`이 필요합니다.
kind: IAMPolicy
metadata:
name: fluentbit-log-policy
spec:
policyDocument:
Statement:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
Resource: "*"
- Effect: Allow
Action:
- firehose:PutRecord
- firehose:PutRecordBatch
Resource: "arn:aws:firehose:ap-northeast-2:123456789012:deliverystream/my-firehose-stream"
6. 마무리
위 설정을 적용한 후 `Fargate Pod`를 재시작하면 로그가 정상적으로 전송됩니다.
특히, `Firehose`를 사용할 경우 AWS 콘솔에서 `Firehose Stream`을 생성한 후, 해당 스트림 이름을 output.conf에 정확히 설정해야 합니다.
즉, 이대로 따라 하면 Fargate 로그 수집이 바로 동작합니다! 🚀
이제 EKS Fargate 환경에서도 안정적으로 로깅을 운영해 보세요!
'Kubernetes' 카테고리의 다른 글
[Kubernetes] Admission Controller 란? (0) | 2025.02.09 |
---|---|
Kubernetes Taints, Tolerations, Node Affinity를 활용한 최적의 Pod 스케줄링 (0) | 2024.12.28 |
AWS Fargate에서 Pod Disruption Budget(PDB)로 OS 패치 대응하기 (0) | 2024.12.03 |
[Kubernetes] AWS EKS에서 Kubernetes Pod별 보안 그룹 설정: 네트워크 보안 강화 (0) | 2024.12.03 |
[Kubernetes] Karpenter Spot Node 모니터링을 위한 EventBridge 설정 (0) | 2024.12.03 |