오픈소스 모니터링 툴 PMM2 (MySQL, MariaDB, PostgreSQL, Mongo)
Percona Monitoring and Management 2
PMM은 Percona에서 프로메테우스와 그라파나를 이용해 무료로 배포하고 있는 모니터링 툴입니다. (https://www.percona.com/software/database-tools/percona-monitoring-and-management)
최근에 2버전으로 업데이트가 되면서 기존 1.7버전과는 많은 것이 바뀌었습니다.
MariaDB의 Galera Cluster 모니터링 뿐만아니라, PostgreSQL 모니터링도 정식으로 지원하기 시작하여, postgres_exporter 를 따로 설치할 필요가 없어 졌습니다.
PMM2에서는 Linux Node, MySQL(MariaDB), PostgreSQL, MongoDB의 모니터링이 가능합니다.
아래는 노드의 정보를 보여주는 Node Summary 화면입니다.
인스턴스 오버뷰를 통해 모든 DB 인스턴스의 자원 사용률을 한 번에 볼수 있습니다.
아래는 MySQL의 인스턴스 오버뷰입니다.
우측 상단에 MySQL을 눌러보면 InnoDB, MyISAM 같은 스토리지 엔진의 정보도 체크 할 수 있고, 퍼포먼스 스키마의 정보를 조회하거나, Slow query를 조회 할 수 있습니다.
아래는 PostgreSQL의 인스턴스 서머리 모니터링 화면입니다.
개별 인스턴스가 가지는 자원 효율을 모니터링 할 수 있습니다.
기존의 1.7 버전과 설치 방법이 조금 바뀌었습니다. PMM-Server의 경우 Docker로 올리는건 비슷합니다. Data 컨테이너를 추가하고, 서버 컨테이너를 올려서 구동합니다. 특별히 설정값을 바꾸지 않아도 모니터링 데이터를 30일을 기본 보관주기로 가지고 있습니다.
PMM-Server 설치
docker 이미지 받기
$ docker pull percona/pmm-server:2
글 작성 기준 가장 최신 버전은 2.0.1이었습니다.
Data 컨테이너 생성
$ docker create \ -v /srv \ --name pmm-data \ percona/pmm-server:2 /bin/true
PMM-Server 구동
$ docker run -d \ -p 80:80 \ -p 443:443 \ --volumes-from pmm-data \ --name pmm-server \ --restart always \ percona/pmm-server:2
기존 버전과 달라진 점은 https를 설정해주지 않아도 기본으로 사용할 수 있습니다. http, https 모두 사용가능합니다.
기존의 사용중인 버전이 있다면, Docker 이미지를 업데이트하여 버전업이 가능합니다. (참고 : https://www.percona.com/doc/percona-monitoring-and-management/2.x/install/docker-upgrading.html)
PMM-server를 구동한 후 그라파나 웹에 접속하면 로그인 화면이 뜹니다. 초기 패스워드는 admin/admin이며, 처음 로그인하면 암호 변경을 합니다.
PMM-Client 설치
기존 클라이언트가 있다면 역시 삭제 해주는게 좋습니다.
그리고 클라이언트 에이전트의 설정 방식은 완전히 바뀌었기 때문에 반드시 새 문서를 참고 하시기 바랍니다.
PMM Repo 추가
$ yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
Percona Release 설정
$ percona-release disable all $ percona-release enable original release
PMM-Client 설치
$ yum install pmm2-client
PMM-Client 에이전트 설정하기
1.7 버전에서 사용하던 –server-address 옵션이 사라졌습니다.
$ pmm-admin config --server-insecure-tls --server-url=https://admin:admin@192.168.100.1:443
–server-url=https://admin:MyPassword@<ip address>:Port 이런식으로 옵션을 주면 클라이언트 에이전트에 모니터링 서버가 등록됩니다.
# pmm-admin config --server-insecure-tls --server-url=https://admin:admin@192.168.100.1:443 Checking local pmm-agent status... pmm-agent is running. Registering pmm-agent on PMM Server... Registered. Configuration file /usr/local/percona/pmm-agent.yaml updated. Reloading pmm-agent configuration... Configuration reloaded. Checking local pmm-agent status... pmm-agent is running.
에이전트가 등록되면 기본적으로 Linux 서버에 대한 모니터링은 자동으로 이루어집니다.
$ pmm-admin add mysql --query-source=slowlog --username=pmm --password=pmm 127.0.0.1:3306
MySQL DB에 PMM유저를 생성해줍니다.
create user 'pmm'@'127.0.0.1' identified by 'pmm123'; grant all privileges on *.* to 'pmm'@'127.0.0.1' identified by 'pmm123'; GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON *.* TO 'pmm'@'127.0.0.1' IDENTIFIED BY 'pmm123' WITH MAX_USER_CONNECTIONS 10; GRANT SELECT, UPDATE, DELETE, DROP ON performance_schema.* TO 'pmm'@'127.0.0.1'; flush privileges;
MySQL을 등록하는 옵션입니다. –query-source=slowlog 옵션을 줘야 slow-query를 모니터링 할 수 있습니다.
MySQL이나 MariaDB는 ‘root’@’127.0.0.1’ 접속 권한 설정을 반드시 줘야 합니다.
특별히 인스턴스 이름을 지정해주지 않으면 <node>-mysql 이라는 이름으로 PMM-server에 등록이 됩니다.
# pmm-admin add mysql --query-source=perfschema --username=pmm --password=pmm <name> 127.0.0.1:3306 MySQL Service added. Service ID : /service_id/a89191d4-7d75-44a9-b37f-a528e2c4550f Service name: ps-mysql
퍼포먼스 스키마를 사용한다면 –query-source 옵션에 쿼리 소스를 Perfschema에서 가져올 수 있습니다. 인스턴스 네임을 원하는 이름으로 등록하고자 한다면, <name>부분에 DB명을 넣어주면 됩니다.
MongoDB를 모니터에 등록하고자 한다면 절차는 똑같습니다. MongoDB 클러스터를 모니터링 하는 옵션과 더 자세한 사항은 Percona 홈페이지를 참고 하시면 됩니다.
$ pmm-admin add mongodb --username=pmm --password=pmm 127.0.0.1:27017
PostgreSQL을 등록하려면 몇가지 Setting을 해주는게 좋습니다.
pg_stat_statements 설정을 해야 slow query 모니터링 및 더 많은 정보를 가져올수 있습니다. (설정 방법 : https://rastalion.dev/archives/397)
$ yum install postgresql96-contrib $ vi postgresql.conf shared_preload_libraries = 'pg_stat_statements' track_activity_query_size = 2048 pg_stat_statements.track = all
postgresql<version>-contrib을 반드시 설치해주고, Shared_preload_libraries에 pg_stat_statements를 넣고 DB를 재구동 해줍니다. (pg_ctl stop / start)
Public schema에 확장기능을 설치합니다.
postgres=# CREATE EXTENSION pg_stat_statements SCHEMA public;
에이전트 등록 방법은 MySQL과 비슷합니다.
slow query를 모니터링 하고 싶다면, 에이전트 등록시에 –query-source=pgstatements 옵션을 추가 해줍니다.
# pmm-admin add postgresql --username=pmm --password=pmm postgres 127.0.0.1:5432 PostgreSQL Service added. Service ID : /service_id/28f1d93a-5c16-467f-841b-8c014bf81ca6 Service name: postgres
psql로 접속해서 track_io_timing 설정을 변경해줍니다. track_io_timing 설정이 활성화 된 경우에만 읽기 및 쓰기 시간 통계 캡처가 가능합니다.
postgres=# ALTER SYSTEM SET track_io_timing=ON; postgres=# SELECT pg_reload_conf();
Cacti나 다른 상용 모니터링 툴에 못지 않게 매우 뛰어난 화면 구성과 내용을 보여줍니다. 자빅스처럼 설정이 어렵지도 않습니다.
오픈소스 DB들 뿐만 아니라 Linux으로 된 VM 모니터링에도 사용할 수 있으니 PMM2는 꽤 좋은 선택이 될거라 봅니다.
혹시 레디스는 등록이 안될까요?
PMM은 레디스를 지원하지 않습니다.
프로메테우스와 그라파나 등을 이용해 직접 만드는걸 추천드립니다.