MySQL PMM(Percona Monitoring and Management) 소개 및 설치
l Version : MySQL, MariaDB, PMM
PMM은 Percona Monitoring and Management의 약자로 PostgreSQL 및 MySQL, MongoDB를 위한 오픈소스 데이터베이스 모니터링 및 관리 솔루션이다. 이를 통해 데이터베이스 시스템의 상태를 관찰하고, 동작의 새로운 패턴을 탐색하고, 문제를 해결하고, 온프레미스나 클라우드 어디에 있든 데이터베이스 관리 작업을 수행할 수 있다. PMM은 데이터베이스와 해당 호스트로부터 수천 개의 기본 성능 지표를 수집한다. 그리고 웹 UI 대시보드를 제공하여 데이터를 시각화 한다. 추가 기능에는 데이터베이스 상태 평가를 위한 조언을 제공하기도 한다.
PMM은 서버, 클라이언트 구조로 각 노드들에 PMM Client를 설치하여 중앙의 PMM 서버로 데이터를 전송하는 방식이다. 위 화면을 보면 그라파나(Grafana) 대시보드를 사용하는 것을 알 수 있다. 그리고 데이터를 수집하는 에이전트는 프로메테우스(Prometheus)를 사용한다.
PMM Client
l pmm-admin : 각종 exporter들을 구동 및 제어한다. pmm-admin은 노드 관리를 효과적으로 하기 위해, PMM서버에 포함된 Consul 서버에 exporter 에이전트 접속 정보(아이피와 포트)를 등록한다. Prometheus는 수집주기마다, Consul에 등록된 에이전트 리스트를 가져와서 모니터링 메트릭을 수집한다.
l node_expoter, mysql_expoter : 모니터링 대상 노드(서버)에 서버에 데몬 형태로 구동되는 에이전트로, Prometheus에서 에이전트 포트로 메트릭 요청을 하면 현재 서버의 상태를 전송하는 역할을 한다.
PMM Server
l QNAP : DB서버를 모니터링 할 때, 시스템의 메트릭 뿐만 아닌, 슬로우 쿼리나, 각종 이벤트 정보들을 pmm-server로 데이터를 전달해야 하는데, Prometeus는 이러한 데이터를 받아들이지 않는다. 이러한 데이터를 받기 위해 QAN API를 사용한다. expoter에서 pmm-server의 80포트를 사용하여 /qan-api에 데이터를 전송하면, 내부의 nginx 서비스가 전달한 데이터를 받아서, 127.0.0.1:9001로 리다이렉션하여 쿼리를 저장한다.
l Prometheus : 타임시리즈 기반의 저장소로, 데이터 수집을 비롯해서 저장 그리고 쿼리 질의, Alert등 에이전트의 포트에 접근해서, 모니터링 시스템의 메트릭을 Pull 방식으로 끌어오는 역할을 수행한다.
l Consul : pmm-admin이 pmm의 consul에 모니터링이 될 대상들의 아이피와 포트 번호를 넣어주면, Prometheus는 이 정보를 바탕으로 등록된 scrape_interval마다 각 DB서버 에이전트에 접근하여 모니터링 지표를 수집한다.
l Grafana : 수집된 데이터를 Web UI로 제공한다.
PMM설치의 경우, 서버는 컨테이너로 제공되며, 클라이언트는 컨테이너 또는 전용 패키지 설치 파일로 제공된다. 이번 포스트에서는 Docker에서 PMM 서버를 실행하고, Client는 패키지로 설치한 다음, 모니터링 서버를 등록하는 과정을 살펴본다.
[PMM 서버 설치]
도커 이지지를 다운로드 한다.
docker pull percona/pmm-server:2 |
데이터를 저장할 호스트 볼륨을 생성한다.
docker volume create pmm-data |
이미지를 실행하여 PMM 서비스를 실행한다. 이때, 관리를 위한 443 포트와 웹UI를 제공하기 위한 80포트를 사용하는데, 포트가 충돌나지 않도록 적절히 포트를 포워딩하여사용한다. (이 포스트에서는 도커 사용법을 다루지는 않는다.)
docker run --detach --restart always \ --publish 443:443 --publish 80:80 \ -v pmm-data:/srv \ --name pmm-server \ percona/pmm-server:2 |
서버가 정상적으로 실행되었으면, 웹브라우저에서 PMM 서버가 설치된 IP를 입력하여 UI 대시보드에 접속한다. 필자의 경우 컨테이너를 생성할 때, 8080포트를 사용하도록 매핑하였다. 기본 ID 및 패스워드는 admin / admin 이다. 정상적으로 접속이 되면 우선 서버 설치는 정상적으로 완료되었다고 판단하면 된다.
http://172.30.1.49:8080 |
[PMM Client 설치]
모니터링할 대상 서버에는 PMM Client를 설치한다. 운영체제에 따라 전용 패키지 또는 설치 파일을 다운로드하여 설치할 수 있다. 실습 환경은 우분투이며 편의상 패키지로 설치하였다. 각 환경에 따른 설치 방법은 아래 링크를 참고한다.
l Set up PMM Client : https://docs.percona.com/percona-monitoring-and-management/setting-up/client/index.html
apt update apt-get install -y pmm2-client |
Client 설치가 설치가 완료되었으면 PMM 서버에 수집할 클라이언트 목록을 등록해야 한다. 아래 명령어로 등록할 수 있다.
pmm-admin config --server-insecure-tls --server-url=https://admin:admin@X.X.X.X:443 |
l X.X.X.X : PMM 서버 IP를 입력한다.
l 443 : 기본 포트 번호. 컨테이너 실행시 포트 번호를 다르게 매핑하였다면 수정해야한다.
l Admin/admin : PMM 서버의 기본 접속 정보이다. 만약 이전 웹UI를 통해서 수정하였다면 이 부분도 수정한다.
여기까지 진행되었으면 PMM 대시보드에서 모니터링의 대상 서버가 추가된 것을 확인할 수 있다. 홈 대시보드에서는 Node Names에서 확인할 수 있다. 정보가 업데이트 되기까지 약간의 시간이 걸릴수도 있다.
이번 실습에서는 MySQL을 모니터링을 하기 때문에 MySQL 서비스에 대한 모니터링을 할 수 있도록 MySQL도 등록한다. 사용자 환경에 따라 필요한 서비스를 등록한다. 지원되는 서비스 목록은 아래와 같다.
l MySQL (and variants Percona Server for MySQL, Percona XtraDB Cluster, MariaDB)
l MongoDB
l PostgreSQL
l ProxySQL
l Amazon RDS
l Microsoft Azure
l Google Cloud Platform (MySQL and PostgreSQL)
l Linux
l External services
l HAProxy
l Remote instances
MySQL 서비스에 대한 정보를 수집할 수 있도록 PMM Client가 사용할 계정 및 다양한 시스템 환경을 설정한다. 설정 방법은 공식 문서를 참고할 수 있도록 한다.
l https://docs.percona.com/percona-monitoring-and-management/setting-up/client/mysql.html
이번 포스트에서는 슬로우 쿼리 로그를 모니터링 할 수 있도록 서비스를 등록하였다.
pmm-admin add mysql --query-source=slowlog --username=pmm --password=pass |
대시보드를 살펴보면 MySQL 서비스가 등록되었으며, 관련 지표를 확인할 수 있다.
PMM은 내부 적으로 알림 시스템(alert-manager)을 가지고 있어, 특정 임계치를 설정하였을 때, 그 임계치를 넘으면 알림을 받을 수 있다. 이번 포스트에서는 다루지 않지만, 이러한 알림 시스템까지 설정하여 활용하면 시스템에 대한 상태를 매번 지켜보지 않아도 문제가 발생하였을 때, 메신저 등으로 알림을 받을 수 있어 빠르게 문제 인지 및 원인을 파악할 수 있다.
[참고자료]
l https://prometheus.io/docs/introduction/overview/
l https://docs.percona.com/percona-monitoring-and-management/setting-up/server/docker.html
l https://docs.percona.com/percona-monitoring-and-management/setting-up/client/mysql.html
l https://prometheus.io/docs/introduction/overview/
2023-08-22 / Sungwook Kang / http://sungwookkang.com
MySQL, MariaDB, Percona, DB모니터링, PMM, MySQL모니터링, 퍼코나 모니터링, Grafana, Promethus, 슬로우쿼리모니터링
'MySQL, MariaDB' 카테고리의 다른 글
[MySQL] 성능 모니터링을 위한 Performance_Schema 개념 (0) | 2023.09.02 |
---|---|
[MySQL] “innodb_table_stats” not found 오류와 예상하지 못한 사이드 이펙트 (0) | 2023.09.01 |
MySQL Galera Cluster + ProxySQL에서 Galera Cluster 특성을 고려한 R/W 호스트 그룹 설정 하기 (0) | 2023.08.10 |
MySQL/MariaDB 환경에서 다중 마스터 복제를 지원하는 Galera Cluster 알아보기 (0) | 2023.08.07 |
ProxySQL 은 서비스에 필요한 설정값을 어디에 저장하고 재사용할까? (0) | 2023.08.04 |