[인프라] PostgreSQL, Grafana, Prometheus 연동하기

참고


개요

  • PostgreSQL, Grafana, Prometheus 연동하여 이미 만들어져 있는 PostgreSQL 템플릿을 다운받아서 실시간 데이터 Dash Board 조회 되도록 PoC 진행합니다.

Docker-Compose 작성

  • 관리해야 하는 컨테이너들이 많기 때문에 docker-compose.yml 파일을 작성하였습니다.
version: '3.4'

services:
  postgres:
    image: postgres
    container_name: postgres
    restart: always
    environment:
      - POSTGRES_USER=test
      - POSTGRES_PASSWORD=system
      - POSTGRES_DB=abc 
      - TZ=Asia/Seoul
    ports:
      - '5432:5432'
    volumes:
      - D:/postgresql/data/:/docker-entrypoint-initdb.d/
      - D:/postgresql/data/:/var/lib/postgresql/data
      - D:/postgresql/logs/:/var/lib/postgresql/logs
      #- /etc/localtime:/etc/localtime

  pgadmin:
    container_name: pgadmin
    image: dpage/pgadmin4
    restart: always
    ports:
      - 8088:80
    environment:
      - PGADMIN_DEFAULT_EMAIL=mirero@mail.com
      - PGADMIN_DEFAULT_PASSWORD=system
    volumes:
      - D:/postgresql/pgAdmin/:/var/lib/pgadmin

  prometheus:
    image: prom/prometheus
    container_name: prometheus
    ports:
      -  9090:9090
    volumes:
      - D:/postgresql/prometheus/data/:/prometheus
      - D:/postgresql/prometheus/:/etc/prometheus/
    command: # web.enalbe-lifecycle은 api 재시작없이 설정파일들을 reload 할 수 있게 해줌
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/usr/share/prometheus/console_libraries'
      - '--web.console.templates=/usr/share/prometheus/consoles'
    restart: always

  grafana:
    container_name: grafana
    image: grafana/grafana
    restart: always
    ports:
      - 3000:3000

  pgexporter:
    container_name: pgexporter
    image: prometheuscommunity/postgres-exporter
    ports:
      - 9187:9187
    environment:
      - DATA_SOURCE_NAME=postgresql://mirero:system@172.30.0.3:5432/adc?sslmode=disable

참고로, pxexpoter 컨테이너에서 DATA_SOURCE_NAME=postgresql://어드민계정:어드민비밀번호@호스트IP:Port/접속DB?sslmode-disable 을 의미합니다.


prometheus.yml 파일 작성하기

  • 도커 컴포즈 파일 안에는 현재 Prometheus 컨테이너도 정의되어 있습니다.
  • 프로메테우스 컨테이너를 실행하기 전에, 선행적으로 prometheus.yml 파일이 생성 및 작성되어 있어야 합니다.
  • 경로는 볼륨 마운트 진행한 경로에 맞춰 생성 후, 아래와 같이 내용을 작성해 주면 됩니다.
  • 아래 내용중에, Job Name 이 pgexporter 라는 녀석이 있습니다.
  • 해당 Job 의 역할은 PostgreSQL 의 정보를 Export 하여 프로메테우스에게 전달? 해주는 역할을 하는 컨테이너 입니다.
  • pgexporter 역시 Docker Compose 파일에 정의되어 있습니다.
global:
  scrape_interval:     10s 
  evaluation_interval: 10s 
  scrape_timeout:       5s

#
# Load rules once and periodically evaluate them according to the global
# 'evaluation_interval'.
#
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

scrape_configs:
  # Scrape Prometheus itself.
  - job_name: 'prometheus'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
    - targets: ['192.168.100.167:9090']

  - job_name: 'pgexporter'

    static_configs:
    - targets: ['192.168.100.167:9187']

Docker-Compose Up

  • 앞서 docker-compose.yml 파일을 작성 하였다면, 이제 컴포즈 Up 을 해서 각각의 컨테이너들을 실행시켜 줍니다.
  • 문제 없이 실행 되면, 다음과 같이 Docker Desktop 에서 컨테이서 실행을 확인할 수 있습니다.


프로메테우스 연결 확인

  • 프로메테우스 연결 확인하는 방법은 웹 브라우저에서 localhost:9090 입력하여 다음과 같은 화면이 나오면 정상 실행 된 것입니다.


프로메테우스 Job 확인

  • 앞서, pgexporter 라고 해서 PostgreSQL 의 Exporter 를 컨테이너로 실행하였고, prometheus.yml 파일에 Job 을 등록 시켰습니다.
  • 실제로 프로메테우스에 Job 이 정상적으로 등록되었는지 확인하기 위해서는 localhost:9090/targets 입력하게 되면 다음과 같이 Job 화면을 볼 수 있습니다.
  • 현재 pgexporter, prometheus 2개의 Job 이 정상적으로 모두 실행되고 있는 것을 확인할 수 있습니다.
  • 만얀, pgexporter Job 이 정상 실행 되지 않으면 PostgreSQL DashBoard Template 과 연동하지 못합니다.


PostgreSQL Exporter 동작 확인

...생략

pg_up 1
# HELP postgres_exporter_build_info A metric with a constant '1' value labeled by version, revision, branch, and goversion from which postgres_exporter was built.
# TYPE postgres_exporter_build_info gauge
postgres_exporter_build_info{branch="HEAD",goversion="go1.17.6",revision="6cff384d7433bcb1104efe3b496cd27c0658eb09",version="0.10.1"} 1
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 8.24
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 1.048576e+06
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 12
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 2.5567232e+07
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1.65727692803e+09
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 7.31615232e+08
# HELP process_virtual_memory_max_bytes Maximum amount of virtual memory available in bytes.
# TYPE process_virtual_memory_max_bytes gauge
process_virtual_memory_max_bytes 1.8446744073709552e+19
# HELP promhttp_metric_handler_requests_in_flight Current number of scrapes being served.
# TYPE promhttp_metric_handler_requests_in_flight gauge
promhttp_metric_handler_requests_in_flight 1
# HELP promhttp_metric_handler_requests_total Total number of scrapes by HTTP status code.
# TYPE promhttp_metric_handler_requests_total counter
promhttp_metric_handler_requests_total{code="200"} 298
promhttp_metric_handler_requests_total{code="500"} 0
promhttp_metric_handler_requests_total{code="503"} 0

...생략

PostgreSQL 템플릿 다운로드

  • https://grafana.com/grafana/dashboards/9628 해당 URL 에서 PostgreSQL Database 템플릿을 다운로드 받았습니다.
  • 다운로드 받은 파일은 JSON 파일로 받았고, 추후에 그라파나에서는 DashBoard Import 를 통하여 JSOM 파일을 Import 할 예정입니다.


그라파나 접속 후, 프로메테우스 Data Source 등록하기

  • 웹 브라우저에서 localhost:3000 을 입력하게 되면 그라파나 화면에 접속할 수 있습니다.
  • 여기서 Data Source 메뉴에 가서 프로메테우스 Data Source 를 등록합니다.


그라파나 PostgreSQL 템플릿 적용

  • 앞서, Data Source 로 프로메테우스를 등록 하였다면 이제 다운로드 받은 PostgreSQL Dashboard Json 파일을 Import 합니다.
  • Import 하는 방법은 다음과 같습니다.


Template 동작 확인

  • 이제 PostgreSQL Dash Board 템플릿을 실행시키기 위한 모든 선행 준비는 마쳤습니다.
  • 실제로 DashBoard 의 데이터가 정상적으로 모니터링 되는지 확인 진행합니다.
  • 확인 결과, PostgreSQL DashBoard 정상 동작 되는 것을 확인할 수 있습니다.


정리

  • PostgreSQL 과 프로메테우스 연동에서 제일 중요한 부분은 ProstgreSQL Exporter Job 등록이기 때문에 Job 등록을 반드시 진행하고 나서 그라파나에서 Template 적용을 해야 합니다.
  • 그렇지 않으면, 그라파나에서 PostgreSQL 모니터링 진행할 수 없습니다.
728x90

이 글을 공유하기

댓글

Designed by JB FACTORY