Red Hat 9 서버 할당
1. 키 페어 (Key Pair)
접근 제어: EC2 인스턴스에 SSH를 통해 안전하게 접속하기 위해 키 페어를 사용합니다. 키 페어는 공인 키와 개인 키로 구성되며, 개인 키는 안전하게 보호되어야 합니다.
보안 강화: 비밀번호 대신 키 페어를 사용함으로써 brute-force 공격에 대한 저항력을 높일 수 있습니다. 개인 키는 외부에 노출되지 않으므로 보안성이 향상됩니다.
2. 보안 그룹 (Security Group)
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
보안 그룹
인바운드 규칙 편집
postgresql.conf 수정
cd $PGDATA
vi postgresql.conf
#listen_address = 'localhost'(수정 전)
listen_address = '*' (수정 후)
pg_hba.conf 수정
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 주소
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 서버의 시스템 메트릭을 수집하는 데 사용됩니다.
주요 기능
확인 방법
node_exporter가 제대로 실행되고 있는지 확인하려면, SSH를 통해 동일 EC2 인스턴스에 새롭게 Shell창을 열어서 접속한 후, 웹 브라우저나 curl 명령어를 사용하여 메트릭에 접근할 수 있습니다
curl http://EC2의 프라이빗 IPv4 주소:9100/metrics
Metrics 정보가 뜨면 성공!!
Prometheus는 오픈 소스 모니터링 및 경고 시스템으로, 시계열 데이터를 수집하고 저장하는 데 특화되어 있습니다.
주요 기능
폴더 구조
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
현재, 우리는 프로메테우스의 Node Exporter는 설정 시, EC2의 private IP 주소를 사용했기에 URL에서 ec2private IP:9090/graph로 접속하지 못합니다.
방법은 보안 규칙 설정 혹은 SSH 터널링 작업인데 이번엔 SSH 터널링으로 접속합니다.
SSH 터널링 작업
SSH 터널링(SSH Tunneling)은 SSH(Secure Shell) 프로토콜을 사용하여 네트워크 연결을 암호화하고, 원격 서버와의 안전한 통신을 위한 경로를 생성하는 기술입니다. 이 방법을 통해 보안이 필요한 데이터 전송을 안전하게 수행할 수 있습니다.
주요 특징
ssh -i pg.pem -L 9090:<ec2private IP>:9090 ec2-user@<퍼블릭 DNS>
http://localhost:9090/graph 접속 시 아래와 같은 화면이 나옵니다.
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 접속 시 아래와 같은 화면이 나옵니다.
URL: localhost:9090
예시
이 과정에서는 AWS EC2에서 Red Hat 9 서버를 할당하고 PostgreSQL과 관련된 모니터링 툴을 설치하는 전체적인 절차를 설명했습니다.
결론적으로, AWS EC2에서 PostgreSQL 데이터베이스를 설정하고 모니터링하기 위한 환경을 성공적으로 구축하였으며, 시스템 메트릭을 수집하고 시각화하는 도구를 활용하여 효과적으로 서버 상태를 관리할 수 있는 기반을 마련했습니다.
엄청 도움이 됩니다!!