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를 사용합니다.
참고 자료
'배포' 카테고리의 다른 글
Nestjs를 EC2에 배포하기, SSL 적용시키기 (0) | 2023.05.24 |
---|