
개요
이전 글에서는 Prometheus & Grafana를 통해서 Spring 서버 어플리케이션의 메트릭을 수집하고 대시보드를 통해 조회할 수 있도록 시스템을 구성하였다. 이제 더 나아가 DB와 프록시 서버의 메트릭을 수집하고 모니터링 할 수 있도록 추가 구성해보자
Exporter란
Exporter에 대해서 간단하게 알아보자.
Exporter는 프로메테우스가 직접 메트릭을 수집할 수 없는 시스템의 메트릭을 수집하여 프로메테우스가 읽을 수 있는 형식으로 변환하고 노출해주는 에이전트이다.
각 시스템에서는 고유하게 메트릭을 내려주는데, 시스템에 맞는 Exporter가 메트릭을 조회하고 프로메테우스에 형식에 맞게 변환하여 엔드포인트로 제공해준다. 프로메테우스에서는 Exporter에서 제공하는 엔드포인트를 통해 알맞게 변환된 메트릭을 수집하도록 구성할 것이다.
Exporter는 DB, OS, 미들웨어 등 다양한 시스템에 대해 프로메테우스에서 오픈 소스로 제공하니, 메트릭 수집이 필요한 시스템에 맞게 찾아서 사용하면 될 것 같다.
DB 메트릭 수집
먼저 DB의 메트릭을 수집하기 위한 Exporter를 구성하려 한다. DB는 Mysql을 이용하기에 Mysqld Exporter를 통해 메트릭을 수집한다.
services:
mysqld_exporter:
image: prom/mysqld-exporter:latest
container_name: mysqld_exporter
ports:
- "9104:9104"
# DB 접근 정보
command:
- "--mysqld.address={url}:{port}"
- "--mysqld.username={username}:{password}"
restart: unless-stopped
environment:
- TZ=Asia/Seoul
mysqld_exporter_dev:
image: prom/mysqld-exporter:latest
container_name: mysqld_exporter_dev
ports:
- "9105:9104"
# DB 접근 정보
command:
- "--mysqld.address={url}:{port}"
- "--mysqld.username={username}:{password}"
restart: unless-stopped
environment:
- TZ=Asia/Seoul
docker compose를 통해 Mysqld Exporter 컨테이너를 띄워준다. 필자는 운영 DB와 개발 DB에 대한 메트릭을 수집하기 위해 2개의 Exporter를 실행시켰다.
옵션을 통해 메트릭을 수집할 DB에 접근 정보를 함께 작성해야 한다. 프로메테우스에서 접근할 수 있는 전용 계정을 하나 생성하는게 좋을 것이다. DB가 클라우드 환경이라면, 보안 그룹을 통해 Exporter가 DB에 접근할 수 있도록 IP와 Port를 확인하자.
global:
scrape_interval: 15s #스크래핑 주기
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
.
.
.
# Prod DB 메트릭 수집 job 추가
- job_name: "db-metrics"
metrics_path: '/metrics'
scrape_interval: 30s
static_configs:
- targets: ['mysqld_exporter:9104']
labels:
instance: "prod-db-1"
# Dev DB 메트릭 job 추가
- job_name: "db-metrics-dev"
metrics_path: '/metrics'
scrape_interval: 30s
static_configs:
- targets: ['mysqld_exporter_dev:9104']
labels:
instance: "dev-db-1"
위는 프로메테우스 설정 파일인 prometheus.yml의 일부분이다. Exporter들이 수집한 메트릭을 프로메테우스에서 수집할 수 있도록 job을 추가한다. Exporter는 각각의 컴포넌트의 메트릭을 /metrics url로 제공한다. 프로메테우스는 이 엔드포인트를 통해서 메트릭을 수집하는 것이다.
위까지 설정이 완료되었고 컨테이너들이 정상적으로 실행되었다면, 이제 수집한 메트릭을 대시보드로 시각화하여 조회해보자

그라파나에서 제공하는 대시보드 라이브러리를 이용하겠다. 대시보드 id인 7362를 입력하고 Load 버튼을 클릭한다.

그 후 DB 메트릭을 수집하는 prometheus를 클릭 후 import 해준다.
DB의 메트릭을 한 눈에 볼 수 있는 대시보드가 설정되었을 것이다. 처음 연결할 때는 프로메테우스가 메트릭을 수집하는데 시간이 조금 걸려서 그러는지 메트릭을 조회하는데 시간이 조금 걸린다.
Nginx 메트릭 수집
Nginx 메트릭 수집도 Exporter가 있다면 어렵지 않다.
server {
listen 80;
server_name {server_name};
# 프로메테우스 메트릭 수집 전용 url
location /metrics/nginx {
# Nginx 상태 체크 설정
stub_status on;
# Nginx 접근 설정
allow {Nginx Exporter 실행 server ip};
deny all;
}
.
.
}
우선 Nginx Exporter가 메트릭을 조회할 수 있는 전용 url을 설정해주어야 한다. Nginx 설정파일로 이동해서 위와 같이 설정해준다.
Nginx Exporter가 실행 중인 IP만 접근을 허용하여, 보안도 함께 챙겨주자.
services:
nginx_exporter:
image: nginx/nginx-prometheus-exporter:latest
container_name: nginx_exporter
ports:
- "9113:9113"
# nginx 메트릭 조회 url
command:
- "-nginx.scrape-uri=http://{nginx url}:{port}{nginx metrics path}"
restart: unless-stopped
docker compose를 통해서 Nginx Exporter 컨테이너를 실행한다. Exporter가 메트릭을 수집할 엔드포인트는 Nginx 설정 파일에 추가한 url이다.
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
alerting:
alertmanagers:
- static_configs:
- targets:
rule_files:
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
labels:
app: "prometheus"
.
.
# Nginx 메트릭 수집 job 추가
- job_name: "proxy-metrics"
scrape_interval: 30s
static_configs:
- targets: ['nginx_exporter:9113']
labels:
application: "prod"
instance: "nginx-proxy"
프로메테우스 설정 파일인 prometheus.yml 파일에 Nginx 메트릭 수집을 위한 job을 추가해주고, 하위에 Nginx Exporter에 대한 IP와 Port를 target에 작성한다.
필자는 라이브러리 id가 12708 대시보드를 이용하였다. 대시보드 적용 과정은 Mysql 대시보드를 적용하는 과정과 동일하다.
프록시 서버의 역할을 수행하고 있는 Nginx에 대해서 메트릭을 수집하고 그라파나 대시보드로 조회할 수 있게 되었다
결과

개발자는 서버와 더불어 Nginx 프록시 서버와 Mysql DB에 대한 메트릭을 수집하고, 그라파나로 직접 조회할 수 있게 되었다!
보완 사항
Prometheus & Grafana를 통해서 Spring 서버 어플리케이션 이외에도 다양한 컴포넌트에 대해서 메트릭을 수집하여 모니터링 할 수 있도록 시스템을 구축하였다.
여기까지 오니 의문이 들 것이다.
'장애를 대비해서 대시보드를 계속 모니터링 해야하는 것인가?'
다음 글에서는 컴포넌트들에 대해 장애 발생 시 개발자에게 알림이 오도록 시스템을 보완해보자!
'DevOps > Monitoring' 카테고리의 다른 글
| AlertManager를 통해 슬랙으로 시스템 장애 알림 받기 - 모니터링 시스템 구축기 (3) (0) | 2026.04.11 |
|---|---|
| Prometheus & Grafana를 통한 메트릭 모니터링 시스템 구축하기 - 모니터링 시스템 구축기 (1) (0) | 2026.03.20 |