Skip to content
> giho's blog
Go back

~/posts/mysql-monitoring-stack

MySQL 모니터링 스택 구축 — Prometheus/exporter와 PMM

· 6 min read
-- contents

MySQL을 모니터링하는 두 갈래 — 직접 조립하는 Prometheus + exporter + Grafana와, 통짜로 얹는 Percona PMM — 를 정리했다. 명령의 IP·계정·비밀번호는 전부 예시 플레이스홀더다.

Pull vs Push

수집 방향으로 아키텍처가 갈린다.

Note

Prometheus가 pull, InfluxDB(+Telegraf)가 push다. 헷갈리기 쉬운데 “Prometheus가 대상을 찾아가 긁어온다”로 기억하면 된다.

방식 1: Prometheus + exporter + Grafana

node_exporter (OS 지표)

wget https://github.com/prometheus/node_exporter/releases/download/v1.4.0/node_exporter-1.4.0.linux-amd64.tar.gz
tar xvzf node_exporter-1.4.0.linux-amd64.tar.gz
cd node_exporter-1.4.0.linux-amd64
nohup ./node_exporter &        # 기본 포트 9100

mysqld_exporter (MySQL 지표)

wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar xvf mysqld_exporter-0.14.0.linux-amd64.tar.gz

전용 계정을 만들고 최소 권한만 준다.

CREATE USER 'exporter'@'localhost' IDENTIFIED BY '****';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';

접속 정보는 my.cnf로 넘긴다(경로를 안 주면 /root/.my.cnf를 찾다 에러난다).

./mysqld_exporter --config.my-cnf=/etc/my.cnf   # 기본 포트 9104
Tip

방화벽에서 9100(node)·9104(mysqld) 를 Prometheus 서버 대역에만 열어준다. netstat -tupln 또는 ss -tupln으로 리슨 확인.

Prometheus scrape 설정

Prometheus는 prometheus.yml의 타깃을 주기적으로 긁는다.

scrape_configs:
  - job_name: node
    static_configs:
      - targets: ["10.0.0.11:9100", "10.0.0.12:9100"]
  - job_name: mysqld
    static_configs:
      - targets: ["10.0.0.11:9104", "10.0.0.12:9104"]

Grafana

Grafana(기본 3000포트)에서 Prometheus를 데이터소스로 추가하고, 검증된 공개 대시보드를 import 하면 시작이 빠르다.

방식 2: Percona PMM (통짜 솔루션)

exporter·시계열 DB·Grafana·쿼리 분석(QAN)을 한 컨테이너로 묶은 게 PMM이다. “빠르게 제대로”가 목적이면 이쪽.

PMM 서버 (모니터링 서버)

docker pull percona/pmm-server:2
docker volume create pmm-data
docker run -d -p 443:443 \
  -v pmm-data:/srv \
  --name pmm-server --restart always \
  percona/pmm-server:2
# https://<pmm-server>  접속 → admin / admin 초기 로그인

PMM 클라이언트 (모니터링 대상 DB 서버)

# 클라이언트 설치 후 서버 등록
pmm-admin config --server-insecure-tls --server-url=https://admin:****@10.0.0.100:443

DB에 PMM 전용 계정을 만든다.

CREATE USER 'pmm'@'localhost' IDENTIFIED BY '****';
GRANT SELECT, PROCESS, REPLICATION CLIENT, RELOAD ON *.* TO 'pmm'@'localhost';

서비스로 등록한다. --query-source로 쿼리 분석 소스를 고른다.

# performance_schema 기반 (권장)
pmm-admin add mysql --query-source=perfschema --username=pmm --password=**** --port=3306 mydb-perf
# slow log 기반
pmm-admin add mysql --query-source=slowlog --username=pmm --password=**** --port=3306 mydb-slow

pmm-admin list        # 등록된 서비스 확인

서버를 옮기거나 정리할 때:

pmm-admin remove mysql mydb-slow           # list의 service-name으로 제거
# 서버 URL을 바꾸려면 기존 서비스 제거 후 config 재실행
pmm-admin config --server-insecure-tls --server-url=https://admin:****@10.0.0.101:443

꼭 봐야 할 지표

대시보드가 화려해도 결국 보는 건 정해져 있다.

정리



-- related


Previous Post
AI로 데이터베이스에 안전하게 접근하기
Next Post
MariaDB/MySQL 백업·복구 실전 정리 — mariabackup와 mysqldump
giho=#searchesc