배포

nodejs + express에서 prometheus, grafana 적용하기

wonin 2024. 5. 27. 14:59

1. 이유와 목적

Node.js로 개발된 서버의 모니터링이 필요했습니다. 언제 서버가 다운되는지, 언제 부하가 발생하는지를 파악하기 위해 여러 모니터링 도구를 검토했습니다. 많은 사람들이 Prometheus와 Grafana를 조합하여 모니터링 도구로 사용하고 있기에, 저도 이 스택을 사용해 모니터링 시스템을 구축해 보았습니다.

2. Prometheus란?

Prometheus는 오픈 소스로 제공되는 모니터링 및 경고 도구입니다. 주로 시스템과 서비스를 실시간으로 모니터링하는 데 사용되며, 이벤트 및 성능을 모니터링할 때 유용합니다. Prometheus의 핵심 기능은 시간에 따른 데이터 변화를 수집하고 저장하는 것입니다. 유연한 알람 설정과 다양한 데이터 소스로부터의 데이터 수집을 지원하여, 시스템의 상태를 효과적으로 파악하고 문제를 빠르게 진단할 수 있도록 돕습니다. 즉, 데이터 수집기 역할을 합니다.

3. Prometheus 적용하기

다운로드 링크
LTS(Long Term Support) 버전을 받는 것이 좋습니다. Mac 유저는 darwin 버전을 받으면 됩니다. 다운로드 후 폴더를 열면 다음과 같은 형태가 됩니다.

image

prometheus.yml 파일을 설정한 후 prometheus.exe 파일을 실행합니다.

🟦 prometheus.yml 파일 설정하기

global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets:

rule_files:

scrape_configs:
  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

  # 추가한 내용
  - job_name: "show-status"
    metrics_path: '/metrics'
    scrape_interval: 1s
    static_configs:
      - targets: ['localhost:8080']

기존 파일의 주석을 제거하고, job_name에 서버에서 API로 서버의 정보를 받아오게 설정합니다.

🟦 API 만들기

Node.js와 Express 환경에서 다음과 같이 만들었습니다.

import express from 'express';  
import { collectDefaultMetrics, register } from 'prom-client';  

collectDefaultMetrics();  

const app = express();  

app.get('/metrics', async (_req, res) => {  
  try {  
    res.set('Content-Type', register.contentType);  
    res.end(await register.metrics());  
  } catch (err) {  
    res.status(500).end(err);  
  }  
});  

app.listen(8080);

prom-client 라이브러리에서 자동으로 기본 metrics를 설정해줍니다. metrics_path에서 설정한 경로로 값을 변환하여 보여줍니다.

image

Prometheus에서는 . 대신 _ 포맷을 사용합니다. 이것이 prom-client에서 만들어 준 기본적인 metrics입니다. 이러한 데이터를 계속해서 저장하는 것이 Prometheus의 역할입니다.

🟦 Prometheus 작동 확인하기

yml 파일에서 localhost:9090에 수집 서버를 생성합니다. localhost:9090/configprometheus.yml 파일 정보를 확인할 수 있습니다. localhost:9090/targets로 연동이 잘 되었는지 확인합니다.

image

연동이 잘 되었으면 Grafana와 연동합니다.

4. Grafana란?

Grafana는 Prometheus에 있는 데이터를 불러와서 사용자가 보기 편하게 보여주는 대시보드 도구입니다. 대시보드는 다양한 커스터마이징이 가능하며, 다른 사용자가 만들어 놓은 대시보드를 활용할 수도 있습니다.

5. Grafana 적용하기

Grafana 다운로드 링크: Download Grafana | Grafana Labs

다운로드 받은 폴더의 bin 폴더에서 grafana-server.exe를 실행합니다. 그리고 localhost:3000에 접속합니다. (기존에 3000포트를 사용 중이라면 다른 포트로 변경해주세요)

image

위와 같은 화면이 나오면 Dashboards를 클릭합니다. 오른쪽 상단의 New를 클릭하고 Import를 선택합니다.

참고 대시보드: Grafana Dashboard
URL에 11159를 입력하고 Load를 누릅니다. Prometheus를 선택하고 Import를 눌러줍니다. 새로운 대시보드가 생성됩니다.

image

대시보드를 들어가면 서버의 메모리, CPU 사용량을 확인할 수 있습니다.

🟦 패널 정보 수정

image

하나의 그래프를 패널이라고 합니다. 패널의 정보를 수정하려면 오른쪽 위의 설정 버튼을 누르고 Edit을 클릭합니다.

image

Query 부분의 값을 수정하면 됩니다. Prometheus에서 가져오는 값을 수정하여 원하는 데이터를 표시할 수 있습니다. Prometheus에서 넘어오는 값들은 localhost:8080/metrics에서 확인할 수 있습니다.

🟩 정리

서버의 정보를 지속적으로 가져오는 것은 Prometheus의 역할입니다. 이 정보를 Prometheus에 전달하기 위해 prom-client가 필요합니다. 수집된 정보를 보기 쉽게 시각화하기 위해 Grafana를 사용합니다.

참고 자료

728x90