초코비니

Docker Compose로 PostgreSQL + Prometheus + Grafana 설정하기 본문

IT 기타

Docker Compose로 PostgreSQL + Prometheus + Grafana 설정하기

초코비니 2025. 1. 1. 23:11
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

안녕하세요! 오늘은 PostgreSQL 환경을 Docker Compose로 구축하는 방법을 소개합니다. 이번 설정은 단순한 PostgreSQL 설치뿐만 아니라,  모니터링을 위한 PrometheusGrafana를 함께 설정하는 방법까지 포함합니다.

 

1. 설정 개요

이번 설정의 주요 구성 요소는 다음과 같습니다:

  1. PostgreSQL: 데이터베이스 서버.
  2. Prometheus: 모니터링 데이터 수집 도구.
  3. Grafana: 모니터링 대시보드.
  4. pg_stat_statements: PostgreSQL 쿼리 성능 분석 도구.

모든 서비스를 Docker Compose를 통해 한 번에 실행하고 관리할 수 있도록 구성합니다.


2. Docker Compose 파일

아래는 모든 구성을 포함한 docker-compose.yml 파일입니다. 원하는 설정으로 수정하여 사용하면 됩니다.

version: '3.8'

services:
  postgres:
    image: bitnami/postgresql:latest
    container_name: postgres-container
    ports:
      - "26261:5432" # 외부 포트 26261 -> PostgreSQL 기본 포트 5432
    environment:
      - POSTGRESQL_USERNAME=your_username # PostgreSQL 사용자 이름
      - POSTGRESQL_PASSWORD=your_password # PostgreSQL 비밀번호
      - POSTGRESQL_DATABASE=your_database # 기본 데이터베이스 이름
    volumes:
      - postgres_data:/bitnami/postgresql
    restart: unless-stopped

  pgadmin:
    image: dpage/pgadmin4:latest
    container_name: pgadmin-container
    ports:
      - "5050:80" # PGAdmin4 웹 인터페이스
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@example.com # PGAdmin 이메일
      - PGADMIN_DEFAULT_PASSWORD=admin_password # PGAdmin 비밀번호
    restart: unless-stopped

  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus-container
    ports:
      - "9090:9090" # Prometheus 웹 인터페이스
    volumes:
      - prometheus_data:/prometheus
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
    restart: unless-stopped

  grafana:
    image: grafana/grafana:latest
    container_name: grafana-container
    ports:
      - "3000:3000" # Grafana 웹 인터페이스
    volumes:
      - grafana_data:/var/lib/grafana
    depends_on:
      - prometheus
    restart: unless-stopped

volumes:
  postgres_data:
    driver: local
  prometheus_data:
    driver: local
  grafana_data:
    driver: local

3. 주요 서비스 설명

1) PostgreSQL

  • PostgreSQL 데이터베이스 서버를 제공합니다.
  • 외부 포트 26261을 통해 접근 가능합니다.

2) Prometheus

  • PostgreSQL 성능 및 상태를 모니터링하기 위한 데이터 수집 도구.
  • 웹 UI는 http://localhost:9090에서 사용할 수 있습니다.

3) Grafana

  • Prometheus와 연결해 PostgreSQL 데이터를 시각화하는 대시보드.
  • 웹 UI는 http://localhost:3000에서 사용할 수 있습니다.

4) pg_stat_statements

  • PostgreSQL 쿼리 성능 분석 도구.
  • PostgreSQL의 shared_preload_libraries 설정에서 활성화 필요.

4. pg_stat_statements 활성화

  1. PostgreSQL 설정 파일 수정:
    • postgresql.conf에 다음 설정 추가: 
    •  shared_preload_libraries = 'pg_stat_statements'
    • Docker 컨테이너 내부에서 수정:

              docker exec -it postgres-container bash nano /opt/bitnami/postgresql/conf/postgresql.conf

2. 컨테이너 재시작:
          docker restart postgres-container

  3. 확장 활성화: PostgreSQL에 접속한 뒤 다음 명령 실행:

 
    CREATE EXTENSION pg_stat_statements;

5. 실행 방법

  1. docker-compose.yml 파일을 저장합니다.
  2. Docker Compose를 실행:
     
    docker-compose up -d
  3. 각 서비스에 접속:
    • pgAdmin4: http://localhost:5050
    • Prometheus: http://localhost:9090
    • Grafana: http://localhost:3000

6. 결론

이 설정을 통해 PostgreSQL 데이터베이스 환경을 효율적으로 관리하고, 성능을 모니터링하며, 작업을 자동화할 수 있습니다. 필요에 따라 추가적으로 기능을 확장하거나 수정하여 사용하면 됩니다.

Comments