본문으로 건너뛰기

10.7 외부 모니터링 도구

PostgreSQL의 통계 뷰(10.4)는 SQL 인터페이스지만, 운영에서는 시계열·알람·대시보드가 필요합니다. 외부 모니터링 도구가 이 빈자리를 채웁니다.

표준 스택 — Prometheus + postgres_exporter + Grafana​

postgres_exporter 설치​

# RHEL/Rocky 또는 PGDG
sudo dnf install -y postgres_exporter
# 또는 GitHub release에서 바이너리 받음

systemd 유닛 (/etc/systemd/system/postgres_exporter.service):

[Service]
User=postgres
Environment=DATA_SOURCE_NAME=postgresql:///?host=/var/run/postgresql&sslmode=disable
ExecStart=/usr/local/bin/postgres_exporter --web.listen-address=:9187
Restart=always
sudo systemctl enable --now postgres_exporter
curl http://localhost:9187/metrics | head

PostgreSQL 측 권한​

CREATE ROLE monitoring LOGIN PASSWORD 'secret';
GRANT pg_monitor TO monitoring; -- PG 10+의 통합 권한 (9.1)

pg_monitor 역할로 모든 통계 뷰·일부 슈퍼유저 함수 접근 가능합니다. 별도로 LOGIN만 부여하면 됩니다.

Prometheus scrape​

prometheus.yml:

scrape_configs:
- job_name: 'postgres'
static_configs:
- targets: ['db1.example.com:9187', 'db2.example.com:9187']
scrape_interval: 30s

Grafana 대시보드​

grafana.com/dashboards에 PostgreSQL 대시보드가 다수 — 가장 인기 있는 것:

  • 9628 PostgreSQL Database (Postgres Exporter)
  • 455 PostgreSQL Database
  • 12273 PostgreSQL Overview

대시보드를 import한 뒤 datasource를 Prometheus로 지정하면 거의 즉시 쓸 수 있습니다.

주요 메트릭​

postgres_exporter가 노출하는 핵심:

메트릭출처
pg_up연결 가능 여부
pg_database_size_bytesDB 크기
pg_stat_database_blks_hit / blks_read캐시 hit ratio
pg_stat_database_xact_commit / rollback트랜잭션
pg_stat_database_deadlocks데드락 수
pg_stat_activity_count{state=...}상태별 백엔드 수
pg_replication_lag_seconds복제 지연 (초)
pg_stat_bgwriter_*체크포인터·bgwriter
pg_stat_user_tables_*테이블별 row 카운터
pg_stat_statements_*(커스텀 쿼리 필요)
pg_settings_*현재 설정값

커스텀 쿼리​

기본 exporter가 안 모으는 지표는 queries.yaml에 SQL 정의합니다.

pg_replication_slots:
query: |
SELECT slot_name, slot_type, active::int,
pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn) AS lag_bytes
FROM pg_replication_slots;
metrics:
- slot_name: { usage: LABEL }
- slot_type: { usage: LABEL }
- active: { usage: GAUGE, description: "Slot active 여부" }
- lag_bytes: { usage: GAUGE, description: "WAL 지연 바이트" }

postgres_exporter --extend.query-path=/etc/postgres_exporter/queries.yaml로 로딩.

알람 — Alertmanager / Grafana​

기본 알람 룰 (Prometheus 룰 파일):

groups:
- name: postgres
rules:
- alert: PostgresDown
expr: pg_up == 0
for: 1m
annotations:
summary: "PostgreSQL down"

- alert: ReplicationLagHigh
expr: pg_replication_lag_seconds > 30 # 초 단위 (바이트 lag는 커스텀 쿼리 메트릭 사용)
for: 5m

- alert: LongRunningTransaction
expr: pg_stat_activity_max_tx_duration{state="active"} > 300
for: 1m

8.4의 점검 임계와 맞추면 운영 표준이 만들어집니다.

대안 — pgwatch​

Cybertec이 만든 통합 모니터링 도구 pgwatch(v3, 구 pgwatch2)입니다. pgwatch2는 지원이 끝났고 v3가 후속입니다. exporter·DB·UI를 한 묶음으로 제공합니다.

# 데모 이미지 (Grafana 3000, 웹 UI 8080)
docker run -d --name pgwatch \
-p 3000:3000 -p 8080:8080 \
cybertecpostgresql/pgwatch-demo:latest

장점은 설치가 빠르고 대시보드가 풍부하다는 것이고, 단점은 Prometheus 표준 스택과 따로 논다는 것입니다.

대안 — Datadog​

# datadog agent의 postgres integration
cat << EOF > /etc/datadog-agent/conf.d/postgres.d/conf.yaml
init_config:
instances:
- host: localhost
port: 5432
username: datadog
password: secret
dbm: true # Database Monitoring 활성
EOF

상용 도구지만 쿼리 분석·트레이스 통합이 강력. 마이크로서비스 환경에서 흔히 채택.

대안 — pganalyze / Datadog DBM / Crunchy Bridge / pgEdge​

SaaS 또는 매니지드 형태. pg_stat_statements·auto_explain 로그를 자동 수집·시각화. 비용 들지만 설치·운영 부담 적습니다.

도구라이선스강점
pganalyze상용 SaaS쿼리 분석·인덱스 권장
Datadog DBM상용 SaaSAPM 통합
AWS CloudWatchRDS 통합매니지드 환경 표준
Azure Database InsightsAzure 통합같음

매니지드 클라우드의 자체 도구​

클라우드모니터링
AWS RDSPerformance Insights + CloudWatch
Azure Database for PostgreSQLQuery Performance Insight + Azure Monitor
GCP Cloud SQLQuery Insights + Cloud Monitoring
NCP Cloud DB for PostgreSQLNCP 모니터링 통합

매니지드는 보통 자체 도구로 충분 — postgres_exporter 추가 설치가 불필요한 경우 많습니다.

운영 권장 아키텍처​

환경권장
셀프 호스팅 1~10대postgres_exporter + Prometheus + Grafana
셀프 호스팅 수십~수백 대+ pganalyze 또는 Datadog DBM 검토
매니지드클라우드 자체 도구
컴플라이언스 강한 환경자체 호스팅 + 외부 노출 차단

운영 안티패턴​

안티패턴위험
모니터링 사용자가 슈퍼유저보안 — pg_monitor 사용
pg_stat_statements_reset()을 외부 도구가 호출다른 도구의 추세 분석 깨짐
scrape_interval = 5초비용·부하 — 30~60초 권장
알람 없이 대시보드만새벽 사고 못 잡음
알람 임계가 너무 빡빡알람 피로 → 진짜 알람 무시
노트

대시보드와 알람은 함께 둡니다. 대시보드만 두면 누군가 보고 있을 때만 문제를 발견합니다. 핵심 지표는 알람 룰까지 만들어 자동으로 통보합니다.

정리​

표준 스택은 postgres_exporter + Prometheus + Grafana + Alertmanager입니다. 모니터링 사용자는 슈퍼유저 대신 pg_monitor 역할이면 충분하고, 기본 메트릭이 부족한 부분은 커스텀 쿼리로 보강합니다. 셀프 호스팅이 커지면 pgwatch·Datadog DBM·pganalyze 같은 통합 도구를 검토하고, 매니지드 환경에서는 클라우드 자체 도구가 보통 답입니다.

  • scrape_interval은 30~60초 권장
  • 알람 임계는 8.4의 점검 기준과 맞추기