PostgreSQL 14 Docker 컨테이너에서 pg_proctab 활용하기: 설치부터 시각화까지

이세현·2024년 7월 11일
0

Postgresql_Monitoring

목록 보기
2/8

1. Docker 컨테이너에서 PostgreSQL 14 설치 및 설정

먼저, Docker를 사용하여 PostgreSQL 14을 설치하고 설정하는 방법부터 알아봅니다.

bash
docker run --name pg14 -e POSTGRES_PASSWORD=postgres -d -p 5432:5432 postgres:14

위 명령어를 통해 PostgreSQL 14을 실행하고 외부에서 접속할 수 있도록 포트 매핑을 설정합니다.

2. pg_proctab 설치 및 설정

pg_proctab은 PostgreSQL 데이터베이스 내에서 실행 중인 프로세스를 모니터링하는 확장 기능입니다.
아래 단계를 따라 pg_proctab을 설치하고 활용합니다.

가. 필요한 패키지 설치

bash
apt-get update
apt-get install -y git build-essential

나. PostgreSQL 14 개발 헤더 설치

bash
apt-get install -y postgresql-server-dev-14

다. pg_proctab 소스 코드 다운로드 및 빌드

bash
git clone https://github.com/markwkm/pg_proctab.git
cd pg_proctab
make
make install

3. PostgreSQL 설정 확인 및 사용

PostgreSQL 14이 정상적으로 실행되었는지 확인하고, 데이터베이스에 접속하여 pg_proctab을 활용하는 방법을 익힙니다.

가. PostgreSQL 실행 확인

bash
service postgresql status

나. PostgreSQL 데이터베이스 접속 및 활용

bash
psql -U postgres

4. pg_proctab 활용: 데이터 시각화

Python을 사용하여 pg_proctab 데이터를 시각화하는 방법을 알아봅니다. 아래는 예시 코드입니다.

python
import psycopg2
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# PostgreSQL 연결 정보
conn = psycopg2.connect(
    host="localhost",
    database="postgres",
    user="postgres",
    password="postgres"
)

# 데이터베이스에서 데이터 조회
query = """
    SELECT pid, comm, fullcomm, utime, stime, vsize, rss, reads, writes
    FROM pg_proctab();
"""

# 데이터를 Pandas DataFrame으로 읽기
df = pd.read_sql_query(query, conn)
# 연결 종료
conn.close()

# fullcomm(pid) 형식으로 조합하여 새로운 컬럼 생성
df['fullcomm_pid'] = df['fullcomm'] + '(' + df['pid'].astype(str) + ')'

# 사이즈 오름차순으로 정렬
df_sorted = df.sort_values(by='rss')

# Seaborn을 사용한 시각화
plt.figure(figsize=(16, 12))

# RSS 메모리 사용량 막대 그래프
plt.subplot(2, 1, 1)
sns.barplot(x='fullcomm_pid', y='rss', data=df_sorted, palette='viridis')
plt.xlabel('Process Name (PID)')
plt.ylabel('RSS Memory (MB)')
plt.title('RSS Memory Usage by Process (PID)', fontsize=16)
plt.xticks(rotation=45, ha='right', fontsize=10)
plt.tight_layout()

# VSIZE 메모리 사용량 막대 그래프
plt.subplot(2, 1, 2)
sns.barplot(x='fullcomm_pid', y='vsize', data=df_sorted, palette='viridis')
plt.xlabel('Process Name (PID)')
plt.ylabel('VSIZE Memory (MB)')
plt.title('VSIZE Memory Usage by Process (PID)', fontsize=16)
plt.xticks(rotation=45, ha='right', fontsize=10)
plt.tight_layout()

# y 축의 값 형식 설정
plt.gca().yaxis.set_major_formatter(plt.FuncFormatter(lambda x, loc: "{:,}".format(int(x))))

plt.show()


이와 같은 구성으로 블로그를 작성하면, PostgreSQL 14을 Docker 컨테이너에서 설치하고 설정하는 방법부터 시작하여 pg_proctab을 사용하여 데이터베이스 내 프로세스를 모니터링하고 시각화하는 과정을 자세히 설명할 수 있습니다.

profile
pglover_12

0개의 댓글