Ir para o conteúdo principal

[SPIKE] Utilização do Grafana/Prometheus para monitoramento do SGBD PostgreSQL

O Grafana tem diferentes formas de se conectar com o banco de dados PostgreSQL para realizar consultas SQL e armazenar a informação em função do tempo, possibilitando assim mostrar gráficos históricos com informações relevantes. Uma das formas é a utilização do Prometheus que é definido no site oficial (https://prometheus.io/docs/introduction/overview/) como uma caixa de ferramentas para monitoramento de sistemas open source.

Para integrar o Prometheus com o PostgreSQL é necessário utilizar um exportador de mé

tricas predefinidas, este repositório está no site: https://github.com/prometheus-community/postgres_exporter. E pode ser utilizada uma imagem Docker dotada com todos os pré-requisitos de funcionamento para o exportador, essa imagem é: quay.io/prometheuscommunity/postgres-exporter.

Instalação do PostgreSQL Exporter:

git clone https://github.com/prometheus-community/postgres_exporter.git
cd postgres_exporter
make build

agora é necessário criar uma variável de ambiente chamada de: DATA_SOURCE_NAME e atribuir a ela a URL de conexão ao banco de dados, como por exemplo:

export DATA_SOURCE_NAME ="postgresql://postgres:password@localhost:5432/postgres?sslmode=disable"

por ultimo só é necessário iniciar o serviço

./postgres_exporter

instalação do Prometheus:

git clone https://github.com/prometheus/prometheus.git
cd prometheus
make build
./prometheus --config.file=your_config.yml

exemplo de configuração yml:

# my global config
global:
  scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "PostgreSQL"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["hostname:port"]

o hostname e a porta utilizada são os do serviço PostgreSQL Exporter.

Quando ambos estão configurados, procedemos a criar no Grafana o Datasource Prometheus, para isso é necessario o endereço ip e a porta do serviço Prometheus, quando a conexão é feita vamos ter todos os dados do PostgreSQL podendo exibi-los em graficos personalizados ou utilizar dashboards já criados pela comunidade como por exemplo:

https://grafana.com/grafana/dashboards/9628 

Captura de tela 2022-06-21 110554.png