Você já olhou pra alguém e pensou: O que passa na cabeça dela?
Pois é, esse mesmo pensamento é o que separa um “apagador de incêndio” de um profissional focado em alta performance e disponibilidade. Mas ao invés de olharmos o que se passa na cabeça de alguém, precisamos entender o que está acontecendo em nosso ambiente. Entender como nosso ambiente está se comportando por baixo do capô, nos permite enxergar onde está bom, onde está ruim e o que precisa ser feito de forma analítica e certeira.
É com isso em mente que vou demonstrar como configurar uma solução de monitoramento completa e fácil de implementar que transformou a performance do meu MySQL e me deu o controle total do ambiente.
Abordaremos os seguintes tópicos:
- PMM: O que é o Percona Monitoring and Management
- O Setup: Como subir o PMM Server via Docker (rápido e indolor).
- O Agente: Instalando o PMM Client no nó do MySQL.
- O Raio-X: Analisando os Dashboards.
O que é o Percona Monitoring and Management
O Percona Monitoring and Management (PMM) é uma ferramenta open source completa para observabilidade e gerenciamento do MySQL e sua infraestrutura. Com ele, conseguimos monitorar o serviço de banco de dados e o hardware de forma integrada. O grande diferencial é o Query Analytics (QAN), que permite identificar gargalos e realizar o tuning de queries de forma prática e assertiva.
Como subir o PMM Server via Docker (rápido e indolor)
Para subirmos o PMM, primeiro é necessário ter o Docker instalado, e essa instalação não será abordada aqui, mas deixarei um link para documentação: Install | Docker Docs.
Com o Docker instalado, vamos criar um YAML para o Docker Compose para facilitar a organização e configuração. Nesse exemplo, criaremos um arquivo no caminho ~/pmm-server/docker-compose.yml com o seguinte código:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
services: pmm-server: image: percona/pmm-server:3 container_name: pmm-server restart: unless-stopped ports: - "80:8080" - "443:8443" volumes: - pmm-data:/srv - ./ssl/certificate.crt:/srv/nginx/certificate.crt:ro - ./ssl/certificate.key:/srv/nginx/certificate.key:ro environment: - PMM_DATA_RETENTION=2160h networks: - pmm-net volumes: pmm-data: networks: pmm-net: driver: bridge |
Pontos de Atenção:
- Retenção de Dados: O parâmetro PMM_DATA_RETENTION define por quanto tempo as métricas serão guardadas. Lembre-se: quanto maior o tempo, mais rápido o volume de dados cresce. Fique atento ao espaço em disco!
- Segurança (SSL): Apontamos os arquivos .crt e .key dentro da pasta ~/pmm-server/ssl. Embora opcional, utilizar SSL é simples e aumenta muito a segurança. Caso não queira usar agora, basta comentar ou remover as linhas de volumes referentes ao SSL.
- Versão: No exemplo, utilizamos o pmm-server:3. Esta versão é a recomendada para tirar o máximo proveito do MySQL 8.0 ou superior. Caso o seu workload ainda seja focado em MySQL 5.7, a utilização do pmm-server:2 ainda é adotada pela estabilidade com versões legadas mas é importante ressaltar que a versão 2 do PMM não recebe mais suporte oficial da Percona.
Atenção: Embora a utilização do pmm-server:2 ainda seja comum em ambientes legados (MySQL 5.7), é importante ressaltar que a versão 2 do PMM não recebe mais suporte oficial da Percona. Para novos setups, foque sempre na versão 3 para garantir patches de segurança e novas funcionalidades.
Caso opte por utilizar o pmm-server:2, as portas precisam ser alteradas de 80:8080 e 443:8443 para 80:80 e 443:443.
A estrutura fica assim:
~/
└── pmm-server/
├── docker-compose.yml
└── ssl/
├── certificate.crt
└── certificate.key
Com essa estrutura, já estamos prontos para subir o container já comunicando via HTTPS. Agora, basta rodarmos o comando:
|
1 |
docker compose up -d |
Em alguns segundos, o PMM estará rodando. Acesse pelo navegador usando o IP ou DNS do servidor. O usuário e senha padrão é admin/admin. No primeiro login, o sistema solicitará a troca da senha.
Para iniciar a sessão, o usuário e senha padrão é “admin”. Ao logar, ele irá solicitar uma nova senha. Após alteração, seremos redirecionados a home.
Viu, bem fácil né ? Em minutos, temos o servidor pronto para receber conexões das nossas instâncias MySQL.
Instalando o PMM Client no nó do MySQL
Agora precisamos fazer o servidor do MySQL se comunicar com o PMM. Para isso, instalaremos o PMM Client (versão 2 ou 3), dependendo da versão do PMM Server que você escolheu no passo anterior. Como no nosso exemplo utilizamos a v3, seguiremos com a instalação do PMM Client 3. Deixarei os links de documentação de ambas versões abaixo:
- PMM Client 3: Install with Package Manager – Percona Monitoring and Management
- PMM Client 2: Set up PMM Client – Percona Monitoring and Management
Configuração de repositórios e instalação:
Debian-based:
|
1 2 3 4 5 6 7 8 |
#Repositório 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 #Instalação sudo apt update sudo apt install -y pmm-client |
Red Hat-based:
|
1 2 3 4 5 6 |
#Repositório yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm percona-release enable pmm3-client #Instalação yum install -y pmm-client |
Após instalar, verificamos se está funcionando:
|
1 |
pmm-admin --version |
A saída deve ser algo como:
|
1 2 3 4 5 |
ProjectName: pmm-admin Version: 3.6.0 PMMVersion: 3.6.0 Timestamp: 2026-02-03 13:07:16 (UTC) FullCommit: 649827bf9fdd5e4208934bd19f24d470ab91c4ad |
Tudo pronto para conectarmos no PMM Server. Podemos iniciar a conexão com o seguinte comando abaixo:
|
1 |
pmm-admin config --server-url=https://admin:MysqlBrasil123@pmm-server:443 --server-insecure-tls --node-name=Servidor-MySQL --force |
- –server-url: Composto por https://usuario:senha@host:porta. Você pode usar o usuário admin (com a senha que alteramos no primeiro login) ou um usuário dedicado.
- –server-insecure-tls: Essencial se você estiver usando certificados autoassinados ou sem SSL válido, para que o agente ignore o aviso de segurança e estabeleça a conexão.
- –force: Garante que qualquer configuração anterior seja sobrescrita, evitando conflitos durante o setup.
A saída do comando deve ser algo como:
|
1 2 3 4 5 6 7 8 9 |
Checking local pmm-agent status... pmm-agent is running. Registering pmm-agent on PMM Server... Registered. Configuration file /usr/local/percona/pmm2/config/pmm-agent.yaml updated. Reloading pmm-agent configuration... Configuration reloaded. Checking local pmm-agent status... pmm-agent is running. |
Isso significa que nosso servidor já está sendo monitorado pelo PMM Server e podemos visualizar ele em Inventory > Nodes:
Como vemos na imagem, o Status e Monitoring estão ‘Up’ e “OK”. Isso significa que deu tudo certo e nosssa infraestrutura já está sendo monitorada. Para vermos os dados, basta irmos em Operating system e selecionarmos algum Dashboard. Dentro do Dashboard, basta selecionarmos o Node Name que adicionamos e os dados serão filtrados para o Node Name selecionado.
Agora, para conectarmos o PMM Client ao serviço do MySQL, precisamos de um usuário dedicado a essa função. Por isso iremos rodar os seguintes comandos:
|
1 2 |
CREATE USER 'pmm'@'localhost' IDENTIFIED BY 'MysqlBrasil123' WITH MAX_USER_CONNECTIONS 10; GRANT SELECT, PROCESS, REPLICATION CLIENT, RELOAD ON *.* TO 'pmm'@'localhost'; |
Importante: Criamos o usuário para acessar via localhost porque instalamos o PMM Client diretamente no servidor do MySQL.
Com o usuário criado, podemos fazer a conexão do PMM Client e o MySQL:
|
1 |
pmm-admin add mysql --username=pmm --password=MysqlBrasil123 --query-source=slowlog --host=localhost --port=3306 MySQL-Brasil |
A saída do comando será algo como:
|
1 2 3 4 5 |
MySQL Service added. Service ID : 4e2691b3-4803-499c-b562-4d2f750c2885 Service name: MySQL-Brasil Table statistics collection enabled (the limit is 1000, the actual table count is 330). |
E com isso, temos nosso servidor e serviço de banco de dados sendo monitorado! Assim como no inventário do Node, o serviço do MySQL também deve apresentar o Status e Monitoring como ‘Up’ e ‘OK’. Os dados podem demorar alguns minutos para aparecerem nos gráficos.
Fique atento: No caso do MySQL, o monitoramento pode apresentar ‘Failed’ caso o Agente não consiga acessar o arquivo de log ou se o banco estiver inacessível. Recomendo fortemente ativar o Slow Query Log para habilitar o Query Analytics (QAN). É através dele que você conseguirá identificar as queries mais custosas e realizar o tuning de performance de forma precisa.
O Raio-X está pronto!
A partir de agora, você parou de tentar adivinhar o que está acontecendo e passou a enxergar a realidade. Ter o PMM configurado é como acender a luz em um quarto escuro: aqueles picos de CPU inexplicáveis ou lentidões misteriosas agora tem nome, sobrenome e uma query específica associada a eles.
Este é apenas o primeiro passo para um ambiente resiliente e de alta performance. Com esses dados em mãos, o seu próximo desafio é o Tuning: ajustar cada parafuso do seu MySQL baseando-se em fatos, não em suposições.











