시스템 보안

[9월 2일] DB 모니터링 시스템 구축하기

ljm 2025. 9. 2. 15:32

**PMM(Percona Monitoring and Management)**을 이용한 DB 모니터링 시스템을 구축

PMM은 데이터베이스 성능 모니터링 및 관리를 위한 무료 오픈소스 도구

 

PMM Server

PMM Server는 모니터링 시스템의 핵심 역할을 수행합니다.

  • 데이터 수집 및 저장: PMM Client로부터 전송된 다양한 지표(CPU 사용량, 메모리, 쿼리 응답 시간 등)를 수집하고 저장하는 역할을 합니다.
  • 시각화 및 분석: 저장된 데이터를 바탕으로 웹 기반의 대시보드를 제공하여, 사용자가 데이터베이스의 성능 상태를 한눈에 파악하고 분석할 수 있게 합니다.

PMM Client

PMM Client는 모니터링 대상인 서버(DB Server)에 설치되는 에이전트입니다.

  • 지표 수집: 설치된 서버의 하드웨어(CPU, 메모리, 디스크), 운영 체제, 그리고 데이터베이스(MySQL, PostgreSQL 등)의 성능 관련 지표들을 실시간으로 수집합니다.
  • 데이터 전송: 수집한 지표들을 PMM Server로 전송합니다.

간단히 말해, PMM Client가 현장(DB Server)의 정보를 수집하여 PMM Server로 보내면, PMM Server가 그 정보를 분석하고 시각화하여 보여주는 구조입니다.

이러한 PMM 시스템을 통해 데이터베이스의 성능 문제를 사전에 감지하고, 원인을 분석하며, 최적화하는 데 큰 도움을 받을 수 있습니다.

 

@ PMM Server 에서 DB 구축하기

ljm@ljm:~$ sudo mysql -u root -p

MariaDB [(none)]> create database SCHOOL;

MariaDB [(none)]> create user 'cmd'@'localhost' identified by '1234';

MariaDB [(none)]> grant all privileges on SCHOOL.* to 'cmd'@'localhost';

MariaDB [(none)]> flush privileges;

MariaDB [(none)]> use SCHOOL

MariaDB [SCHOOL]> CREATE TABLE SCHOOL.Student_Info (S_ID int primary key, S_NAME VARCHAR(30) NOT NULL, S_ADDR VARCHAR(50), S_AGE INT);

MariaDB [SCHOOL]> CREATE TABLE SCHOOL.Student_Score (S_ID int primary key, S_NETWORK int, S_SERVER int, S_SECURITY int);

MariaDB [SCHOOL]> CREATE TABLE SCHOOL.Student_Health (H_ID int primary key, S_VISION DECIMAL(2,1), S_WEIGHT int, S_STATURE int, S_BLOOD_TYPE VARCHAR(10));

MariaDB [SCHOOL]> INSERT INTO SCHOOL.Student_Info (S_ID, S_NAME, S_ADDR, S_AGE)
VALUES
(1, 'Gil-Dong', 'Daegu', 28),
(2, 'Young-Gu', 'Busan', 32),
(3, 'Cheol-Su', 'Daegu', 22),
(4, 'Yeong-Hee', 'Daejeon', 28),
(5, 'Sa-Rang', 'Seoul', 26);

MariaDB [SCHOOL]> INSERT INTO SCHOOL.Student_Score (S_ID, S_NETWORK, S_SERVER, S_SECURITY)
VALUES
(1, 90, 80, 95),
(2, 80, 75, 80),
(3, 85, 95, 75),
(4, 70, 75, 70),
(5, 80, 80, 85);

MariaDB [SCHOOL]> INSERT INTO SCHOOL.Student_Health (H_ID, S_VISION, S_WEIGHT, S_STATURE, S_BLOOD_TYPE) 
VALUES (1, 1.0, 80, 176, 'A'), (2, 1.2, 65, 164, 'A'), (3, 0.7, 66, 186, 'B-'), (4, 0.2, 77, 177, 'O'), (5, 1.5, 98, 189, 'RH+');

 

ljm@ljm:~$ sudo apt update -y

ljm@ljm:~$ sudo apt install -y ca-certificates curl gnupg

ljm@ljm:~$ ls /etc/apt
apt.conf.d keyrings preferences.d.save sources.list.d auth.conf.d preferences.d sources.list trusted.gpg.d

ljm@ljm:~$ sudo install -m 0755 -d /etc/apt/keyrings

ljm@ljm:~$ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

ljm@ljm:~$ ls /etc/apt/keyrings docker.gpg

ljm@ljm:~$ echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

ljm@ljm:~$ sudo apt update

ljm@ljm:~$ sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

ljm@ljm:~$ sudo systemctl status docker

ljm@ljm:~$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE

ljm@ljm:~$ sudo docker ps -a

ljm@ljm:~$ sudo apt update -y

ljm@ljm:~$ sudo apt install -y git

ljm@ljm:~$ sudo curl -fsSL https://www.percona.com/get/pmm | sudo /bin/bash

 

@ pmm.client

wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb

sudo dpkg -i percona-release_latest.generic_all.deb

sudo percona-release enable pmm3-client

sudo percona-release start pmm3-client


sudo apt update
sudo apt install -y pmm-client

sudo pmm-admin config --server-insecure-tls --server-url=https://admin:admin@192.168.16.96  # pmm.serverd의 ip 입력 
sudo pmm-admin status

@ pmm.client

sudo firewall-cmd --permanent --add-service=mysql
sudo firewall-cmd --reload

https://192.168.16.96:443 접속

 

username : admin
passwd : 1234 로 변경

 

ljm@ljm:~$ sudo pmm-admin config --server-insecure-tls --server-url=https://admin:1234@192.168.16.96

ljm@ljm:~$ sudo firewall-cmd --permanent --add-service=mysql
success
ljm@ljm:~$ sudo firewall-cmd --reload
success