Monitoramento de Banco de Dados com o PMM da Percona
O que é o PMM?
O Percona Monitoring and Management (PMM) é uma solução open source para observabilidade, monitoramento e gerenciamento de bancos de dados, com suporte a MySQL/MariaDB, PostgreSQL e MongoDB.
Ele integra Grafana e Prometheus, oferecendo uma visão centralizada e detalhada para nós, DBAs. Isso é extremamente útil, pois elimina a necessidade de instalar cada ferramenta separadamente, reunindo esses recursos em uma única interface prática.
O PMM fornece um painel unificado para acompanhar o desempenho dos bancos, detectar anomalias e prevenir problemas. Ele coleta métricas que vão desde o hardware até o nível de query, apresentando-as em dashboards intuitivos e acessíveis via web.
Principais recursos
- Monitoramento em tempo real: Dashboards personalizáveis com métricas detalhadas e alertas.
- Análise de queries: Identificação de consultas lentas e gargalos.
- Escalabilidade Suporte a ambientes on-premises, em nuvem ou híbridos.
- Backup e recuperação.
Instalação
A instalação do PMM consiste em duas etapas:
- Instalação do PMM Server: pode ser feita via container (Docker ou Podman), Helm, ou utilizando a própria OVA de máquina virtual oferecida pela Percona. Essa etapa configura todo o ambiente de observabilidade.
- Instalação do PMM Client: deve ser realizada nos servidores que você deseja monitorar.
Para o exemplo a seguir, faremos a instalação do PMM Server versão 3 (latest) utilizando um container Docker.
Container
Para instalar o container, de acordo com a própria documentação: Percona PMM Server Docker
- Fazer o pull da imagem do container
docker pull percona/pmm-server:3
- Criar um volume de dados persistente
docker volume create pmm-data
- Iniciar o container habilitando o volume de dados persistente
docker run --detach --restart always \
--publish 443:8443 \
-v pmm-data:/srv \
--name pmm-server \
percona/pmm-server:3
Explicação dos parâmetros:
docker run: Cria e inicia o container.--detachou-d: Executa o container em segundo plano, liberando o terminal.--restart always: Reinicia automaticamente o container caso ele pare ou o Docker seja reiniciado.--publish 443:8443ou-p 443:8443: Mapeia a porta 443 do container para a porta 8443 do host, permitindo acesso via HTTPS.-v pmm-data:/srv: Monta o volumepmm-datadentro do container no diretório/srv, garantindo persistência dos dados.--name pmm-server: Atribui o nomepmm-serverao container para facilitar sua identificação.percona/pmm-server:latest: Especifica a imagem e a versão do PMM Server a ser utilizada.
- Alterar a senha do usuário padrão
admin, se necessário
docker exec -t pmm-server change-admin-password <new_password>
Com isso, o PMM já estará acessível pelo navegador em:https://<IP_DO_HOST_DO_DOCKER>/graph/login
PMM Client
Com o PMM Server já instalado e configurado, é necessário configurar o pmm-client nos servidores que desejamos monitorar.
De acordo com a documentação oficial: PMM Client Setup, o primeiro passo é instalar o Percona Release e, a partir dele, instalar o pmm-client.
Há duas versões disponíveis para instalação: a 2 e a 3. Como a versão do servidor do PMM é a 3 (latest), utilizaremos essa também para o PMM client.
Em ambientes baseados em Debian/Ubuntu:
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
sudo apt update
sudo apt install -y pmm-client
Em ambientes baseados em Red Hat:
yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
percona-release enable pmm3-client
yum install -y pmm-client
Uma vez instalado o pmm-client, basta registrar o node ou servidor no PMM Server:
pmm-admin config --server-insecure-tls --server-url=https://admin:admin@X.X.X.X:443
Onde:
X.X.X.X: endereço do seu PMM Server.443: porta padrão utilizada pelo PMM Server.admin/admin: usuário e senha padrão do PMM (os mesmos usados para acessar a interface web, podendo ter sido alterados no primeiro login).
Observabilidade do MySQL
Para podermos monitorar o banco de dados em si, no caso do MySQL, de acordo com a documentação:
https://docs.percona.com/percona-monitoring-and-management/3/install-pmm/install-pmm-client/connect-database/mysql/mysql.html
Primeiramente, é necessário criar um usuário com as permissões adequadas para análise:
CREATE USER 'pmm'@'localhost' IDENTIFIED BY '<password>' WITH MAX_USER_CONNECTIONS 10;
GRANT SELECT, PROCESS, REPLICATION CLIENT, RELOAD, BACKUP_ADMIN ON *.* TO 'pmm'@'localhost';
No caso do MariaDB, a permissão
BACKUP_ADMINnão é necessária nos grants.
Com isso, já é possível iniciar o monitoramento do MySQL. Entretanto, para o Query Analytics (QAN)
(documentação), é necessário definir a fonte das consultas para o PMM Client, que pode ser:
performance_schema– Contém tabelas que armazenam informações sobre consultas executadas.- Slow Log – Registra consultas lentas.
No caso do Slow Log, para ambientes de produção, não é muito indicado, pois pode gerar diversos arquivos, aumentar o uso de recursos do servidor, causar maior consumo de I/O e exigir gerenciamento constante para evitar que os logs ocupem todo o espaço disponível.
Neste exemplo, utilizaremos o performance_schema como fonte para análise, definindo o parâmetro --query-source=perfschema.
Após criar o usuário e definir a fonte das queries, execute o comando abaixo para registrar o MySQL no PMM Server:
pmm-admin \
add mysql \
--query-source=perfschema \
--username=pmm \
--password=password \
--service-name=Servidor-MySQL
A saída será semelhante a:
MySQL Service added.
Service ID : 86f1070d-4d7e-4a7b-ac5f-6c1e96414b4d
Service name: Servidor-MySQL
Table statistics collection enabled (the limit is 1000, the actual table count is 483).
Explicação dos parâmetros:
add mysql: adiciona o serviço MySQL ao PMM.--query-source=perfschema: define operformance_schemacomo fonte de dados das queries.--username=pmm: Usuário utilizado para conexão.--password=password: Senha do usuário.--service-name=Servidor-MySQL: Nome atribuído ao serviço monitorado.
Também é possível incluir outros parâmetros, como --host e --port, para definir o host e a porta do MySQL. No entanto, como neste caso o banco monitorado está em localhost, esses parâmetros não foram utilizados.
Com essas configurações, o MySQL já estará sendo monitorado e disponível no PMM Server:

Observabilidade do PostgreSQL
No PostgreSQL, a configuração é um pouco diferente. De acordo com a documentação:
https://docs.percona.com/percona-monitoring-and-management/3/install-pmm/install-pmm-client/connect-database/postgresql.html#create-a-database-account-for-pmm
também é necessário criar um usuário para o PMM:
CREATE USER pmm WITH SUPERUSER ENCRYPTED PASSWORD 'password';
No arquivo pg_hba.conf, libere as conexões do usuário PMM apenas via localhost:
local all pmm md5
# TYPE DATABASE USER ADDRESS METHOD
O arquivo
pg_hba.conf, dependendo da distribuição Linux, fica nos seguintes diretórios:
- Debian/Ubuntu:
/etc/postgresql/<versão>/main- RHEL e derivados:
/var/lib/pgsql/<versão>/data(dentro doPGDATA)
A documentação recomenda o uso de SUPERUSER para garantir que o PMM tenha todas as permissões necessárias. No entanto, na minha opinião, é possível reduzir o nível de privilégios, concedendo apenas as permissões realmente utilizadas pelo PMM.
Por fim, recarregue a configuração do PostgreSQL:
su - postgres
psql -c "SELECT pg_reload_conf();"
E verifique se o usuário do PMM consegue se conectar localmente:
psql -U pmm postgres -c "\conninfo"
Com isso, já poderíamos monitorar o PostgreSQL. Porém, assim como no MySQL, é necessário definir a origem de onde o PMM irá coletar o Query Analytics (QAN).
No PostgreSQL, existem duas opções:
pg_stat_monitor: Extensão da Percona para análise de queries e planos de execução.pg_stat_statements: Registra as queries mais executadas e sumariza as informações.
No nosso caso, utilizaremos o pg_stat_statements.
Para isso, primeiro, vamos instalar o pacote postgresql-contrib:
- Debian/Ubuntu:
apt install -y postgresql-contrib
- RHEL e derivados:
yum install -y postgresql-contrib
Em seguida, adicionar as seguintes linhas ao postgresql.conf:
shared_preload_libraries = 'pg_stat_statements'
track_activity_query_size = 2048 # Aumenta o tamanho da string de query rastreada
pg_stat_statements.track = all # Rastreia todas as statements, incluindo as aninhadas
track_io_timing = on # Captura estatísticas de leitura/escrita
O arquivo
postgresql.conf, dependendo da distribuição Linux, fica nos seguintes diretórios:
- Debian/Ubuntu:
/etc/postgresql/<versão>/main- RHEL e derivados:
/var/lib/pgsql/<versão>/data(dentro do diretórioPGDATA)
Reiniciar o serviço do PostgreSQL:
systemctl restart postgresql
Por fim, criar a extensão no banco de dados:
psql -U postgres -d postgres -c "CREATE EXTENSION pg_stat_statements SCHEMA public;"
Com isso, adicionamos o serviço com o seguinte comando:
pmm-admin add postgresql \
--username=pmm \
--password=password \
--service-name=Servidor-PostgreSQL
A mensagem de retorno será a seguinte:
PostgreSQL Service added.
Service ID : 134ba66d-7f66-4acd-a333-f2034993a328
Service name: Servidor-PostgreSQL
Warning: Could not detect the pg_stat_monitor extension on your system. Falling back to the pg_stat_statements.
Neste caso, como não estamos utilizando o pg_stat_monitor, o PMM está configurando automaticamente o pg_stat_statements como fonte de monitoramento.
Com isso, já podemos verificar o PostgreSQL adicionado ao PMM Server:

Observabilidade do MongoDB
Assim como no MySQL e PostgreSQL, também é possível monitorar o MongoDB.
De acordo com a documentação:
https://docs.percona.com/percona-monitoring-and-management/3/install-pmm/install-pmm-client/connect-database/mongodb.html#compare-query-source-methods
Primeiro, é necessário criar uma role administrativa:
db.getSiblingDB("admin").createRole({
role: "pmmMonitor",
privileges: [
{
resource: { db: "", collection: "" },
actions: ["dbHash", "find", "listIndexes", "listCollections", "collStats", "dbStats", "indexStats"]
},
{
resource: { db: "", collection: "system.version" },
actions: ["find"]
},
{
resource: { db: "", collection: "system.profile" },
actions: ["dbStats", "collStats", "indexStats"]
}
],
roles: []
});
Em seguida, crie um usuário atribuindo essa role:
db.getSiblingDB("admin").createUser({
user: "pmm",
pwd: "<PASSWORD>", //Substituir pela senha
roles: [
{ db: "admin", role: "pmmMonitor" },
{ db: "local", role: "read" },
{ db: "admin", role: "clusterMonitor" },
{ db: "admin", role: "directShardOperations" }
]
});
Para podermos utilizar o MongoDB no QAN, o PMM oferece dois métodos para coleta de queries. A escolha depende dos requisitos e restrições do ambiente:
- Via MongoDB Profiler (método padrão para configurações simples com menos de 100 bancos de dados)
Principais vantagens:
- Coleta e análise de consultas em tempo real.
- Não requer acesso adicional ao sistema de arquivos.
- Funciona com serviços MongoDB gerenciados.
- Disponibilidade imediata dos dados após a ativação do profiler.
- Via Diagnostic Log (recomendado para ambientes de produção com mais de 100 bancos de dados, problemas de pool de conexão ou monitoramento de roteadores
mongos)
Principais vantagens:
- Nenhuma conexão direta ao banco de dados é necessária para coleta de métricas.
- Elimina completamente erros relacionados ao pool de conexão.
- Escala linearmente, independentemente da quantidade de bancos.
- Fornece dados analíticos de consulta idênticos aos do profiler tradicional.
No nosso exemplo, utilizaremos o profiler.
Edite o arquivo de configuração do MongoDB (geralmente localizado em /etc/mongod.conf) e adicione a seção operationProfiling.
Atenção: o YAML é sensível à indentação.
operationProfiling:
mode: all
slowOpThresholdMs: 200
Configurações explicadas:
mode: all: Coleta dados para todas as operações.slowOpThresholdMs: 200: Marca operações que excedam 200 ms como lentas.
Reinicie o serviço mongod (para sistemas com systemd):
systemctl restart mongod
Por fim, adicione o serviço do MongoDB ao PMM:
pmm-admin add mongodb \
--username=pmm \
--password=password\
--host=127.0.0.1 \
--port=27017 \
--enable-all-collectors \
--service-name=Servidor-mongodb
A mensagem de retorno será a seguinte:
MongoDB Service added.
Service ID : 229fd7ec-1937-4994-b702-7141889c05f2
Service name: Servidor-mongodb
Após isso, o serviço já estará disponível no PMM Server:

Utilização do PMM Server
Ao adicionar todos os serviços que desejamos monitorar no PMM Server, podemos visualizar, na aba Monitored DB Services, os tipos de bancos de dados que estão sendo monitorados.

A partir disso, é possível acompanhar o uso de recursos de hardware, rede e outros indicadores.
Há inúmeros tipos de dashboards e visualizações disponíveis para análise.

MySQL
A partir do momento em que adicionamos um serviço MySQL ao PMM, são liberados os seguintes dashboards na aba inicial:

Com isso, conseguimos monitorar desde os recursos do MySQL/MariaDB, como desempenho do banco de dados, alta disponibilidade, até informações específicas do InnoDB.
Exemplo do overview:

PostgreSQL
Assim como no MySQL, a partir do momento em que o PostgreSQL é adicionado ao PMM, são liberados os seguintes dashboards na aba inicial:

Com isso, conseguimos monitorar desde os recursos do PostgreSQL, como desempenho do banco de dados, clusters, alta disponibilidade e consultas (queries).
Exemplo do overview:

MongoDB
Assim como no MySQL e no PostgreSQL, a partir do momento em que o MongoDB é adicionado ao PMM, são liberados os seguintes dashboards na aba inicial:

Com isso, conseguimos monitorar desde os recursos do MongoDB, como desempenho do banco de dados, replica set, alta disponibilidade, WiredTiger e oplog.
Exemplo do overview:

QAN (Query Analytics)
No painel de Query Analytics (QAN), é possível visualizar todas as queries registradas no histórico de cada servidor, acompanhando seu load, quantidade de execuções, tempo de resposta e outros indicadores, de acordo com o tipo de banco de dados.
Exemplo:


Backup
Além do monitoramento dos bancos de dados, o PMM oferece uma aba para gerenciamento de backups, permitindo realizar backups de MySQL e MongoDB. As opções de armazenamento incluem S3 ou local (esta última disponível apenas para MongoDB). Documentação oficial

Conclusão
Há pouco tempo descobri o PMM da Percona e, em testes e laboratórios, ele se mostrou de grande valia, especialmente para nós, DBAs, que monitoramos inúmeros bancos de dados, seja via Zabbix, Grafana ou Prometheus. Com a descoberta e já utilização dele, muitos pontos de melhoria vieram à tona, e algumas características nos trouxeram uma visibilidade melhor dessa ferramenta, como:
- Redução de complexidade: Centraliza o monitoramento de múltiplos bancos, seja on-premise ou na nuvem, contando com apenas uma única ferramenta para gerenciar tudo.
- Melhoria de performance: Facilita a identificação da causa raiz de lentidões e permite agir proativamente na otimização das consultas.
- Open Source e gratuito: Sem custo de licença, com total transparência e apoio de uma comunidade ativa.
Este post tem como objetivo trazer visibilidade a essa ferramenta tão útil, que até pouco tempo não conhecíamos.
About author
Você pode gostar também
Compartilhando conhecimento em IA – IA não corrige bagunça, ela só acelera o estrago!
Se a casa está organizada, ela vira amplificador. Se está bagunçada, ela vira microfone aberto para o caos. O State of AI-Assisted Software Development 2025 crava o essencial: IA amplifica
Monitoramento Contínuo: A chave para uma infraestrutura de TI sustentável
Eventualmente, mesmo os sistemas e infraestruturas mais sustentáveis precisarão acompanhar os esforços para a prevenção. Por isso, o Continuous monitoring (monitoramento contínuo) é essencial. Técnicas de monitoramento contínuo costumam melhorar
Domine o Terraform e gerencie a Cloud com o novo curso da 4Linux
E aí, galera que curte DevOps! Preparados para colocar a mão na massa com o Terraform? Essa é a sua chance de dominar a maior ferramenta de IaC e gerenciar








