티스토리 뷰

반응형

※ 다음 실습은 AWS의 CentOS7 환경에서 실행된 내용입니다.


pgwatch2를 활용한 Grafana의 PostgreSQL 모니터링 시스템

nifa-was 서버에서 pgwatch2 컨테이너를 실행시켜 보겠습니다. 

pgwatch2는 PostgreSQL, InfluxDB, Grafana의 연동을 통해 PostgreSQL에 대한 모니터링을 가능하게 하는 모니터링 도구입니다.

여기에서 InfluxDB는 1.4.2 버전을 사용합니다.


[참고 사이트]

https://www.cybertec-postgresql.com/en/a-more-detailed-look-at-pgwatch2-postgresql-monitoring-tool/

https://github.com/cybertec-postgresql/pgwatch2

 pgwatch2 란?

  • 유연한 자체 포함(self-contained) PostgreSQL 메트릭 모니터링/대시보드 솔루션
  • PostgreSQL을 위한 가장 쉬운 설치 모니터링 도구
  • Docker 패키지로 구성되어 있어 설치가 간단함


기본 구조

PostgreSQL에 대한 모니터링을 위해서는 시계열 데이터베이스인 InfluxDB를 거쳐, Grafana에 InfluxDB의 내용을 출력하는 구조로 실행됩니다.


          PostgreSQL → InfluxDB → Grafana


기본 환경설정

pgwatch2는 기본적으로 Docker로 실행되기 때문에 서버에 Docker를 설치합니다.


Docker 설치

# Docker 설치
sudo yum -y install docker
docker version

# Docker 실행
sudo service docker start


Docker 기본 경로 변경

Docker는 기본적으로 /var/lib/docker/ 경로에 이미지나 컨테이너 등을 저장하는데 /(루트) 공간을 절약하기 위해 사용 공간이 넉넉하게 마운트되어있는 경로로 Docker의 기본 경로를 바꿔주겠습니다. 여기에서는 /was-data/docker로 설정하겠습니다.

centos기준 17.06.0-ce에서는 /lib/systemd/system/docker.service 파일을 수정해주면 됩니다. 그 외의 경우에는 검색을 통해 관련 파일을 찾아서 수정해주면 됩니다.

# 사용자 Docker 기본 경로 세팅
cd /was-data
mkdir docker
cd /was-data/docker

# Docker 중지
sudo service docker stop

# docker.service 파일 수정
sudo vi /lib/systemd/system/docker.service

/lib/systemd/system/docker.service 파일에서 -g 옵션을 사용해 Docker의 기본 경로를 설정합니다.

[Service]
     :
ExecStart=/usr/bin/dockerd-current \
          -g /was-data/docker \
          --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
          --default-runtime=docker-runc \
          --exec-opt native.cgroupdriver=systemd \
          --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
     :



그리고 Docker를 재시작하면 수정된 내용이 적용됩니다.

# Docker 시작
sudo service docker start


pgwatch2 실행

기본 환경설정이 끝나면 pgwatch2를 실행합니다.

# pgwatch2 실행
sudo docker run -d --name pw2 -v pg:/var/lib/postgresql -v influx:/var/lib/influxdb -v grafana:/var/lib/grafana -p 8089:8080 -p 3000:3000 cybertec/pgwatch2

웹 페이지에 접속해 페이지가 정상적으로 출력되는지 확인합니다. (초기 데이터가 로딩될 때까지 몇 분 정도가 소요될 수 있습니다.)

기본적으로 Grafana의 DB Overview 대시보드에 'test' DB에 대한 내용이 출력되어야 합니다.

Grafana 대시보드 : http://172.16.25.70:3000

Grafana 대시보드의 "admin" 로그인 계정은 다음과 같습니다.

  • ID : pgwatch2
  • PW : pgwatch2admin



pgwatch2 관리 웹 UI : http://172.16.25.70:8089/index




사용자의 PostgreSQL에 연결

웹 페이지가 정상적으로 출력되는 것을 확인한 뒤, 이제 사용자의 PostgreSQL에 연결하는 방법을 알아보겠습니다. pgwatch2에서 기본적으로 제공하는 PostgreSQL이 실행되고 있기 때문에, 해당 DB를 사용해도 되지만 저같은 경우에는 따로 PostgreSQL 서버를 가지고 있기 때문에 이와 연결해 시스템을 모니터링 할 예정입니다.


(사실 그렇게 하려면 pgwatch2에서 PostgreSQL을 따로 실행하지 않고 InfluxDB와 Grafana만 연결한 뒤, 사용자의 PostgreSQL과 연결하면 되지만 데모용으로 빠르게 테스트하기 위해 기본 pgwatch2를 실행하고 사용자의 PostgreSQL을 추가로 연결해 사용하였습니다...)


Database 추가

우선, 연결을 하기 전에 http://172.16.25.70:8089/dbs 페이지에서 사용자의 데이터베이스를 추가해줘야 합니다.

Databases under monitoring에 다음과 같은 데이터를 입력합니다. 다음과 같이 입력하고 진행하게 되면, 사용자의 PostgreSQL에 pgwatch2라는 이름의 데이터베이스가 생성되고, 해당 데이터베이스에 대해 모니터링을 진행하게 됩니다. 기존에 사용하던 PostgreSQL의 데이터베이스를 모니터링 하고 싶은 경우에는 해당 데이터베이스 설정값을 입력합니다. (단, 이후에 진행되는 과정에서 모니터링을 위한 데이터베이스를 지정할 때 주의해야 합니다.)

  • Unique name : openmps (InfluxDB에 저장할 데이터베이스명)
  • DB type : postgres
  • DB host : 172.16.25.80 (사용자의 PostgreSQL 서버 IP 주소)
  • DB port : 5432 (사용자의 PostgreSQL 서버 Port 번호)
  • DB dbname : pgwatch2
  • DB user : pgwatch2
  • DB password : xyz
  • SSL Mode : disable
  • Preset config : exhaustive
  • Statement timeout[seconds] : 5

입력을 완료하고 'Save' 버튼을 클릭했을 때, 페이지 상단에 "Host with ID 2 added!"라는 alert이 출력되면 정상적으로 추가가 완료된 것입니다.



이제 사용자의 PostgreSQL와 연결을 해야합니다.


pgwatch2 설치

PostgreSQL이 설치된 서버에 pgwatch2를 설치하고 사용자 및 DB를 생성한 뒤, 스키마 롤아웃을 진행합니다.

# Git 설치
sudo yum install git

# PostgreSQL 접속을 위한 사용자 계정 변경(root 계정으로 접속 후 postgres로 접속)
sudo su -
su - postgres

# 소스코드 복제
sudo git clone https://github.com/cybertec-postgresql/pgwatch2
cd pgwatch2

# Grafana 설정을 저장할 사용자 및 DB 생성(pgwatch2_grafana)
psql -c "create user pgwatch2_grafana password 'xyz'"
psql -c "create database pgwatch2_grafana owner pgwatch2_grafana"

# pgwatch2 설정을 저장하기위한 사용자와 DB 생성
psql -c "create user pgwatch2 password 'xyz'"
psql -c "create database pgwatch2 owner pgwatch2"

# pgwatch2 스키마 롤아웃 (모니터링 할 DB-s의 연결 문자열과 메트릭 정의를 보유합니다)
psql -f pgwatch2/sql/datastore_setup/config_store.sql pgwatch2
psql -f pgwatch2/sql/datastore_setup/metric_definitions.sql pgwatch2


데이터베이스 구성

이제 모니터링을 위한 데이터베이스를 구성합니다. 이 단계 역시 PostgreSQL이 설치된 서버에서 진행합니다.

위에 정의된 pgwatch2 로그인으로 세션 모니터링, 잠금 차단 등을 할 수 있도록 도우미 함수를 정의합니다. 슈퍼 유저 로그인(권장하지 않음)을 사용하면 이 단계를 건너 뛸 수 있지만 데이터베이스 구성 시 Is superuser? 체크 박스를 선택했는지 확인해야 합니다.

#### postgres로 접속한 상태에서 진행 ####
psql -U pgwatch2 -f pgwatch2/sql/metric_fetching_helpers/stat_activity_wrapper.sql pgwatch2

또한 추가 통찰력 ("Stat문" 대시 보드 및 CPU 로드)을 위해서는 pg_stat_statement 확장 (Postgres 9.4+가 pgwatch2에 유용 할 필요가 있음)과 PL / Python 언어를 설치하는 것이 좋습니다. 후자의 경우 보안상의 이유로 서비스 제공 업체 (DB-as-a-service)가 일반적으로 사용할 수 없습니다.

#### centos로 접속한 상태에서 진행 ####
# PL/Python 언어 설치
sudo yum install postgresql-contrib postgresql-plpython

서버를 다시 시작한 후 수퍼 유저로 확장을 설치합니다.

#### postgres로 접속한 상태에서 진행 ####
# 확장 설치
psql
CREATE EXTENSION pg_stat_statements;
CREATE EXTENSION plpython3u;

※ 다음과 같은 오류가 발생할 경우, Pgwatch2(임미영) 문서를 참조해 오류를 해결합니다.

ERROR:  could not load library "/postgresql/9.6/lib/postgresql/plpython3.so": libpython3.3m.so.1.0: cannot open shared object file: No such file or directory

슈퍼 유저가 아닌 사용자를 위해 "Stat Statement"와 CPU 로드 정보 패치를 가능하게하는 wrapper 함수를 설치합니다(수퍼 유저 역할 아래).

#### postgres로 접속한 상태에서 진행 ####
# wrapper 함수를 설치
psql -U pgwatch2 -f pgwatch2/sql/metric_fetching_helpers/stat_statements_wrapper.sql pgwatch2
psql -U pgwatch2 -f pgwatch2/sql/metric_fetching_helpers/cpu_load_plpythonu.sql pgwatch2

모든 과정을 마무리한 뒤 Grafana의 DB Overview 대시보드를 새로고침하면 페이지 왼쪽 상단에서 db를 선택할 수 있고, 위에서 설정한 db(openmps)를 선택하면 사용자의 PostgreSQL 데이터베이스에 대한 모니터링 화면을 볼 수 있습니다.


 Grafana Dashboard

여기서 대시 보드에 대해 이야기 할 때 Grafana 대시 보드는 기본적으로 한 페이지에 그래프 / 카운터 / 테이블 세트로 구성되어 있으며 사용자가 가지고있는 데이터에 따라 전체에 대한 개요를 제공합니다. 자신의 대시 보드를 만들려면 Grafana에 "admin"으로 로그인해야합니다. 로그인 한 후에는 다른 설정을 조정하고 새 사용자를 만들 수도 있습니다.

pgwatch2는 현재 5 개의 미리 정의된 대시 보드가 제공됩니다.


DB overview

핵심 성과 지표 개요 (DB 증가, 쓰기 활동, 평균 쿼리 런타임, 캐시 비율 등)




DDL/config change events




Documentation

사용 가능한 메트릭에 대한 간단한 설명




Lock details



Single query details

pg_stat_statement가 제공하는 모든 것에 대한 그래프




Sproc details




Stat statements overview

query_id에 의해 가장 많이 소모되는 / 호출 된 명령문 (pg_stat_statement 확장 설정 필요)




Table details

테이블 / 인덱스 크기 개발, 순차 / 인덱스 스캔, 캐시 비율




반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함