[인프라] PostgreSQL, Grafana, Prometheus 연동하기
- 인프라/그라파나 & 프로메테우스
- 2022. 7. 15. 20:14
참고
- https://github.com/prometheus-community/postgres_exporter
- https://simpledb.tistory.com/84
- https://www.postgresql.kr/blog/prometheus_for_postgres.html
개요
- 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 동작 확인
- pgexporter 역시 웹을 통해서 metric 을 실시간으로 확인할 수 있습니다.
- 웹 브라우저에서 http://localhost:9187혹은 http://localhost:9187/metrics 입력하면 실시간으로 메트릭 값을 볼 수 있습니다.
...생략
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
'인프라 > 그라파나 & 프로메테우스' 카테고리의 다른 글
[인프라] 프로메테우스 메트릭 종류 (0) | 2022.07.22 |
---|---|
[인프라] PostgreSQL, Grafana 연동하여 Tuple 통계 DashBoard 만들기 (0) | 2022.07.17 |
[인프라] Grafana, Prometheus 시스템 매트릭 모니터링 (0) | 2022.07.16 |
[인프라] 프로메테우스란? (0) | 2022.07.16 |
[인프라] PostgreSQL, Grafana 연동 (0) | 2022.07.15 |
이 글을 공유하기