2.2 Docker Compose Lab
실습 파일은 사이트에 함께 포함되어 있습니다. 아래 명령으로 내려받아 실행할 수 있습니다.
mkdir observability-lab
cd observability-lab
curl -O https://dbalog.dev/examples/observability-lab/compose.yml
curl -O https://dbalog.dev/examples/observability-lab/init-monitor.sql
mkdir -p prometheus grafana/provisioning/datasources
curl -o prometheus/prometheus.yml \
https://dbalog.dev/examples/observability-lab/prometheus/prometheus.yml
curl -o prometheus/postgres.rules.yml \
https://dbalog.dev/examples/observability-lab/prometheus/postgres.rules.yml
curl -o grafana/provisioning/datasources/prometheus.yml \
https://dbalog.dev/examples/observability-lab/grafana/provisioning/datasources/prometheus.yml
docker compose up -d
로컬 저장소에서는 site/static/examples/observability-lab의 파일을 그대로 사용할 수 있습니다.
서비스 확인
docker compose ps
curl -fsS http://localhost:9187/metrics | grep '^pg_up'
curl -fsS http://localhost:9090/-/ready
접속 주소는 다음과 같습니다.
| 서비스 | 주소 | 계정 |
|---|---|---|
| PostgreSQL | localhost:5432/app | postgres / postgres-lab |
| Exporter metrics | http://localhost:9187/metrics | 없음 |
| Prometheus | http://localhost:9090 | 없음 |
| Grafana | http://localhost:3000 | admin / admin-lab |
경고
이 계정과 password는 로컬 실습 전용입니다. 운영에서는 image tag를 고정하고, password file이나 secret manager를 사용하며, Prometheus/Grafana에도 인증과 TLS를 적용합니다.
최소 권한 계정
초기화 SQL은 exporter 전용 login role을 만들고 pg_monitor를 부여합니다.
CREATE USER postgres_exporter WITH PASSWORD 'exporter-lab';
GRANT CONNECT ON DATABASE app TO postgres_exporter;
GRANT pg_monitor TO postgres_exporter;
Exporter를 superuser로 연결하지 않습니다. pg_monitor는 통계 view와 monitoring 함수에 필요한 권한을 묶은 built-in role입니다. 업무 table의 모든 데이터를 읽을 권한과는 다릅니다.
실습 부하 만들기
transaction counter와 pg_stat_statements에 관측 가능한 변화를 만듭니다.
for i in $(seq 1 200); do
docker compose exec -T postgres \
psql -U postgres -d app -c \
"SELECT count(*) FROM orders WHERE customer_id BETWEEN 10 AND 500;" >/dev/null
done
긴 transaction도 하나 만들어 봅니다.
docker compose exec postgres psql -U postgres -d app
BEGIN;
UPDATE orders SET status = 'processing' WHERE id = 1;
SELECT pg_sleep(120);
ROLLBACK;
다른 terminal에서 exporter output과 Prometheus query를 확인합니다.
종료와 초기화
docker compose down
데이터까지 지우고 처음부터 다시 시작할 때만 volume을 제거합니다.
docker compose down -v
-v는 PostgreSQL, Prometheus, Grafana의 실습 데이터를 모두 제거합니다.