Habilitando e Monitorando pg_stat_statements no PostgreSQL com Telegraf
Este documento explica como habilitar o pg_stat_statements e configurar o Telegraf para monitorar as consultas lentas no PostgreSQL.
Introdução
O módulo pg_stat_statements fornece um meio de rastrear estatísticas de planejamento e execução de todas as instruções SQL executadas por um servidor PostgreSQL.
Habilitando pg_stat_statements
1. Modificar a Configuração do PostgreSQL
O módulo pg_stat_statements deve ser carregado adicionando pg_stat_statements a shared_preload_libraries no arquivo postgresql.conf, pois requer memória compartilhada adicional.
Para habilitar pg_stat_statements, modifique a seguinte configuração no arquivo de configuração do PostgreSQL (por exemplo, /etc/postgresql/12/main/postgresql.conf):
2. Reiniciar o PostgreSQL
Após alterar a configuração do PostgreSQL, reinicie o serviço para que a mudança tenha efeito:
sudo systemctl restart postgresql3. Criar a Extensão pg_stat_statements para Cada Banco de Dados
O pg_stat_statements rastreia apenas as estatísticas do banco de dados onde a extensão é criada. Portanto, crie a extensão para cada banco de dados:
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;4. Verificar pg_stat_statements
Para verificar se pg_stat_statements está funcionando, execute a seguinte consulta:
SELECT count(*) FROM pg_stat_statements;Monitorando com Telegraf
1. Configuração do Telegraf
Adicione as seguintes configurações ao arquivo de configuração do Telegraf para monitorar o PostgreSQL
PostgreSQL Input Plugin:
[inputs]
[[inputs.postgresql]]
address = "host=127.0.0.1 dbname=postgres user=<DB_USER> password=<DB_PASSWORD> sslmode=disable"
databases = [ "postgres",]
PostgreSQL Extensible Input Plugin:
[[inputs.postgresql_extensible]]
address = "host=127.0.0.1 dbname=postgres user=<DB_USER> password=<DB_PASSWORD> sslmode=disable"
databases = [ "postgres",]
[[inputs.postgresql_extensible.query]]
sqlquery = "select userid, query, calls, total_time, min_time, max_time, mean_time, stddev_time, rows from public.pg_stat_statements WHERE mean_time/1000 > 0.8;"
version = 901
withdbname = false
measurement = "pg_slow_queries"
tagValue = "query, userid"