nodejs + express에서 prometheus, grafana 적용하기
1. 이유와 목적
Node.js로 개발된 서버의 모니터링이 필요했습니다. 언제 서버가 다운되는지, 언제 부하가 발생하는지를 파악하기 위해 여러 모니터링 도구를 검토했습니다. 많은 사람들이 Prometheus와 Grafana를 조합하여 모니터링 도구로 사용하고 있기에, 저도 이 스택을 사용해 모니터링 시스템을 구축해 보았습니다.
2. Prometheus란?
Prometheus는 오픈 소스로 제공되는 모니터링 및 경고 도구입니다. 주로 시스템과 서비스를 실시간으로 모니터링하는 데 사용되며, 이벤트 및 성능을 모니터링할 때 유용합니다. Prometheus의 핵심 기능은 시간에 따른 데이터 변화를 수집하고 저장하는 것입니다. 유연한 알람 설정과 다양한 데이터 소스로부터의 데이터 수집을 지원하여, 시스템의 상태를 효과적으로 파악하고 문제를 빠르게 진단할 수 있도록 돕습니다. 즉, 데이터 수집기 역할을 합니다.
3. Prometheus 적용하기
다운로드 링크
LTS(Long Term Support) 버전을 받는 것이 좋습니다. Mac 유저는 darwin 버전을 받으면 됩니다. 다운로드 후 폴더를 열면 다음과 같은 형태가 됩니다.
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
에서 설정한 경로로 값을 변환하여 보여줍니다.
Prometheus에서는 .
대신 _
포맷을 사용합니다. 이것이 prom-client
에서 만들어 준 기본적인 metrics입니다. 이러한 데이터를 계속해서 저장하는 것이 Prometheus의 역할입니다.
🟦 Prometheus
작동 확인하기
yml 파일에서 localhost:9090에 수집 서버를 생성합니다. localhost:9090/config
에 prometheus.yml
파일 정보를 확인할 수 있습니다. localhost:9090/targets
로 연동이 잘 되었는지 확인합니다.
연동이 잘 되었으면 Grafana
와 연동합니다.
4. Grafana란?
Grafana는 Prometheus에 있는 데이터를 불러와서 사용자가 보기 편하게 보여주는 대시보드 도구입니다. 대시보드는 다양한 커스터마이징이 가능하며, 다른 사용자가 만들어 놓은 대시보드를 활용할 수도 있습니다.
5. Grafana 적용하기
Grafana 다운로드 링크: Download Grafana | Grafana Labs
다운로드 받은 폴더의 bin
폴더에서 grafana-server.exe
를 실행합니다. 그리고 localhost:3000
에 접속합니다. (기존에 3000포트를 사용 중이라면 다른 포트로 변경해주세요)
위와 같은 화면이 나오면 Dashboards
를 클릭합니다. 오른쪽 상단의 New
를 클릭하고 Import
를 선택합니다.
참고 대시보드: Grafana Dashboard
URL에 11159
를 입력하고 Load
를 누릅니다. Prometheus를 선택하고 Import
를 눌러줍니다. 새로운 대시보드가 생성됩니다.
대시보드를 들어가면 서버의 메모리, CPU 사용량을 확인할 수 있습니다.
🟦 패널 정보 수정
하나의 그래프를 패널이라고 합니다. 패널의 정보를 수정하려면 오른쪽 위의 설정 버튼을 누르고 Edit
을 클릭합니다.
Query 부분의 값을 수정하면 됩니다. Prometheus에서 가져오는 값을 수정하여 원하는 데이터를 표시할 수 있습니다. Prometheus에서 넘어오는 값들은 localhost:8080/metrics
에서 확인할 수 있습니다.
🟩 정리
서버의 정보를 지속적으로 가져오는 것은 Prometheus의 역할입니다. 이 정보를 Prometheus에 전달하기 위해 prom-client
가 필요합니다. 수집된 정보를 보기 쉽게 시각화하기 위해 Grafana를 사용합니다.