Grafana와 Prometheus


목적 및 개요

  • 이 문서는 현대 IT 시스템 운영에 필수적인 모니터링 시스템의 핵심 도구인 Prometheus와 Grafana에 대해 다룬다. Prometheus가 어떻게 시계열 데이터를 수집하고 저장하며, Grafana는 이를 바탕으로 어떻게 시각적으로 뛰어난 대시보드를 구축하고 효과적인 알림을 제공하는지 설명한다.

Grafana와 Prometheus

  • Prometheus는 SoundCloud에서 개발된 오픈소스 모니터링 및 알림 툴킷으로, 시계열 데이터베이스를 기반으로 한다. Pull 방식을 통해 지표를 수집하고, 강력한 쿼리 언어인 PromQL을 제공하여 복잡한 데이터 분서을 가능하게 한다.
  • Grafana는 다양한 데이터 소스를 지원하는 오픈소스 시각화 도구이다. Prometheus와 연동하여 수집된 데이터를 직관적인 대시보드로 표현하며, 알림 기능을 통해 시스템의 이상 징후를 즉시 관리자에게 통보하기도 한다.
  • 두 개의 도구는 상호 보완적인 관계를 통해 높은 모니터링 솔루션을 제공한다.

Prometheus - 시계열 데이터베이스 및 모니터링 시스템

  • Prometheus는 분산 시스템의 모니터링을 위해 설계되었으며, 아키텍처는 효율적인 데이터 수집 및 처리에 최적화되어 있다.

데이터 모델 및 시계열 데이터

    • Prometheus는 모든 데이터를 시계열 데이터로 저장한다. 각 시계열은 고유한 메트릭 이름과 레이블 집합으로 식별되며 시간과 값의 쌍으로 이루어진 데이터 포인트가 계속 추가된다. 이러한 데이터 모델은 유연하고 강력한 쿼리를 가능하게 지원한다.

Pull 기반 데이터 수집

    • Prometheus의 가장 큰 특징은 Pull 방식의 데이터 수집이다. Prometheus 서버는 미리 설정된 타켓으로부터 주기적으로 지표를 가져온다. 타켓은 HTTP 엔드포인트에 메트릭 데이터를 노출하고, Prometheus는 이 엔드포인트에 HTTP 요청을 보내 데이터를 스크랩한다. 이러한 방식은 중앙 집중식 제어,  타켓의 상태에 따른 유연한 스크래핑을 가능하게 한다.

Prometheus 설치 및 기본 설정

    • Prometheus는 다양한 운영체제에서 실행 가능하며, 바이너리 파일을 다운로드하거나 Docker 이미지를 통해 쉽게 설치할 수 있다. 설치 후 prometheus.yml 파일을 통해 설정을 진행하며 스크래핑할 타켓, 스크래핑 주기, 룰 파일 위치 등이 정의된다.


prometheus.yml(example)
lobal:
  scrape_interval: 15s # 기본 스크랩 주기 설정

scrape_configs:.
  - job_name: 'prometheus'
    # Prometheus 자체를 모니터링
    static_configs:

      - targets: ['your ip:9090']

  - job_name: 'node_exporter'
    # Node Exporter를 통해 서버 모니터링 (예시)
    static_configs:
      - targets: ['your ip:9100']


다양한 서비스 모니터링

    • Prometheus는 Exporter를 통해 다양한 애플리케이션, 서비스, 하드웨어에서 지표를 수집한다. Exporter는 해당 시스템의 지표를 Prometheus가 이해할 수 있는 형식으로 변환하여 HTTP End-point로 노출하는 역할을 한다.

Node Exporter를 활용한 서버 모니터링

    • Node Exporter는 서버의 운영체제 및 하드웨어 지표를 수집하는 가장 일반적인 Exporter이다. 각 모니터링 대상 서버에 Node Exporter를 설치하고 Prometheus가 해당 End-point를 스크랩하도록 설정하면 된다.

Dcgm Exporter를 활용한 서버 모니터링

    • Nvidia GPU가 탑재된 서버의 GPU 관련 지표를 수집하는 가장 일반적인 Exporter이다. Dcgm Exporter 역시 각 모니터링 대상 서버에 Dcgm Exporter를 설치하고 Prometheus가 해당 End-point를 스크랩하도록 설정하면 된다.

Nvidia GPU Exporter

    • Nvidia GPU Exporter는 NVIDIA GPU가 탑재된 서버의 GPU 관련 지표를 수집하는 가장 일반적인 Exporter 중 하나이다.
    • Dcgm Exporter와 유사하며, GPU 사용률, GPU 메모리 사용량, GPU 온도, 전력 소비량 등  NVIDIA GPU에 특화된 상세한 메트릭을 제공한다.


Grafana 시각화 및 대시보드

Grafana 아키텍처 및 주요 기능

    • Grafana는 다양한  데이터 소스로부터 데이터를 가져와 시각화하고 대시보드를 구축하는 데 특화된 오픈소스 도구이다. 사용자 친화적인 인터페이스를 자랑하며 유연한 확장성이 강점이다.

Data Source 연동

    • Grafana의 핵심 기능 중 하나는 다양한 데이터 소를 지원한다는 점이다. Prometheus뿐만 아니라 InfluxDB, Elasticsearch, MySQL, PostgreSQL, Graphite 등 수많은 데이터베이스 및 모니터링 시스템과 연동할 수 있다. Prometheus와의 연동은 PromQL 쿼리를 통해 데이터를 가져와 실시간으로 시각화할 수 있다.

Dashboard 및 Panel 구성

    • 대시보드는 하나 이상의 패널로 구성되며, 각 패널은 특정 유형의 데이터를 시각화한다. Grafana는 그래프, 테이블, 게이지, 스탯 등 다양한 유형의 패널을 제공하여 사용자가 원하는 방식으로 데이터를 표현할 수 있다. 또한 드래그 앤 드롭 인터페이스를 통해 쉽게 패널을 추가하고 크기를 조절하며 배치할 수 있다.

Grafana 설치 및  Prometheus 데이터 소스 연동

    • Grafana는 바이너리, Docker, Kubernetes 등 다양한 방식으로 설치할 수 있다. 설치 후 웹 인터페이스에 접속하여 관리자로 로그인한다.

Prometheus 데이터 소스 Grafana 추가 과정

      1. Grafana 왼쪽 메뉴에서 Connections → Data sources를 선택
      2. Add new data source 버튼을 클릭하고  Prometheus 선택
      3. Prometheus 서버의 URL(ex: http:// your ip or domain:your port)를 입력하고, 필요에 따라 인증 정보를 설정
      4. Save & test 버튼을 클릭하여 연결을 확인
      5. 성공 메세지가 표시되면 Prometheus Data source가 Grafana에 연동 완료