[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: ["172.17.0.4:9187"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: