백엔드 서비스 모니터링: Prometheus와 Grafana를 활용한 실시간 추적

Prometheus와 Grafana

백엔드 서비스 모니터링: 개요

백엔드 서비스 모니터링은 서비스가 원활하게 작동하는지를 확인하고, 문제가 발생하면 빠르게 대응할 수 있는 중요한 작업입니다. 서비스 모니터링을 통해 일어나는 문제점을 미리 파악하고 예방하는 것은 시스템 안정성 확보에 큰 도움을 줍니다. 이번 글에서는 Prometheus와 Grafana를 사용하여 백엔드 서비스 모니터링을 어떻게 구현할 수 있는지에 대해 알아보겠습니다.

Prometheus와 Grafana 소개

Prometheus는 CNCF(Cloud Native Computing Foundation)에서 개발한 오픈소스 모니터링 시스템입니다. Prometheus는 다양한 데이터 소스에서 지표(metric) 데이터를 수집하여 저장하고, 이를 쿼리하고 시각화할 수 있는 기능을 제공합니다. Prometheus는 클라우드 네이티브 환경에서 구축된 서비스들과 함께 사용하기 적합한 시스템입니다.

Grafana는 데이터 시각화 및 대시보드 제작 도구입니다. Grafana를 사용하면 시계열 데이터를 쉽게 시각화할 수 있습니다. Grafana는 다양한 데이터 소스를 지원하며, Prometheus도 그 중 하나입니다.

실시간 추적 기능 구현 방법

Prometheus 설치 및 설정

먼저 Prometheus를 설치해야 합니다. Prometheus는 여러 가지 방법으로 설치할 수 있지만, 이번 글에서는 Docker를 사용하여 설치하도록 하겠습니다.

$ docker run -d --name prometheus -p 9090:9090 prom/prometheus

Docker를 사용하여 Prometheus를 설치하면, http://localhost:9090으로 접속하여 Prometheus UI를 확인할 수 있습니다.

Prometheus UI

다음으로는 Prometheus에서 수집할 지표(metric)을 설정해야 합니다. 이를 위해서는 prometheus.yml 파일을 작성해야 합니다. 예시 prometheus.yml 파일은 다음과 같습니다.

global:
  scrape_interval: 10s
  scrape_timeout: 5s
  evaluation_interval: 10s
scrape_configs:
  - job_name: 'backend-service'
    metrics_path: '/metrics'
    static_configs:
      - targets: ['localhost:8000']

위 예시에서 scrape_interval은 스크래핑 주기를 정의하며, evaluation_interval은 Prometheus가 지표를 평가하는 주기를 정의합니다. job_name은 스크래핑할 대상을 구분하는 이름을 정의하며, metrics_path는 스크래핑할 대상의 지표 엔드포인트를 정의합니다. static_configs는 스크래핑 대상의 주소와 포트 번호를 정의합니다. 이 예시에서는 localhost:8000에서 지표를 수집합니다.

지표 수집하기

지표(metric)를 수집하기 위해서는 백엔드 서비스에 Prometheus 클라이언트를 설치하여 지표를 노출해야 합니다. Python에서는 prometheus_client 패키지를 사용하여 클라이언트를 구현할 수 있습니다.

from prometheus_client import Counter, Gauge, Histogram, start_http_server

# Counter
requests_total = Counter('requests_total', 'Total HTTP requests')

# Gauge
cpu_usage = Gauge('cpu_usage', 'Current CPU usage')

# Histogram
response_time = Histogram(
  'response_time',
  'HTTP request response time',
  buckets=[0.1, 0.2, 0.5, 1, 2, 5, 10]
)

start_http_server(8000)

while True:
  # do something
  requests_total.inc()
  cpu_usage.set(0.5)
  response_time.observe(0.4)

위 예시에서 Counter는 카운터 지표를 생성하며, Gauge는 현재 값을 저장하는 지표를 생성합니다. Histogram은 지정한 버킷(bucket)에 따라 지표를 분류합니다. start_http_server는 클라이언트를 HTTP 서버로 실행하여 Prometheus가 수집할 수 있는 형태로 지표를 노출합니다.

Grafana 대시보드 생성하기

Grafana를 사용하여 대시보드를 생성할 수 있습니다. 대시보드를 생성하기 위해서는 먼저 Grafana에 Prometheus 데이터 소스를 등록해야 합니다. 이후에는 대시보드에서 원하는 지표를 선택하여 시각화할 수 있습니다.

Grafana Dashboard

결과 분석을 위한 대시보드 제작

대시보드를 제작할 때는 어떤 지표를 수집할지, 어떤 형태로 시각화할지에 대해 고민해야 합니다. 대시보드는 서비스의 상태를 한 눈에 파악할 수 있도록 해주는 도구입니다.

예를 들어, 다음과 같은 지표를 수집하고 대시보드로 시각화할 수 있습니다.

  • CPU 사용률
  • 메모리 사용률
  • HTTP 요청 수
  • HTTP 응답 시간
  • 오류 발생 수

이러한 지표를 수집하여 대시보드로 시각화하면, 서비스의 상태를 빠르게 확인할 수 있습니다. 또한, 이러한 지표를 이용하여 예측 분석을 수행할 수도 있습니다. 예를 들어, CPU 사용률이 일정 수준을 넘어가면 서비스가 불안정해질 가능성이 높다는 것을 파악하여 대응할 수 있습니다.

결론

이번 글에서는 Prometheus와 Grafana를 사용하여 백엔드 서비스 모니터링을 구현하는 방법에 대해 알아보았습니다. Prometheus는 다양한 데이터 소스에서 지표(metric) 데이터를 수집할 수 있는 강력한 모니터링 시스템이며, Grafana는 이러한 지표를 시각화하여 대시보드로 제공할 수 있습니다. 서비스 모니터링은 서비스의 안정성 확보에 중요한 역할을 하므로, 이번 글에서 소개한 기술을 적극적으로 활용하여 서비스를 안정적으로 운영하길 바랍니다.

+ Recent posts