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.