본문 바로가기

DB(SQL)/기타

[DB] PMM 구성하기 (DB Monitoring Tool)

반응형

2023년 4월에 하려고 했던걸 이제 해본다... 이번에는 할 수 있을까..?

 

Mariadb 모니터링 시스템으로 PMM(Percona Monitoring and Management)을 사용해보고자 한다.

Maria DB를 지원하는건 아니지만 mysql 로 호환이 가능하다고 해서 고고싱

 

percona에서 docs 도 제공해주고 메뉴얼도 다운로드 받을 수 있다..

 

메뉴얼 및 Docs 살짝 봤는데 엄청 설명이 잘되어 있다.

 

server와 client 를 깔아야한다.

 

PMM Server

server 최소 시스템 요구사항

디스크

데이터 보존 기간이 1주일로 설정된 모니터링되는 데이터베이스 노드당 약 1GB의 스토리지. 기본적으로 보존 기간 은 30일입니다.

메모리

모니터링되는 데이터베이스 노드당 최소 2GB. 메모리 사용량의 증가는 노드 수에 비례하지 않습니다. 예를 들어 20개 노드의 데이터는 16GB로 쉽게 처리할 수 있어야 합니다.

CPU

  •  SSE4.2Query Analytics에서 사용하는 타사 열 기반 데이터베이스인 ClickHouse의 요구 사항인 명령 세트를 지원.   CPU에 이 명령 세트가 없으면 Query Analytics를 사용할 수 없습니다.
  • MM 2.38.0부터 사용 중인 CPU 및 모든 가상화 계층이 x86-64-v2를 지원해야 하며 그렇지 않으면 컨테이너가 시작되지 않을 수 있습니다.

 

https://docs.percona.com/percona-monitoring-and-management/setting-up/server/index.html

예전에는, server를 docker image( https://hub.docker.com/r/percona/pmm-server )로만 제공을 해주었던것 같으나

메뉴얼 확인 결과 요새는 다양하게 제공해주는것 같다.

(docker, podman, helm, virtual appliance, amazon aws)

나는 그나마 익숙한 docker로 진행해 보았다.

 

Docker install

docker로 할때 유의 사항

  • Install Docker 1.12.6 or higher.
  • PMM 2.38.0 이상인 경우, 사용 중인 CPU(및 사용 중인 가상화 레이어)가 x86-64-v2를 지원하는지 확인하세요
      1. CPU 모델 확인: lscpu 명령의 출력 중 'Model name' 항목을 찾아 CPU 모델을 확인하세요. 모델 이름을 알게 되면, 인터넷에서 해당 CPU 모델과 x86-64-v2 지원 여부를 검색할 수 있습니다.
      2. 제조사 웹사이트: CPU 제조사의 공식 웹사이트에서 귀하의 CPU 모델에 대한 상세한 사양을 찾아보세요. 여기서 x86-64-v2 지원 여부를 확인할 수 있습니다.
      3. 기술 문서: 때때로 CPU 제조사는 자신들의 제품에 대한 상세한 기술 문서를 제공합니다. 이 문서에서 x86-64-v2 지원에 대한 정보를 찾을 수 있을 것입니다.

 

https://docs.docker.com/engine/install/ubuntu/

https://24hours-beginner.tistory.com/461

 

[Docker] Docker installation on Ubuntu 20.04

docs가 너무 잘되어있으니 왠만하면 Docs를 참고합시다. https://docs.docker.com/engine/install/ubuntu/ Install Docker Engine on Ubuntu docs.docker.com 1. sudo apt-get remove docker docker-engine docker.io containerd runc 2. sudo apt-get upd

24hours-beginner.tistory.com

 

데이터 저장 방법 선택

ppm server를 docker로 운영할때 데이터를 어떻게 관리할지 선택해야한다.

volume, data container, host directory 3가지 방법이 있다.

나는 volume을 생성해서 하는 방법을 했다.

  • RUN DOCKER WITH VOLUME
  • RUN DOCKER WITH DATA CONTAINER
  • RUN DOCKER WITH THE HOST DIRECTORY ( PMM 2.29.0. version and after)

 

PMM Image Pull

docker pull percona/pmm-server:2

 

> 참고로 docker image OS는 linux이다.

 

Create Volume

docker volume create pmm-data

volume 확인

 

docker run

docker run --detach --restart always \
--publish 443:443 \
-v pmm-data:/srv \
--name pmm-server \
percona/pmm-server:2

만약 443포트를 쓸 수 없다면 -p 4443:443 외부 접속 가능한 포트로 변경하여 시작해주면 된다.

-p 외부포트:내부포트

컨테이너 실행 확인

docker ps

 

자세한 docker run 설명

https://24hours-beginner.tistory.com/498

 

[Docker] Docker run

docker run의 기본 구조 기본 형식: docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 이미지 실행의 기본 메커니즘 설명 주요 옵션과 사용 예시 1. -d, --detach 사용했을 때: 컨테이너가 백그라운드에서 실행됩니다.

24hours-beginner.tistory.com

컨테이너 admin user password 변경

PMM versions 2.27.0 and 이후

docker exec -t pmm-server change-admin-password <new_password>

docker exec -t pmm-server change-admin-password amind123!

PMM versions 2.27.0 이전 버전

docker exec -t pmm-server bash -c 'grafana-cli --homepath /usr/share/grafana --configOverrides cfg:default.paths.data=/srv/grafana admin reset-admin-password newpass'

 

아래 사진 처럼 Admin password chagned successfully 뜨면 성공 (PMM versions 2.27.0  이후)

 

접속확인

https://서버주소:아까 실행한 포트
https://localhost:4443
https://127.168.0.0.225:4443
https://example.com:4443

 

아래 처럼 PMM 사용자 인터페이스 가 보인다.

id : admin

pw: 아까 입력한 admin password (admin123!)

 

 

PMM Client

https://docs.percona.com/percona-monitoring-and-management/setting-up/client/index.html

 

pmm 클라이언트 설정은 아래를 따른다

  • pmm 클라이언트 install
  • Create PMM account and set permissions.
  • Choose a data source:
    • Slow query log, or,
    • Performance Schema.
  • Configure:
    • Query response time,
    • Tablestats,
    • User statistics.
  • Add service.
  • Check the service.

 

 

PMM 클라이언트를 노드에 설치하고 PMM 서버에 등록하는 여러 가지 방법이 있습니다. 선택할 수 있는 옵션은 다음과 같습니다:

  1. 도커:
    • PMM 클라이언트를 도커 컨테이너로 실행합니다.
  2. 패키지 관리자:
    • 데비안 또는 레드햇 리눅스에서는 percona-release를 설치하고 리눅스 패키지 관리자 (apt / dnf)를 사용하여 PMM 클라이언트를 설치합니다.
    • 데비안 또는 레드햇에서는 .deb / .rpm PMM 클라이언트 패키지를 다운로드하여 수동으로 설치합니다.
  3. 바이너리 패키지:
    • 다른 리눅스 배포판의 경우, 일반 PMM 클라이언트 리눅스 바이너리를 다운로드하여 압축을 풉니다.

PMM 클라이언트를 설치한 후에는 다음과 같이 해야 합니다:

  • 노드를 PMM 서버에 등록: pmm-admin config 명령을 사용하여 노드를 PMM 서버에 등록하고, 서버의 URL 및 필요한 다른 옵션을 제공합니다.
  • 서비스 유형에 따라 구성 및 추가: 노드에서 실행 중인 데이터베이스 또는 서비스의 유형에 따라 pmm-admin add 명령을 사용하여 이러한 서비스를 구성하고 모니터링을 시작합니다.
  • 필요한 경우 관리 작업: 필요한 경우 pmm-admin 명령을 사용하여 노드의 등록을 취소하거나 서비스를 제거하거나 PMM 클라이언트를 완전히 제거할 수 있습니다.

정확한 명령과 절차는 사용 중인 PMM 클라이언트의 특정 버전과 노드의 운영 체제에 따라 약간 다를 수 있습니다. 가장 정확하고 자세한 지침은 최신 PMM 문서를 참조하는 것이 좋습니다.

 

나는 도커로 진행하였다.

https://docs.percona.com/percona-monitoring-and-management/setting-up/client/index.html#docker

 

PMM Client docker image pull

docker pull percona/pmm-client:2

image를 이용한 Volume 저장소 생성

이미지를 템플릿으로 사용하여 이미지가 업데이트될 때 로컬 데이터를 보존하는 영구 데이터 저장소를 만듭니다.

docker create \
--volume /srv \
--name pmm-client-data \
percona/pmm-client:2 /bin/true

Docker run

컨테이너를 실행하여 설정 모드에서 PMM 에이전트를 시작합니다.

X.X.X.XPMM 서버의 IP 주소로 설정합니다.

(PMM 에이전트는 콘솔에만 로그를 기록하므로 docker --detach 옵션을 사용하지 마십시오.)

PMM_SERVER=X.X.X.X:443
docker run \
--rm \
--name pmm-client \
-e PMM_AGENT_SERVER_ADDRESS=${PMM_SERVER} \
-e PMM_AGENT_SERVER_USERNAME=admin \
-e PMM_AGENT_SERVER_PASSWORD=admin \
-e PMM_AGENT_SERVER_INSECURE_TLS=1 \
-e PMM_AGENT_SETUP=1 \
-e PMM_AGENT_CONFIG_FILE=config/pmm-agent.yaml \
--volumes-from pmm-client-data \
percona/pmm-client:2

PMM_SERVER=192.168.0.0.1:4443
docker run \
--rm \
--name pmm-client \
-e PMM_AGENT_SERVER_ADDRESS=${PMM_SERVER} \
-e PMM_AGENT_SERVER_USERNAME=admin \
-e PMM_AGENT_SERVER_PASSWORD=admin123! \
-e PMM_AGENT_SERVER_INSECURE_TLS=1 \
-e PMM_AGENT_SETUP=1 \
-e PMM_AGENT_CONFIG_FILE=config/pmm-agent.yaml \
--volumes-from pmm-client-data \
percona/pmm-client:2

 

docker --detach 을 사용하지 않기때문에 아래처럼 멈춰 있다. (실행은 되고 있는 중) (빠져나가려면 Ctrl + C)

그래서 screen 으로 하는걸 추천해본다. (이게 정상적인건지는 잘 모르겠다.)

02T08:18:57.521Z\tinfo\tVictoriaMetrics/lib/promscrape/scraper.go:430\tstatic_configs: added targets: 4, removed targets: 0; total targets: 4" agentID=/agent_id/33feb0c5-9c8a-4ab0-80f7-53a5591ed087 component=agent-process type=vm_agent time="2024-01-02T08:18:58.493+00:00" level=info msg="Sending status: RUNNING (port 42000)." agentID=/agent_id/33feb0c5-9c8a-4ab0-80f7-53a5591ed087 component=agent-process type=vm_agent

 

확인하기

그리고 정상적으로 잘 실행되고 있는지 알고싶다면

가장 쉬운 방법은 PMM 사용자 인터페이스로 들어가서 반영된게 있는지 보면 된다.

근데 나는 mariadb라서 그런가.. 호환이 안된건지 잘못한건지 이상하다.. 다시 해봐야지 ㅠㅠ

뭔가 보인다면 1차적으로 된것이다 Database를 설정하러 가자.

 

두번째 방법은

스크린으로 돌리던가 등으로 인하여

아래 명령어를 통해 아래처럼 현황을 확인한다.

ps -aux | grep pmm-agent
ps -aux | grep pmm-agent
root 2693746 0.0 0.0 2834172 34232 ? Sl 16:19 0:01 /usr/sbin/pmm-agent --config-file=/usr/local/percona/pmm2/config/pmm-agent.yaml
root 2722332 0.0 0.0 9676 4608 pts/1 S+ 17:27 0:00 sudo docker run --rm --name pmm-client -e PMM_AGENT_SERVER_ADDRESS=192.0.0.1:4443 -e PMM_AGENT_SERVER_USERNAME=admin -e PMM_AGENT_SERVER_PASSWORD=admin123! -e PMM_AGENT_SERVER_INSECURE_TLS=1 -e PMM_AGENT_SETUP=1 -e PMM_AGENT_CONFIG_FILE=config/pmm-agent.yaml --volumes-from pmm-client-data percona/pmm-client:2
root 2722333 0.0 0.0 2732592 24744 pts/1 Sl+ 17:27 0:00 docker run --rm --name pmm-client -e PMM_AGENT_SERVER_ADDRESS=
192.0.0.1:4443
-e PMM_AGENT_SERVER_USERNAME=admin -e PMM_AGENT_SERVER_PASSWORD=
admin123! -e PMM_AGENT_SERVER_INSECURE_TLS=1 -e PMM_AGENT_SETUP=1 -e PMM_AGENT_CONFIG_FILE=config/pmm-agent.yaml --volumes-from pmm-client-data percona/pmm-client:2
1002 2722394 0.0 0.0 1229416 4028 ? Ssl 17:27 0:00 /usr/local/percona/pmm2/bin/pmm-agent-entrypoint
1002 2722461 0.0 0.0 2113276 29892 ? Sl 17:27 0:00 pmm-agent run
root 2731042 0.0 0.0 6432 2456 pts/0 S+ 17:49 0:00 grep --color=auto pmm-agent

 

Docker run Error

1. docker: Error response from daemon: No such container: pmm-client-data.

아까 진행한 저장소 볼륨과 같이 만든 container가 제대로 안만들어진것이다.

아래와 같이 ps -al 했을 때 나오는지 확인해 보자.

sudo docker ps -al
CONTAINER ID   IMAGE                  COMMAND                  CREATED          STATUS    PORTS     NAMES
14e88566746a   percona/pmm-client:2   "/usr/local/percona/…"   53 minutes ago   Created             pmm-client-data

다시 진행해보자. sudo 등으로 인하여 권한 에러가 나서 안만들어진것일 수 있다.

 

2. Failed to register pmm-agent on PMM Server: Post "https://127.0.0.1:4443/v1/management/Node/Register": dial tcp 127.0.0.1:4443: connect: connection refused.

주소를 잘못 적었을 수 있다. 외부 접속이 가능한 주소로 적어주어야하는듯 하다. 주소를 한번 더 확인하자.

 

Database 접속 계정 생성 Create a database account for PMM

pmm 이 db에 접속할 수 있도록 권한을 주도록 하자.

 

슈퍼유저까지는 필요 없고, 아이디가 pmm이고, 비밀번호가 pass면 된다고 한다.

아래에서 유의할것은

client가 다른곳에 설치되어있다면 접속 주소 변경해줄것

mariadb 에는 backup_admin 권한이 없으니 5.7 버전 기준으로 권한을 부여할것

 

On MySQL 8.0

CREATE USER 'pmm'@'127.0.0.1' IDENTIFIED BY 'pass' WITH MAX_USER_CONNECTIONS 10;
GRANT SELECT, PROCESS, REPLICATION CLIENT, RELOAD, BACKUP_ADMIN ON *.* TO 'pmm'@'127.0.0.1';

On MySQL 5.7 or mariadb

CREATE USER 'pmm'@'127.0.0.1' IDENTIFIED BY 'pass' WITH MAX_USER_CONNECTIONS 10;
GRANT SELECT, PROCESS, REPLICATION CLIENT, RELOAD ON *.* TO 'pmm'@'127.0.0.1';

 

데이터 소스 선택 (DB)

mysql 또는 mariadb 로 진행할 경우

Slow query log 및 Performance Schema 선택

둘중 하나를 선택해야하나보다.

 

slow query log를 선택하고 싶으나 mariadb 10.0+ 버전인 경우 Perfomace Schema 를 추천하여 그걸로 진행하였다.

 

데이터 소스 장단점

   Benefits  Drawbacks
Slow query log 1. 좀 더 자세히.
2. 리소스 영향을 줄입니다(Percona Server for MySQL의 쿼리 샘플링 기능 사용).
1. PMM 클라이언트는 데이터베이스 서버와 동일한 호스트에 있거나 느린 쿼리 로그에 액세스할 수 있어야 합니다.
2. 로그 파일이 늘어나므로 적극적으로 관리해야 합니다.
Performance Schema 1. 분석 속도가 빨라집니다.
2. 최신 버전의 MySQL에서는 기본적으로 활성화됩니다.
1. 세부사항이 적습니다.

DB별 데이터 소스 추천

Perfomace Schema 관련 설정

https://docs.percona.com/percona-monitoring-and-management/setting-up/client/mysql.html#performance-schema

적용가능한 버전

 

Variable Value Description
performance_schema ON Enables Performance Schema metrics. This is the default in MySQL 5.6.6 and higher.
성능 스키마 측정항목을 활성화합니다. 이는 MySQL 5.6.6 이상에서 기본값입니다.
performance-schema-instrument 'statement/%=ON' Configures Performance Schema instruments.
성능 스키마 도구를 구성합니다.
performance-schema-consumer-statements-digest ON Configures the statements-digest consumer.
statements-digest소비자를 구성합니다.
innodb_monitor_enable all Enables InnoDB metrics counters.
InnoDB 메트릭 카운터를 활성화합니다.
performance_schema.setup_instruments 'statement/%' MariaDB 인스턴스 버전 10.5.7 이하
계측된 개체 클래스 목록입니다.

 변경 후 database 재시작(configuration file 수정 시), pmm-agent 재시작 필요

 

나는 Configuration file 을 변경한 후 database를 재시작하였다.

Configuration file은 설치방법에 따라 다르나 보통 아래 경로에 많이 있다.

나같은 경우 /etc/mysql/mariadb.conf.d/50-server.cnf 에 [mysqld] 아래에 속성들을 추가하였다.

항목이 있을 경우 수정할 것.

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /etc/mysql/mariadb.cnf
  4. /etc/mysql/conf.d/
  5. ~/.my.cnf (사용자 홈 디렉토리의 숨겨진 파일)

Examples

  • Configuration file.
    performance_schema=ON
    performance-schema-instrument='statement/%=ON'
    performance-schema-consumer-statements-digest=ON
    innodb_monitor_enable=all
  • Session.
    (performance_schema cannot be set in a session and must be set at server start-up.)
    (performance_schema는 세션 내에서 설정할 수 없으며, 서버 시작 시 설정해야 합니다.)
  • UPDATE performance_schema.setup_consumers
    SET ENABLED = 'YES' WHERE NAME LIKE '%statements%';
    SET GLOBAL innodb_monitor_enable = all;
    

 

PMM Service 등록

https://docs.percona.com/percona-monitoring-and-management/setting-up/client/mysql.html#add-service

1. 톱니바퀴 > Add service 클릭

서버와 클라이언트 설정이 끝이 났다면

서비스를 등록해줘야한다. 대시보드에 들어간 후 톱니바퀴 > Add service를 눌러 입력해준다.

 

2. DB 선택

 3. database 정보입력

user명은 아까만든 pmm

 

TLS 설정 (글쓴이는 패스)

MySQL 인스턴스가 TLS를 사용하도록 구성된 경우 데이터베이스 연결에 TLS 사용 확인란을 클릭하고 TLS 인증서와 키를 입력합니다.

 

조회

대시보드 가보면 이제 조회 되는것을 확인할 수 있다.

 

 

참고

포트

설정 하지 않을 경우 그때그때마다 포트 설정에 따라 다르겠지만

pmm 에서 사용되는 port들이다. 참고하자.

(80, 443, 7771, 7772, 7773, 7777, 8428, 42000 - 51999)

 

PMM이 올바르게 작동하려면 시스템의 방화벽이 이 포트들에서 TCP 트래픽을 허용해야 합니다 (UDP는 필요 없습니다).

번역

더보기



| PMM 구성 요소 | TCP 포트 | 방향 | 설명 |
| ------------- | -------- | ---- | ---- |
| PMM 서버      | 80       | 양방향 | HTTP 서버, gRPC를 위해 HTTP 및 웹 인터페이스 위에 사용됩니다 (불안전하니 주의해서 사용하세요). |
| PMM 서버      | 443      | 양방향 | HTTPS 서버, gRPC를 위해 HTTPS 및 웹 인터페이스 위에 사용됩니다 (안전하며, SSL 인증서 사용을 강력히 권장합니다). |

기타 포트들:

| PMM 구성 요소 | TCP 포트 | 방향 | 설명 |
| ------------- | -------- | ---- | ---- |
| PMM 서버      | 7771     | 양방향 | gRPC, pmm-agent, pmm-admin 사이의 통신에 사용됩니다. |
| PMM 서버      | 7772     | 나가는 | HTTP1 서버, logs.zip 같은 오래된 링크에 사용됩니다. |
| PMM 서버      | 7773     | 나가는 | 디버깅용. |
| pmm-agent     | 7777     | 나가는 | 기본 pmm-agent 리슨 포트. |
| vm-agent      | 8428     | 양방향 | VictoriaMetrics 포트. |
| pmm-agent     | 42000 - 51999 | 들어오는 | pmm-agent 연결 에이전트의 기본 범위. |

반응형