---
title: Habilitando e Monitorando pg_stat_statements no PostgreSQL com Telegraf
slug: aiops/habilitando-e-monitorando-pgstatstatements-no-postgresql-com-telegraf
docTags: 
createdAt: 2024-09-03T17:10:17.089Z
---

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.&#x20;

## 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):

:::BlockQuote
shared\_preload\_libraries = 'pg\_stat\_statements'
pg\_stat\_statements.track = all
:::

### 2. Reiniciar o PostgreSQL

Após alterar a configuração do PostgreSQL, reinicie o serviço para que a mudança tenha efeito:

:::CodeblockTabs
command

```linux
sudo systemctl restart postgresql
```
:::

### 3. 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:

:::CodeblockTabs
command

```linux
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:

:::CodeblockTabs
command

```linux
SELECT count(*) FROM pg_stat_statements;
```
:::

## Monitorando com Telegraf

### 1. Configuração do Telegraf&#x20;

Adicione as seguintes configurações ao arquivo de configuração do Telegraf para monitorar o PostgreSQL

**PostgreSQL Input Plugin:**

```yaml
[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:**

```yaml
[[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"

```

