본문 바로가기
DevOps

[DevOps]Kubernetes 모니터링 & 로깅 시스템 구축 가이드 (Prometheus, Grafana, Loki 활용) 📈

by 다다면체 2025. 3. 6.
728x90
반응형

안녕하세요! 오늘은 클라우드 네이티브 애플리케이션 운영에 있어서 빼놓을 수 없는 중요한 주제, 바로 모니터링 & 로깅 시스템 구축에 대해 이야기해보려고 합니다. 특히 Kubernetes 환경에서 안정적인 서비스 운영을 위해 필수적인 Prometheus, Grafana, Loki를 활용하여 강력한 모니터링 및 로깅 시스템을 구축하는 방법을 자세히 알아보겠습니다.

반응형

🚀 서론: 왜 모니터링 & 로깅 시스템이 중요할까요?

클라우드 네이티브 환경, 특히 Kubernetes 위에서 애플리케이션을 운영하다 보면 복잡성이 증가하고, 다양한 구성 요소들이 유기적으로 연결되어 작동합니다. 이러한 환경에서 서비스의 성능 분석, 장애 감지, 문제 해결, 그리고 미래를 위한 용량 계획을 수립하기 위해서는 효과적인 모니터링 및 로깅 시스템이 필수적입니다.

Observability (관측 가능성) 라는 용어를 들어보셨나요? 이는 시스템의 외부적인 출력(Metrics, Logs, Traces)을 통해 시스템 내부 상태를 얼마나 잘 이해할 수 있는지를 나타내는 개념입니다. 효과적인 모니터링 및 로깅 시스템은 바로 이 Observability를 확보하여, 시스템의 건강 상태를 진단하고 잠재적인 문제를 사전에 예방하며, 장애 발생 시 신속하게 대응할 수 있도록 돕습니다.

📌 핵심 내용: 모니터링 & 로깅 시스템 완벽 해부

1. 모니터링 & 로깅 시스템 개요

모니터링 시스템은 시스템의 메트릭 (Metrics) 데이터를 수집, 저장, 시각화하고 알림을 제공하여 시스템의 현재 상태와 성능을 실시간으로 파악하도록 돕습니다. 반면 로깅 시스템은 애플리케이션과 시스템의 로그 (Logs) 데이터를 수집, 저장, 검색 및 분석하여 시스템 내에서 발생하는 이벤트와 문제점을 심층적으로 파악하도록 지원합니다.

Observability의 3가지 Pillars인 Metrics, Logs, Traces 중 모니터링 시스템은 주로 Metrics, 로깅 시스템은 Logs를 다루며, 분산 추적 시스템은 Traces를 담당합니다. (Traces는 추가 학습 챕터에서 간략하게 소개할 예정입니다.)

모니터링 시스템 구성 요소는 크게 4가지로 나눌 수 있습니다.

  • Data Collection (데이터 수집): Prometheus Exporter, Agent 등을 이용하여 메트릭 데이터를 수집합니다.
  • Storage (저장): 수집된 메트릭 데이터를 시계열 데이터베이스 (Time Series Database, TSDB) 에 저장합니다. Prometheus 자체가 TSDB 역할을 합니다.
  • Visualization (시각화): Grafana와 같은 도구를 이용하여 데이터를 시각화하고 대시보드를 구성합니다.
  • Alerting (알림): Alertmanager를 통해 정의된 규칙에 따라 알림을 발송합니다.

로깅 시스템 구성 요소 역시 4가지로 구성됩니다.

  • Log Shipper (로그 수집기): Fluentd, Promtail 등을 이용하여 로그를 수집하고 가공합니다.
  • Log Aggregator (로그 집계기): 수집된 로그를 중앙 집중적으로 관리하고 인덱싱합니다. Loki는 Log Aggregator 역할을 합니다.
  • Log Storage (로그 저장소): 집계된 로그를 저장합니다. Loki는 자체적으로 효율적인 로그 저장 방식을 사용합니다.
  • Log Visualization (로그 시각화): Grafana를 이용하여 로그를 검색하고 분석하며 대시보드를 구성합니다.

2. Prometheus, Grafana, Loki 소개 및 비교

이제 Kubernetes 모니터링 및 로깅 시스템 구축에 핵심적인 도구인 Prometheus, Grafana, Loki를 자세히 알아보고 비교 분석해 보겠습니다.

  • Prometheus: 메트릭 모니터링을 위한 핵심 도구입니다.
    • 특징: 시계열 데이터베이스 기반으로 메트릭 데이터를 효율적으로 저장하고 관리합니다. Pull-based 방식으로 타겟으로부터 메트릭을 능동적으로 수집합니다. PromQL이라는 강력한 쿼리 언어를 제공하며, Alertmanager와 통합되어 알림 기능을 제공합니다.
    • 장점: Kubernetes 환경에 최적화되어 있으며, 다양한 Exporter를 통해 다양한 시스템 및 애플리케이션 메트릭을 수집할 수 있습니다.
    • 단점: 장기적인 데이터 저장 및 확장에 Thanos와 같은 별도의 솔루션이 필요할 수 있습니다.
  • Grafana: 데이터 시각화 및 대시보드 구축을 위한 필수 도구입니다.
    • 특징: 다양한 데이터 소스 (Prometheus, Elasticsearch, Loki 등)와 연동하여 데이터를 시각화할 수 있습니다. 매우 Flexible한 대시보드 구성이 가능하며, 다양한 플러그인을 통해 기능을 확장할 수 있습니다.
    • 장점: 직관적인 UI와 다양한 시각화 옵션을 제공하여 데이터를 효과적으로 분석하고 이해할 수 있도록 돕습니다.
    • 단점: 자체적인 데이터 저장 기능은 제공하지 않으며, 데이터 소스와 연동이 필수적입니다.
  • Loki: 로그 집계 및 쿼리 시스템입니다.
    • 특징: Prometheus와 긴밀하게 통합되어 효율적인 로그 저장 및 검색 기능을 제공합니다. LogQL 쿼리 언어를 사용하여 로그를 검색하고 분석합니다. 로그 자체를 인덱싱하는 대신, 로그의 메타데이터 (Label)를 인덱싱하여 효율적인 검색이 가능합니다.
    • 장점: Prometheus와 동일한 Label 기반 시스템을 사용하여 Prometheus 메트릭과 Loki 로그를 연동하여 분석하기 용이합니다. 대용량 로그 데이터를 효율적으로 처리할 수 있습니다.
    • 단점: 로그 전문 분석 도구인 Elasticsearch에 비해 기능이 제한적일 수 있습니다. (하지만 Kubernetes 환경에서는 충분히 강력한 기능을 제공합니다.)

기능 Prometheus Grafana Loki
주요 역할 메트릭 모니터링 데이터 시각화 및 대시보드 로그 집계 및 쿼리
데이터 유형 메트릭 (시계열 데이터) 다양한 데이터 소스 (메트릭, 로그 등) 로그 (텍스트 데이터)
쿼리 언어 PromQL 데이터 소스별 쿼리 언어 (PromQL, LogQL 등) LogQL
데이터 수집 방식 Pull-based 데이터 소스 연동 Push-based (Promtail), Agent-based (Fluentd)
알림 기능 Alertmanager 연동 Grafana Alerting (최근 강화) Alertmanager 연동 (Prometheus Metric 기반)
특징 및 장점 Kubernetes 최적화, 강력한 쿼리, 알림 기능 뛰어난 시각화, 다양한 데이터 소스 연동, Flexible 대시보드 Prometheus 통합, 효율적인 로그 저장 및 검색, 대용량 로그 처리

모니터링 & 로깅 시스템 구축 도구 선택 가이드:

Kubernetes 환경에서는 Prometheus + Grafana + Loki 조합이 매우 강력하고 효과적인 선택입니다. 메트릭 모니터링에는 Prometheus, 시각화에는 Grafana, 로깅에는 Loki를 사용하는 것이 일반적인 베스트 프랙티스입니다.

3. Prometheus + Grafana 메트릭 모니터링 시스템 구축

이제 실제로 Kubernetes 환경에 Prometheus + Grafana 메트릭 모니터링 시스템을 구축해 보겠습니다.

(1) Prometheus Operator 설치:

Prometheus Operator는 Kubernetes 환경에서 Prometheus, Alertmanager 등을 쉽게 배포하고 관리할 수 있도록 도와주는 Operator입니다. kubectl apply 명령어를 사용하여 간단하게 설치할 수 있습니다.

kubectl apply -f https://raw.githubusercontent.com/prometheus-operator/prometheus-operator/main/bundle.yaml

 

(2) Prometheus 설정 (ServiceMonitor, PodMonitor):

Prometheus Operator를 통해 배포된 Prometheus는 ServiceMonitorPodMonitor라는 CRD (Custom Resource Definition)를 이용하여 모니터링 대상 서비스 및 Pod를 자동으로 Discovery합니다. 각 CRD를 정의하여 Prometheus가 어떤 대상을 모니터링할지 설정할 수 있습니다.

# ServiceMonitor 예시
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: my-service-monitor
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app: my-service  # 모니터링 대상 Service Label
  endpoints:
  - port: web
    interval: 30s

 

(3) Grafana 설치 및 Prometheus 연동:

Grafana는 Helm Chart를 이용하여 쉽게 배포할 수 있습니다. helm install 명령어를 이용하여 Grafana를 설치하고, Grafana에서 Prometheus를 데이터 소스로 추가하여 연동합니다.

helm repo add grafana https://grafana.github.io/helm-charts
helm install grafana grafana/grafana -n monitoring

Grafana UI에서 Prometheus 데이터 소스를 추가하고, Prometheus 서버 주소를 입력하면 연동이 완료됩니다.

 

(4) Grafana 대시보드 구성:

Grafana 대시보드 기능을 이용하여 CPU, Memory, Network, HTTP Request 등 Kubernetes 클러스터 및 애플리케이션 모니터링 대시보드를 생성합니다. Grafana는 다양한 시각화 옵션 (Graph, Gauge, Table 등)을 제공하며, import 기능을 이용하여 미리 만들어진 대시보드 템플릿을 활용할 수도 있습니다.

 

(5) Alertmanager 설정 및 알람 기능:

Prometheus Operator를 통해 Alertmanager도 함께 배포됩니다. Prometheus Rule을 정의하여 알람 조건을 설정하고, Alertmanager 설정을 통해 Slack, Email 등 다양한 채널로 알림을 발송할 수 있습니다.

4. Loki 분산 로깅 시스템 구축

다음으로 Loki 분산 로깅 시스템을 구축해 보겠습니다. 여기서는 로그 수집을 위해 Promtail을 함께 사용합니다.

(1) Loki, Promtail, Grafana 설치:

Loki, Promtail, Grafana 역시 Helm Chart를 이용하여 간편하게 배포할 수 있습니다.

helm repo add grafana https://grafana.github.io/helm-charts
helm install loki grafana/loki-stack -n logging

 

(2) Promtail 설정:

Promtail은 Kubernetes 환경에서 로그를 수집하는 Agent입니다. Pod logs, System logs 등 다양한 로그 소스를 수집하도록 설정할 수 있습니다. Log labeling 및 processing 설정을 통해 로그를 효율적으로 관리할 수 있습니다. Promtail은 DaemonSet 형태로 배포되어 각 노드에서 로그를 수집하는 것이 일반적입니다.

# Promtail 설정 예시 (DaemonSet)
apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: promtail
  namespace: logging
spec:
  template:
    spec:
      containers:
      - name: promtail
        image: grafana/promtail:2.5
        args:
          - "-config.file=/etc/promtail/promtail.yaml"
        volumeMounts:
        - name: config-volume
          mountPath: /etc/promtail
        - name: varlog
          mountPath: /var/log
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      volumes:
      - name: config-volume
        configMap:
          name: promtail-config
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlibdockercontainers
        hostPath:
          path: /var/lib/docker/containers

 

(3) Loki 데이터 소스 Grafana 연동 및 로그 대시보드 구성:

Grafana UI에서 Loki를 데이터 소스로 추가하고, LogQL 쿼리를 이용하여 로그를 검색하고 분석합니다. Loki 데이터 소스를 기반으로 로그 검색 및 분석 대시보드를 생성하여 로그 데이터를 효과적으로 시각화할 수 있습니다.

✅ 결론: Kubernetes 환경 모니터링 & 로깅 시스템 구축 완료! 📈+☸️

이번 포스팅에서는 Kubernetes 환경에서 안정적인 애플리케이션 운영을 위한 필수 요소인 모니터링 & 로깅 시스템 구축 방법에 대해 자세히 알아보았습니다. Prometheus, Grafana, Loki를 이용하여 메트릭 모니터링 및 분산 로깅 시스템을 구축함으로써, Kubernetes 환경의 Observability를 크게 향상시킬 수 있습니다.

728x90
반응형