PostgreSQL 모니터링: Node Exporter, Prometheus 및 Grafana를 통한 접근

이세현·2024년 8월 2일
0

Postgresql_Monitoring

목록 보기
5/8

Server 할당 후 PG 설치

AWS EC2 프리티어 설정

Red Hat 9 서버 할당

키 페어, 보안 그룹 설정

1. 키 페어 (Key Pair)

  • 접근 제어: EC2 인스턴스에 SSH를 통해 안전하게 접속하기 위해 키 페어를 사용합니다. 키 페어는 공인 키와 개인 키로 구성되며, 개인 키는 안전하게 보호되어야 합니다.

  • 보안 강화: 비밀번호 대신 키 페어를 사용함으로써 brute-force 공격에 대한 저항력을 높일 수 있습니다. 개인 키는 외부에 노출되지 않으므로 보안성이 향상됩니다.

2. 보안 그룹 (Security Group)

  • 네트워크 접근 제어: 보안 그룹은 EC2 인스턴스에 대한 트래픽을 필터링하는 가상 방화벽 역할을 합니다. 인바운드 및 아웃바운드 규칙을 설정하여 어떤 IP 주소와 포트에서 트래픽을 허용할지를 정의합니다.
  • 상태 기반 필터링: 보안 그룹은 상태 기반으로 작동하므로, 요청이 수신되면 응답에 대해 자동으로 허용됩니다. 이를 통해 보다 유연한 네트워크 관리가 가능합니다.
  • 보안 정책 구현: 특정 서비스(예: 웹 서버, 데이터베이스 서버)와 관련된 포트만 열어두어 최소한의 접근만 허용함으로써 보안을 강화할 수 있습니다.



EC2 접속 후 PG16 설치

EC2 접속

vi /etc/ssh_config 접속 후

#User ""
ForwardAgent no
Compression yes
PreferredAuthentications hostbased,publickey,password,keyboard-interactive
ForwardX11 yes
ForwardX11Trusted yes
NoHostAuthenticationForLocalhost yes
StrictHostKeyChecking no
CheckHostIP no
UseRoaming no
wq!

ssh -i <pem.key path> ec2-user@<퍼블릭 DNS>

Postgresql 설치

Postgresql 다운로드 링크 :클릭

sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo dnf -qy module disable postgresql
sudo dnf install -y postgresql16-server

sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
sudo systemctl enable postgresql-16
sudo systemctl start postgresql-16

sudo -i -u postgres
psql

DBeaver로 PG 접속 확인

보안 그룹

인바운드 규칙 편집

postgresql.conf 수정

  • 역할: PostgreSQL 서버의 전반적인 설정을 관리하는 파일입니다.
  • 구성: 서버의 포트, 데이터 디렉터리 경로, 로그 설정, 메모리 할당 등 다양한 서버 동작 방식을 설정할 수 있습니다.
cd $PGDATA
vi postgresql.conf

#listen_address = 'localhost'(수정 전)
listen_address = '*' (수정 후)

pg_hba.conf 수정

  • 역할: PostgreSQL 데이터베이스에 대한 클라이언트 인증을 설정하는 파일입니다.
  • 구성: 이 파일에서는 어떤 호스트가 데이터베이스에 접근할 수 있는지, 어떤 사용자에게 접근 권한을 부여할 것인지, 어떤 인증 방법을 사용할 것인지를 정의합니다.
cd $PGDATA
vi pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             내 IP(보안그룹)/32          md5

PostgreSQL 서버 재시작: 변경 사항을 적용하려면 PostgreSQL 서버를 재시작해야 합니다.

sudo systemctl restart postgresql

DBeaver 접속

Host: EC2의퍼블릭 IPv4 주소


Monitoring Tool 작업

Setting Up Node Exporter

package 다운로드

sudo yum update -y
sudo yum install wget -y

wget wget https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz

압축 풀기 및 폴더 이동

tar -xvf node_exporter-1.8.2.linux-amd64.tar.gz
sudo mv node_exporter /usr/local/bin/

Node Exporter 시작

DATA_SOURCE_NAME="postgresql://postgres:postgres@<퍼블릭 IPv4 주소>:5432/postgres?sslmode=disable
" /usr/local/bin/node_exporter --web.listen-address=프라이빗 IPv4 주소:9100 --web.telemetry-path=/metrics

Node Exporter는 Prometheus와 함께 사용되는 모니터링 도구로, 주로 Linux 서버의 시스템 메트릭을 수집하는 데 사용됩니다.

주요 기능

  • 메트릭 수집: CPU 사용량, 메모리 사용량, 디스크 I/O, 네트워크 트래픽 등 다양한 시스템 관련 메트릭을 수집합니다.
  • 구성 용이성: Node Exporter는 설치 및 설정이 간단하여 빠르게 시스템 메트릭을 수집할 수 있습니다.
  • 다양한 Exporter: Node Exporter 외에도 다양한 Exporter가 있어, 데이터베이스, 애플리케이션 등 다양한 메트릭을 수집할 수 있습니다.
  • 시각화: Grafana와 같은 도구를 사용해 수집된 메트릭을 시각화할 수 있습니다.

확인 방법

node_exporter가 제대로 실행되고 있는지 확인하려면, SSH를 통해 동일 EC2 인스턴스에 새롭게 Shell창을 열어서 접속한 후, 웹 브라우저나 curl 명령어를 사용하여 메트릭에 접근할 수 있습니다

curl http://EC2의 프라이빗 IPv4 주소:9100/metrics

Metrics 정보가 뜨면 성공!!



Setting Up Prometheus

Prometheus는 오픈 소스 모니터링 및 경고 시스템으로, 시계열 데이터를 수집하고 저장하는 데 특화되어 있습니다.

주요 기능

  • 메트릭 수집: HTTP를 통해 메트릭을 자동으로 수집하며, 다양한 Exporter와 통합하여 여러 시스템의 데이터를 수집할 수 있습니다.
  • 시계열 데이터 저장: 메트릭을 시계열로 저장하고, 쿼리를 통해 실시간 분석이 가능합니다.
  • 라벨링: 메트릭에 라벨을 추가하여 다양한 차원에서 데이터를 필터링하고 구분할 수 있습니다.
  • 알림: Alertmanager와 통합하여 특정 조건이 충족되면 알림을 발송할 수 있습니다.

폴더 구조

sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo chown postgres:postgres /etc/prometheus
sudo chown postgres:postgres /var/lib/prometheus

Prometheus 다운로드 및 압축 풀기

cd /opt

wget wget https://github.com/prometheus/prometheus/releases/download/v2.53.1/prometheus-2.53.1.linux-amd64.tar.gz

tar -xvzf prometheus-2.53.1.linux-amd64.tar.gz

바이너리를 /usr/local/bin 디렉토리로 복사하고, 소유권을 postgres 사용자에게 할당

sudo cp /opt/prometheus-2.53.1.linux-amd64/prometheus /usr/local/bin/
sudo cp /opt/prometheus-2.53.1.linux-amd64/promtool /usr/local/bin/
sudo chown postgres:postgres /usr/local/bin/prometheus
sudo chown postgres:postgres /usr/local/bin/promtool

Prometheus 구성 파일을 /etc/prometheus 디렉토리 옮기기

sudo cp -r /opt/prometheus-2.53.1.linux-amd64/consoles /etc/prometheus
sudo cp -r opt/prometheus-2.53.1.linux-amd64/console_libraries /etc/prometheus
sudo chown -R postgres:postgres /etc/prometheus/consoles
sudo chown -R postgres:postgres /etc/prometheus/console_libraries

/etc/prometheus 디렉토리에 prometheus.yml 파일을 생성하고, 소유권을 postgres 사용자에게 할당 후 Prometheus service 생성

sudo touch /etc/prometheus/prometheus.yml
sudo chown postgres:postgres /etc/prometheus/prometheus.yml

sudo vi /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=postgres
Group=postgres
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target

sudo systemctl start prometheus

URL에서 프로메테우스 확인

현재, 우리는 프로메테우스의 Node Exporter는 설정 시, EC2의 private IP 주소를 사용했기에 URL에서 ec2private IP:9090/graph로 접속하지 못합니다.
방법은 보안 규칙 설정 혹은 SSH 터널링 작업인데 이번엔 SSH 터널링으로 접속합니다.

SSH 터널링 작업

SSH 터널링(SSH Tunneling)은 SSH(Secure Shell) 프로토콜을 사용하여 네트워크 연결을 암호화하고, 원격 서버와의 안전한 통신을 위한 경로를 생성하는 기술입니다. 이 방법을 통해 보안이 필요한 데이터 전송을 안전하게 수행할 수 있습니다.

주요 특징

  • 암호화: SSH 터널링은 데이터를 암호화하여 전송하므로, 중간에서 패킷 스니핑을 방지할 수 있습니다.
  • 포트 포워딩: 특정 포트(로컬 또는 원격)로 들어오는 트래픽을 SSH 서버를 통해 다른 포트로 전달할 수 있습니다. 이는 여러 가지 방식으로 수행할 수 있습니다:
  • 로컬 포트 포워딩: 로컬 머신의 특정 포트를 원격 서버의 포트로 포워딩합니다.
  • 원격 포트 포워딩: 원격 서버의 포트를 로컬 머신의 포트로 포워딩합니다.
  • 다이내믹 포트 포워딩: SOCKS 프록시를 사용하여 여러 포트를 동적으로 포워딩합니다.
  • 안전한 접근: SSH 터널링을 사용하면 방화벽 뒤에 있는 서버나 서비스에 안전하게 접근할 수 있습니다.
ssh -i pg.pem -L 9090:<ec2private IP>:9090 ec2-user@<퍼블릭 DNS>

http://localhost:9090/graph 접속 시 아래와 같은 화면이 나옵니다.



Setting up Grafana

Grafana Setup 그리고 설치

sudo vi /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

sudo yum  -y install grafana

Grafana 서버 시작 후 터널링 진행

sudo systemctl enable --now grafana-server
sudo systemctl start grafana-server

ssh -i pg.pem -L 3000:<ec2private IP>:3000 ec2-user@<퍼블릭 DNS>

http://localhost:3000/dashboards 접속 시 아래와 같은 화면이 나옵니다.

Grafana 대시보드에 Prometheus(Postgresql) 데이터 소스를 추가

URL: localhost:9090

예시

  1. Grafana 대시보드에서 메트릭 쿼리를 실행
  2. PostgreSQL의 "up" 상태(즉, PostgreSQL 서버가 실행 중인지 여부)와 관련된 메트릭은 일반적으로 postgres_exporter와 같은 Exporter에 의해 제공됩니다.
  3. 이 Exporter는 Prometheus가 수집할 수 있는 다양한 메트릭을 노출합니다.
    4."up" 상태를 확인하는 데 중요한 메트릭은 보통 pg_up입니다.



결론

이 과정에서는 AWS EC2에서 Red Hat 9 서버를 할당하고 PostgreSQL과 관련된 모니터링 툴을 설치하는 전체적인 절차를 설명했습니다.

  • EC2 설정: 키 페어와 보안 그룹을 통해 안전한 접근을 설정했습니다.
  • PostgreSQL 설치: EC2 인스턴스에 PostgreSQL 16을 설치하고 설정했습니다.
  • DBeaver로 접속 확인: PostgreSQL의 설정 파일을 수정하여 DBeaver를 통해 데이터베이스에 연결할 수 있도록 했습니다.
  • 모니터링 도구 설정: Node Exporter와 Prometheus를 설치하여 PostgreSQL의 메트릭을 수집하고 시각화하는 Grafana 대시보드를 구성했습니다.
  • SSH 터널링: 외부에서 서비스에 안전하게 접근하기 위해 SSH 터널링을 설정했습니다.

결론적으로, AWS EC2에서 PostgreSQL 데이터베이스를 설정하고 모니터링하기 위한 환경을 성공적으로 구축하였으며, 시스템 메트릭을 수집하고 시각화하는 도구를 활용하여 효과적으로 서버 상태를 관리할 수 있는 기반을 마련했습니다.

profile
pglover_12

1개의 댓글

comment-user-thumbnail
2024년 8월 6일

엄청 도움이 됩니다!!

답글 달기