Pesquisa de site

Como monitorar PostgreSQL com Prometheus e Grafana no Ubuntu 22.04


Neste tutorial, você configurará as plataformas de monitoramento Prometheus e Grafana para monitorar o servidor de banco de dados PostgreSQL. Você instalará e configurará o postgres_exporter para coletar matrizes do servidor PostgreSQL e expô-las ao servidor Prometheus. Ao final deste tutorial, você configurará o monitoramento do painel para o servidor PostgreSQL por meio da plataforma de visualização de dados Grafana.

Pré-requisitos

Para concluir este tutorial, você precisará dos seguintes requisitos:

  • Um servidor com Prometheus e Grafana instalados em cima dele.
  • Um servidor de destino com um servidor de banco de dados PostgreSQL instalado.
  • Um usuário não root com privilégios de administrador sudo/root.

Abaixo estão alguns guias para a instalação de cada componente.

Como instalar a plataforma de monitoramento Prometheus e Grafana no servidor Ubuntu 22.04.
Como instalar o servidor de banco de dados PostgreSQL no servidor Ubuntu 22.04.

Agora vamos começar quando todos os pré-requisitos estiverem concluídos e em vigor.

Configuração do servidor PostgreSQL

O servidor PostgreSQL fornece dois métodos diferentes de criptografia de senha: md5 e scram-sha-256. Ambas as criptografias de senha podem ser configuradas através do arquivo de configuração do PostgreSQL 'postgresql.conf'.

Nesta etapa, você configurará o PostgreSQL para usar a criptografia de senha 'scram-sha-256'.

Este exemplo usa o servidor PostgreSQL v14 instalado em um sistema Ubuntu, portanto, os arquivos de configuração do PostgreSQL são armazenados no diretório '/etc/postgresql/14/main'.

Vá para o diretório de trabalho '/etc/postgresql/14/main' e abra o arquivo de configuração 'postgresql.conf' através do comando do editor nano.

cd /etc/postgresql/14/main
sudo nano postgresql.conf

Remova o comentário da opção 'password_encryption' e altere o valor para 'scram-sha-256'.

password_encryption = scram-sha-256     # scram-sha-256 or md5

Salve o arquivo e saia do editor quando terminar.

Em seguida, abra o arquivo de configuração 'pg_hba.conf' por meio do comando do editor nano abaixo. O arquivo 'pg_hba.conf' é a configuração onde os métodos de autenticação por senha são definidos para hosts ou endereços IP.

sudo nano pg_hba.conf

Altere os métodos de autenticação padrão do host '127.0.0.1/32' e '::1/128' para 'scram-sha-256 >'. Com isso, o método de autenticação 'scram-sha-256' será utilizado para cada conexão do cliente ao servidor PostgreSQL '127.0.0.1'.

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256

Salve e saia do editor quando terminar.

Por último, execute o utilitário de comando systemctl abaixo para reiniciar o serviço PostgreSQL e aplicar as alterações.

sudo systemctl restart postgresql

Com o servidor PostgreSQL configurado, em seguida você instalará o 'postgres_exporter' que permite coletar métricas do servidor PostgreSQL.

Baixando postgres_exporter

O 'postgres_exporter' é um exportador prometheus para as métricas do servidor PostgreSQL. Ele suporta várias versões do PostgreSQL, como 9.4, 9.5, 9.6, 10, 11, 12, 13 e 14. O 'postgres_exporter' é um aplicativo de arquivo binário único, escrito principalmente em Go.

Você fará download do 'postgres_exporter' nestas etapas no servidor PostgreSQL.

Para começar, execute o comando abaixo para criar um novo usuário de sistema 'postgres_exporter' em seu servidor PostgreSQL.

sudo useradd -M -r -s /sbin/nologin postgres_exporter

Depois disso, baixe o arquivo binário ‘postgres_exporter’ através do comando wget abaixo. Certifique-se de verificar a página 'postgres_exporter' do GitHub para obter a versão mais recente do 'postgres_exporter'. No momento em que este artigo foi escrito, a versão mais recente do postgres_exporter era v0.12.

wget https://github.com/prometheus-community/postgres_exporter/releases/download/v0.12.0-rc.0/postgres_exporter-0.12.0-rc.0.linux-amd64.tar.gz

Em seguida, execute o comando tar abaixo para extrair o pacote postgres_exporter. Em seguida, mova o diretório extraído do postgres_exporter para '/opt/postgres_exporter'.

tar xvf postgres_exporter*.tar.gz
mv postgres_exporter*/ /opt/postgres_exporter

Por último, verifique a lista de arquivos e diretórios no diretório ‘postgres_exporter’. Você deverá ver que o binário 'postgres_exporter' está disponível.

ls /opt/postgres_exporter

Com o arquivo binário 'postgres_exporter' baixado, você configurará o 'postgres_exporter' para coletar métricas do servidor PostgreSQL.

Configurando postgres_exporter

Nesta etapa, você configurará o 'postgres_exporter' para coletar métricas do PostgreSQL, e isso pode ser feito definindo o usuário e a senha do PostgreSQL. Você também instalará e configurará o serviço systemd para o 'postgres_exporter'.

Com o 'postgres_exporter', você pode expor métricas para todos os bancos de dados disponíveis no servidor PostgreSQL ou pode expor bancos de dados específicos que deseja monitorar. Você também pode usar o modo SSL seguro ou o modo não SSL.

Mova o diretório de trabalho atual para '/opt/postgres_exporter'. através do comando cd abaixo.

cd /opt/postgres_exporter

Agora crie um novo arquivo '.env' usando o comando do editor nano abaixo.

nano .env

Adicione as seguintes linhas ao arquivo. Além disso, certifique-se de alterar os detalhes do usuário, senha e host do PostgreSQL. Com este arquivo '.env', você coletará e coletará métricas do PostgreSQL de todos os bancos de dados disponíveis. Você também pode coletar métricas de um banco de dados PostgreSQL específico e ajustar o arquivo de configuração a seguir.

# Format
#DATA_SOURCE_NAME=postgresql://username:password@localhost:5432/postgres?sslmode=disable
# Monitor all databases via postgres_exporter
DATA_SOURCE_NAME="postgresql://postgres:strongpostgrespassword@localhost:5432/?sslmode=disable"
# Monitor specific databases on the PostgreSQL server
# DATA_SOURCE_NAME="postgresql://username:password@localhost:5432/database-name?sslmode=disable"

Salve o arquivo e saia do editor quando terminar.

Em seguida, execute o comando chown abaixo para alterar a propriedade do diretório '/opt/postgres_exporter' para o usuário 'postgres_exporter'.

sudo chown -R postgres_exporter: /opt/postgres_exporter

Depois disso, execute o comando abaixo para criar um novo arquivo de serviço systemd '/etc/systemd/system/postgres_exporter.service'. Com isso, você pode gerenciar facilmente o 'postgres_exporter' através do utilitário de comando systemctl.

sudo tee /etc/systemd/system/postgres_exporter.service<<EOF
[Unit]
Description=Prometheus exporter for Postgresql
Wants=network-online.target
After=network-online.target
[Service]
User=postgres_exporter
Group=postgres_exporter
WorkingDirectory=/opt/postgres_exporter
EnvironmentFile=/opt/postgres_exporter/.env
ExecStart=/opt/postgres_exporter/postgres_exporter --web.listen-address=:9187 --web.telemetry-path=/metrics
Restart=always
[Install]
WantedBy=multi-user.target
EOF

Agora execute o comando systemctl abaixo para recarregar o gerenciador systemd e aplicar as alterações.

sudo systemctl daemon-reload

Depois que o gerenciador systemd for recarregado, inicie e habilite o serviço ‘postgres_exporter’ por meio do utilitário de comando systemctl abaixo.

sudo systemctl start postgres_exporter
sudo systemctl enable postgres_exporter

O 'postgres_exporter' deve estar em execução e extrair métricas do servidor PostgreSQL. Além disso, ele deve estar habilitado e será executado automaticamente na inicialização.

Por último, execute o comando abaixo para verificar o status do serviço 'postgres_exporter'. Além disso, certifique-se de que 'postgres_exporter' esteja em execução e ativado.

sudo systemctl status postgres_exporter

Você receberá uma saída semelhante a esta: o serviço 'postgres_exporter' está em execução e ativado.

Neste ponto, o 'postgres_exporter' está sendo executado na porta TCP padrão '9187' no servidor PostgreSQL. Isso expõe as métricas do PostgreSQL ao servidor Prometheus, mas antes disso, você também precisará configurar o firewalld no servidor PostgreSQL.

Configurando Firewall

Nesta etapa, você configurará o firewall para abrir a porta padrão de 'postgres_exporter' - TCP 9187. Depois disso, você verificará se as métricas 'postgres_exporter' estão acessíveis através do navegador da web.

Para sistemas Ubuntu que usaram UFW como firewall, execute o comando ufw abaixo para adicionar a porta 9187 ao firewall ufw. Em seguida, recarregue o firewall para aplicar as alterações.

sudo ufw allow 9187/tcp
sudo ufw reload

Agora você pode verificar a lista de portas no UFW por meio do comando ufw abaixo.

sudo ufw status

Você receberá a seguinte saída: a porta postgres_exporter 9187 foi adicionada ao firewalld.

Para distribuições baseadas em RHEL que usam firewalld como firewall padrão, execute o comando firewall-cmd abaixo para adicionar a porta 9187 ao firewalld. Em seguida, recarregue o firewalld para aplicar novas alterações.

sudo firewall-cmd --add-port=9187/tcp --permanent
sudo firewall-cmd --reload

Depois disso, execute o comando abaixo para verificar se a porta postgres_exporter 9187 foi adicionada.

sudo firewall-cmd --list-ports

Agora você deve ver que a porta 9187 foi adicionada ao firewall.

Por último, abra seu navegador e visite o endereço IP do servidor PostgreSQL seguido pela porta 'postgres_exporter' 9187 (ou seja: http://192.168.5.21:9187/metrics) .

Você deverá ver os detalhes das métricas do servidor PostgreSQL coletadas pelo 'postgres_exporter'.

Com o firewall configurado e o 'postgres_exporter' acessível, em seguida você adicionará o 'postgres_exporter ao destino 'scrape_configs' do Prometheus.

Adicionando postgres_exporter ao Prometheus

De volta ao servidor Prometheus, abra o arquivo de configuração do Prometheus '/etc/prometheus/prometheus.yml' usando o comando do editor nano abaixo.

sudo nano /etc/prometheus/prometheus.yml

Na seção 'scrape_configs', adicione as seguintes linhas ao arquivo. Neste exemplo, você configurará um novo trabalho para coletar métricas do servidor PostgreSQL com o nome 'postgres_exporter', e o servidor de destino do PostgreSQL é '192.168.5.21:9187 ', que são as métricas expostas pelo serviço 'postgres_exporter'.

  # PostgreSQL Monitoring with postgres_exporter
  - job_name: 'postgres_exporter'
    scrape_interval: 5s
    static_configs:
      - targets: ['192.168.5.21:9187']

Salve o arquivo e saia do editor quando terminar.

Agora execute o comando systemctl abaixo para reiniciar o serviço Prometheus e aplicar as alterações.

sudo systemctl restart prometheus

Com os novos scrape_configs criados e o servidor Prometheus reiniciado, você verificará o 'postgres_exporter' por meio do painel da web do Prometheus.

abra seu navegador e visite o endereço IP do servidor Prometheus seguido pela porta padrão 9090 (ou seja: https://192.168.5.100:9090).

Faça login no servidor Prometheus com seu nome de usuário e senha, quando tiver o basic_auth habilitado.

No painel do Prometheus, clique no ícone 'navegador' para obter a lista de consultas do Prometheus. Em seguida, insira 'pg' para filtrar consultas que começam com 'pg'. Você receberá a saída como na captura de tela a seguir.

Em seguida, clique no menu Status e selecione Destinos, e você verá que o nome do trabalho 'postgres_exporter' está instalado e funcionando no servidor PostgreSQL com endereço IP '192.168.5.21:9187'.

Agora que o 'postgres_exporter' foi adicionado ao servidor Prometheus e a métrica do servidor PostgreSQL está disponível no Prometheus.

Nas próximas etapas, você configurará o painel Grafana para monitorar o servidor PostgreSQL.

Configurando o monitoramento do painel via Grafana

Abra o nome de domínio do Grafana ou o endereço IP do servidor e faça login no painel do Grafana usando seu nome de usuário e senha.

Após fazer login, clique no menu Painel e selecione Importar.

Insira o ID do painel do PostgreSQL 'xxx' e clique em Carregar. O ID do painel PostgreSQL '9628' está disponível no repositório Grafana Dashboard.

Em seguida, insira o novo painel e selecione 'Prometheus' como fonte de dados. Em seguida, clique em Importar para aplicar.

Neste exemplo, você criará um novo painel com o nome 'Monitoramento PostgreSQL'.

Após a importação do painel Grafana, verifique seu novo painel e você deverá ver o monitoramento do painel PostgreSQL conforme abaixo.

Conclusão

Parabéns! Agora você concluiu o monitoramento do PostgreSQL Server com Prometheus e Grafana por meio do 'postgres_exporter'. Você também criou um painel específico para monitoramento do PostgreSQL Server. Com isso, você pode obter detalhes detalhados sobre o que está acontecendo no seu PostgreSQL.

Agora você pode verificar a página GitHub da comunidade Prometheus para obter detalhes dos exportadores disponíveis no Prometheus. Isso permite que você monitore seus aplicativos por meio do Grafana e do Prometheus Monitoring Stack.

Artigos relacionados: