Kubernetes/Kubernetes Best Practices

[Scenario Playbook - 심화편 | Low Level #13] 쿠버네티스 로그 분석 및 로그 수집 시스템 구축

ygtoken 2025. 3. 16. 18:55
728x90

 

쿠버네티스 환경에서는 컨테이너가 종료되거나 재시작되면 로그가 손실될 수 있습니다.

이를 방지하고 애플리케이션의 문제를 효과적으로 진단하기 위해 로그 수집 시스템을 구축하는 것이 중요합니다.

이 글에서는 kubectl을 활용한 기본적인 로그 조회 방법과 Fluentd DaemonSet을 사용하여 로그를 중앙에서 관리하는 방법을 다룹니다.

 


📌 글에서 다루는 상황들

 

1. kubectl logs를 활용한 기본적인 로그 조회 방법

2. Fluentd DaemonSet을 활용한 중앙 집중식 로그 수집

 

각 문제를 실무에서 바로 활용할 수 있도록 Manifest 템플릿과 예상 결과 값을 제공합니다.

 


1️⃣ kubectl logs를 활용한 기본적인 로그 조회 방법

 

❓ 문제 상황

 

운영팀에서 특정 애플리케이션이 정상적으로 실행되지 않고 있으며, 로그를 확인하여 원인을 파악해야 합니다.

kubectl logs 명령어를 활용하여 애플리케이션의 실행 로그를 조회해야 합니다.

문제 발생 Pod: web-app-pod

로그를 확인하여 애플리케이션 오류 원인을 분석

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. kubectl logs 명령어를 사용하여 애플리케이션 로그를 조회합니다.

 

2. kubectl logs -f 옵션을 활용하여 실시간 로그를 모니터링합니다.

 


✅ 문제 해결을 위한 명령어 실행

 

🔹 기본 로그 조회

kubectl logs web-app-pod

 

💡 예상 출력 값

[2024-03-13 12:00:01] INFO  Starting application...
[2024-03-13 12:00:05] ERROR Database connection failed: timeout

 

🔹 실시간 로그 모니터링

kubectl logs -f web-app-pod

kubectl logs를 활용하여 실시간으로 로그를 확인하며 문제를 분석할 수 있음

 


2️⃣ Fluentd DaemonSet을 활용한 중앙 집중식 로그 수집

 

❓ 문제 상황

 

운영팀에서 각 Pod에서 발생하는 로그를 수집하여 중앙에서 관리해야 합니다.

이를 위해 Fluentd DaemonSet을 배포하여 모든 노드에서 로그를 수집하고 중앙 로그 서버로 전송해야 합니다.

Fluentd DaemonSet을 배포하여 /var/log/containers 디렉터리의 로그를 수집

모든 Pod의 로그를 Fluentd가 수집하여 중앙 로그 저장소로 전송

 

✅ 어떻게 해결할 수 있을까요?

 


🛠️ 해결 방법

 

1. Fluentd DaemonSet을 배포하여 모든 노드에서 로그를 수집합니다.

 

2. Fluentd를 활용하여 애플리케이션 로그를 중앙 로그 저장소로 전송합니다.

 


✅ 정답 Manifest (Fluentd DaemonSet 설정)

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: fluentd-daemonset
spec:
  selector:
    matchLabels:
      app: fluentd
  template:
    metadata:
      labels:
        app: fluentd
    spec:
      containers:
      - name: fluentd
        image: fluent/fluentd
        volumeMounts:
        - name: varlog
          mountPath: /var/log  # 모든 노드의 로그를 수집
      volumes:
      - name: varlog
        hostPath:
          path: /var/log  # 노드의 /var/log 디렉토리를 마운트

 

 


📌 적용 후 예상 결과 값

 

1. Fluentd DaemonSet이 정상적으로 배포되었는지 확인

kubectl get daemonset

 

💡 예상 출력 값

NAME                DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
fluentd-daemonset  3         3         3       3            3           <none>          5s

 

2. Fluentd 로그 확인

kubectl logs -l app=fluentd --tail=10

 

💡 예상 출력 값

[2024-03-13 12:05:00] INFO Collecting logs from /var/log
[2024-03-13 12:05:05] INFO Sending logs to central log server

모든 노드에서 Fluentd가 로그를 수집하여 중앙 로그 저장소로 전송됨

728x90