Prometheus stack 으로 서버 시스템 모니터링 하기

 개요

본 문서에서는 Helm 차트를 이용해 Prometheus Stack을 설치하고, Kubernetes 기반 시스템의 상태를 효율적으로 모니터링하는 방법을 소개합니다.
Prometheus, Grafana, Alertmanager 등을 포함한 통합 모니터링 스택을 통해 클러스터의 리소스 사용량, 네트워크 트래픽, 애플리케이션 성능 등을 직관적으로 시각화하고, 운영 안정성을 높일 수 있습니다.


헬름차트 정보

NAME                                                    CHART VERSION   APP VERSION     DESCRIPTION

prometheus/kube-prometheus-stack                        75.15.1         v0.83.0         kube-prometheus-stack collects Kubernetes manif...


values.yaml 수정내용 요약

grafana ingress 활성 및 호스트이름 등록
prometheus ingress 활성 및 호스트이름 등록

설치

helm repo add prometheus https://prometheus-community.github.io/helm-charts
helm install prometheus-stack prometheus/kube-prometheus-stack -n monitoring --create-namespace -f values-dev.yaml


설치체크

파드 실행확인
kubectl --namespace monitoring get pods -l "release=prometheus-stack"


그라파나 admin 암호확인

kubectl --namespace monitoring get secrets prometheus-stack-grafana -o jsonpath="{.data.admin-password}" | base64 -d ; echo

그라파나 웹 접속하기


대시보드에 다양한 보고서들을 확인 할 수 있다.

기본으로 제공되는 대시보드



노드의 지표의 가시화된 내용을 확인 할 수 있다.



api 서버의 상태체크



대시보드의 요약

🔔 Alertmanager / Overview

  • alertmanager-mixin 태그

  • Alertmanager의 상태, 알림 수신/전송 상태 등을 보여줌


🌐 CoreDNS

  • coredns, dns 태그

  • 클러스터 DNS 성능 및 쿼리 상태를 모니터링


🔐 etcd

  • etcd-mixin 태그

  • Kubernetes에서 사용하는 etcd의 성능, 용량, 상태 등을 시각화


📊 Grafana Overview

  • 기본 Grafana 자체의 상태 요약 대시보드


🧩 Kubernetes 관련 대시보드 (kubernetes-mixin 태그)

⛓️ Compute 리소스

  • Multi-Cluster, Cluster, Namespace(Pods/Workloads), Node, Pod, Workload

  • CPU, 메모리 사용량을 다양한 단위 (클러스터, 네임스페이스, 노드, 파드) 기준으로 분석 가능

⚙️ 시스템 구성 요소

  • API Server, Controller Manager, Kubelet, Proxy, Scheduler

  • Kubernetes 핵심 컴포넌트들의 상태 및 성능 모니터링

🌐 네트워킹

  • Cluster, Namespace (Pods/Workloads), Pod, Workload

  • 각 단위별 네트워크 트래픽 (송수신 바이트, 패킷 등) 확인 가능

📦 Persistent Volumes

  • PV 사용량, 바인딩 상태, 사용률 등의 정보를 확인


🖥️ Node Exporter 관련 (node-exporter-mixin 태그)

  • AIX, MacOS, Nodes, USE Method (Cluster/Node)

  • 서버 OS별 메트릭, 리소스 사용 현황

  • USE MethodUtilization, Saturation, Errors 기반의 성능 분석


📈 Prometheus / Overview (prometheus-mixin)

  • Prometheus 자체의 상태 (target, rule, alert 상태 등) 시각화


그라파나 메뉴의 요약

🔸 기본 메뉴

  • Home
    기본 대시보드 페이지로 이동합니다.

  • Bookmarks
    즐겨찾기한 대시보드나 항목들을 확인할 수 있습니다.

  • Starred
    별표 표시한 대시보드 목록입니다.

  • Dashboards
    생성된 대시보드를 열람하고 새로 만들 수 있습니다.

  • Explore
    쿼리를 실시간으로 작성하고 시각화할 수 있는 탐색 기능입니다. 임시 시각화나 데이터 분석에 활용됩니다.


🔸 관찰(Observability) 관련 메뉴

  • Drilldown
    특정 데이터나 그래프에서 더 자세한 하위 데이터를 탐색할 수 있는 기능입니다. (ex: 클릭 → 세부 페이지로 이동)

  • Metrics
    Prometheus 등에서 수집된 메트릭 데이터를 확인할 수 있습니다.

  • Logs
    Loki 등의 데이터 소스에서 수집된 로그를 확인할 수 있습니다.

  • Traces
    분산 추적 데이터를 확인할 수 있으며, Tempo 같은 추적 시스템과 연동됩니다.

  • Profiles
    시스템의 성능 프로파일링 데이터를 시각화합니다. Grafana Pyroscope 등을 사용할 때 보입니다.


🔸 Alerting (알림)

  • Alert rules
    조건에 따라 경고(Alert)를 발생시키는 규칙 설정 화면입니다.

  • Contact points
    알림을 받을 연락 수단 (이메일, Slack, Webhook 등)을 설정합니다.

  • Notification policies
    알림 정책을 관리하고 어느 상황에서 어떤 연락처로 보낼지를 결정합니다.

  • Silences
    일시적으로 알림을 차단(silence)할 수 있는 설정입니다. 예: 점검 기간 중 경고 발생 방지.

  • Active notifications
    현재 활성화되어 있는 알림 상태를 확인할 수 있습니다.

  • Recently deleted
    최근 삭제된 알림이나 규칙을 확인할 수 있습니다.


🔸 설정 및 관리

  • Settings
    전체 Grafana 인스턴스의 설정을 구성할 수 있는 메뉴입니다.

  • Connections
    외부 시스템과의 연결을 관리합니다.

    • Add new connection
      새로운 데이터 소스나 외부 시스템을 연결할 수 있습니다.

    • Data sources
      Prometheus, Loki, InfluxDB 등 다양한 데이터 소스를 등록하고 관리할 수 있습니다.

  • Administration
    사용자, 팀, 조직, 보안 및 라이선스 등 관리 기능을 설정할 수 있습니다.


MySQL 연동

✅ ① metrics.serviceMonitor.enabled: true

MySQL exporter에서 노출한 /metrics endpoint를 Prometheus가 수집할 수 있도록 ServiceMonitor를 생성해야 합니다.

metrics:

  enabled: true  # MySQL exporter 활성화 (chart에 따라 위치 다를 수 있음)

  serviceMonitor:

    enabled: true

    namespace: monitoring   # Prometheus가 있는 네임스페이스

    interval: 30s

    scrapeTimeout: 10s

    selector: {}

    labels:

      release: prometheus  # Prometheus가 탐지할 label (Prometheus 설정과 일치해야 함)

중요: selectorlabels는 Prometheus Operator의 prometheus.spec.serviceMonitorSelectorMatchLabels 와 매칭되어야 합니다.

🚨 3. 알람 설정 예시 (prometheusRule)

MySQL이 다운되었는지 감지하는 Rule을 작성할 수 있습니다.

prometheusRule:

  enabled: true

  namespace: monitoring

  additionalLabels:

    release: prometheus

  rules:

    - alert: MysqlDown

      expr: absent(up{job="mysql"} == 1)

      for: 2m

      labels:

        severity: critical

        service: mysql

      annotations:

        summary: "MySQL instance is down"

        message: "MySQL instance {{ $labels.instance }} is not responding to Prometheus scrape."

이 알람은 up{job="mysql"}이 존재하지 않으면, 즉 mysql-exporter가 응답하지 않으면 트리거됩니다.

📊 4. Grafana에서 시각화

MySQL Exporter가 제공하는 메트릭(mysql_global_status_*, mysql_slave_*, mysql_perf_schema_* 등)을 기반으로 하는 대시보드를 Grafana에서 수동 또는 JSON으로 불러올 수 있습니다.



🔄 5. 종합 적용 흐름 요약

1. Helm chart 설치 시: - metrics.enabled: true - serviceMonitor.enabled: true → Prometheus가 scrape함 - prometheusRule.enabled: true → 알람 조건 설정됨 2. PrometheusOperator: - serviceMonitorSelector와 prometheusRuleSelector로 위 CR들을 자동 인식함 3. Alertmanager: - 알람 전송 (Slack, Email, Webhook 등) 4. Grafana: - Prometheus 데이터로 시각화


✳️ 참고 팁

  • job="mysql" 라벨은 exporter service에서 설정된 jobLabel 또는 Prometheus relabel 설정에 따라 다를 수 있으니 확인 필요.

  • Prometheus Operator가 설치된 네임스페이스와 release: prometheus 같은 라벨이 일치해야 자동 인식됩니다.

마무리하며,

위에서 소개한 대시보드는 클러스터 운영의 전반적인 상태를 직관적으로 파악할 수 있도록 도와줍니다.

이후 단계에서는 모니터링 가시화 요구사항을 더욱 정교하게 반영하거나, 시스템의 안정성 및 성능 가속화를 위한 설정, 보안 정책 강화를 위한 추가 구성이 필요할 수 있습니다.

특히, Alertmanager를 연동한 알람 설정을 통해 주요 지표의 이상 징후를 빠르게 감지하고 대응 체계를 마련하는 것도 중요한 운영 요소입니다.

환경에 맞는 최적화와 보완 작업을 통해 보다 효과적이고 신뢰성 있는 모니터링 체계를 구축하시기 바랍니다.

댓글

이 블로그의 인기 게시물

10.15 부동산 대책, 오피스텔도 LTV 40%인가요? 혼선 정리

Kubernetes Pod Pending 해결법: FailedScheduling 원인별 실전 점검 가이드

애플 비전 프로 새 밴드 착용감 어떨까? Dual Knit Band 착용 경험 리뷰