Cómo monitorizar PostgreSQL con Prometheus y Grafana en Ubuntu 22.04

En este tutorial, configurarás las plataformas de monitorización Prometheus y Grafana para monitorizar el servidor de bases de datos PostgreSQL. Instalarás y configurarás el postgres_exporter para recopilar las métricas del servidor PostgreSQL y exponerlas al servidor Prometheus. Al final de este tutorial, configurarás la monitorización del panel de control para el servidor PostgreSQL a través de la plataforma de visualización de datos Grafana.

Requisitos previos

Para completar este tutorial, necesitarás los siguientes requisitos:

  • Un servidor con Prometheus y Grafana instalados sobre él.
  • Un servidor de destino con un servidor de base de datos PostgreSQL instalado.
  • Un usuario no root con privilegios de administrador sudo/root.

A continuación encontrarás algunas guías para la instalación de cada componente.

Cómo instalar la plataforma de monitorización Prometheus y Grafana en el servidor Ubuntu 22.04.
Cómo instalar el servidor de bases de datos PostgreSQL en el servidor Ubuntu 22.04.

Ahora vamos a empezar Cuando todos los requisitos previos estén terminados y en su lugar.

Configuración del Servidor PostgreSQL

El servidor PostgreSQL proporciona dos métodos diferentes de encriptación de contraseñas: md5 y scram-sha-256. Ambas encriptaciones de contraseña se pueden configurar a través del archivo de configuración de PostgreSQL ‘postgresql.conf’.

En este paso, configurarás PostgreSQL para que utilice el cifrado de contraseñas‘scram-sha-256‘.

Este ejemplo utiliza el servidor PostgreSQL v14 que está instalado en un sistema Ubuntu, por lo que los archivos de configuración de PostgreSQL se almacenan en el directorio ‘/etc/postgresql/14/main’.

Desplázate al directorio de trabajo al directorio ‘/etc/postgresql/14/main‘ y abre el archivo de configuración ‘postgresql.conf ‘ mediante el comando editor nano.

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

Descomenta la opción‘password_encryption‘ y cambia el valor a‘scram-sha-256‘.

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

Guarda el archivo y sal del editor cuando hayas terminado.

encriptación de contraseña a scram-sha-256

A continuación, abre el archivo de configuración‘pg_hba.conf‘ mediante el siguiente comando del editor nano. El archivo ‘ pg_hba.conf’ es la configuración donde se definen los métodos de autenticación por contraseña para los hosts o direcciones IP.

sudo nano pg_hba.conf

Cambia los métodos de autenticación por defecto para el host‘127.0.0.1/32‘ y ‘::1/128‘ a ‘scram-sha-256‘. Con esto, el método de autenticación‘scram-sha-256‘ se utilizará para cada conexión de cliente al 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

Guarda y sal del editor cuando hayas terminado.

autenticación de usuarios

Por último, ejecuta la siguiente utilidad de comandos systemctl para reiniciar el servicio PostgreSQL y aplicar los cambios.

sudo systemctl restart postgresql

Con el servidor PostgreSQL configurado, a continuación instalarás el ‘postgres_exporter’ que te permite recopilar métricas del servidor PostgreSQL.

Descargar postgres_exporter

El ‘postgres_exporter‘ es un exportador de prometheus para las métricas del servidor PostgreSQL. Es compatible con varias versiones de PostgreSQL, como la 9.4, 9.5, 9.6, 10, 11, 12, 13 y 14. El ‘ postgres_exporter‘ es una aplicación de un solo archivo binario, está escrito principalmente en Go.

En estos pasos descargarás el ‘postgres_exporter’ en el servidor PostgreSQL.

Para empezar, ejecuta el siguiente comando para crear un nuevo usuario de sistema ‘postgres_exporter ‘ en tu servidor PostgreSQL.

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

Después, descarga el archivo binario ‘postgres_exporter’ mediante el comando wget que aparece a continuación. Asegúrate de consultar la página GitHub de ‘ postgres_exporter ‘ para obtener la última versión de‘postgres_exporter’. En el momento de escribir esto, la última versión de postgres_exporter es la 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

A continuación, ejecuta el siguiente comando tar para extraer el paquete postgres_exporter. A continuación, mueve el directorio extraído de postgres_exporter al directorio‘/opt/postgres_exporter‘.

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

Por último, comprueba la lista de archivos y directorios del directorio ‘postgres_exporter’. Deberías ver que el binario postgres_exporter’ está disponible.

ls /opt/postgres_exporter

descargar postgres_exporter

Con el archivo binario ‘postgres_exporter‘ descargado, a continuación configurarás el ‘postgres_exporter’ para recopilar métricas del servidor PostgreSQL.

Configurar postgres_exporter

En este paso, configurarás el ‘postgres_exporter’ para recopilar métricas de PostgreSQL, y esto se puede hacer definiendo el usuario y la contraseña de PostgreSQL. También establecerás y configurarás el servicio systemd para el ‘postgres_exporter’.

Con el ‘postgres_exporter‘, puedes exponer métricas para todas las bases de datos disponibles en el servidor PostgreSQL, o puedes exponer bases de datos específicas que quieras monitorizar. También puedes utilizar el modo seguro SSL o el modo no SSL.

Mueve el directorio de trabajo actual a ‘/opt/postgres_exporter’. mediante el comando cd que aparece a continuación.

cd /opt/postgres_exporter

Ahora crea un nuevo archivo ‘.env‘ utilizando el comando editor nano que aparece a continuación.

nano .env

Añade las siguientes líneas al archivo. Asegúrate también de cambiar los datos del usuario, contraseña y host de PostgreSQL. Con este archivo ‘.env‘, rasparás y recopilarás métricas PostgreSQL de todas las bases de datos disponibles. También puedes recopilar métricas de una base de datos PostgreSQL concreta, y ajustar el siguiente archivo de configuración.

# 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»

Guarda el archivo y sal del editor cuando hayas terminado.

A continuación, ejecuta el siguiente comando chown para cambiar la propiedad del directorio ‘/opt/postgres_exporter’ al usuario ‘postgres_exporter’.

sudo chown -R postgres_exporter: /opt/postgres_exporter

Después, ejecuta el siguiente comando para crear un nuevo archivo de servicio systemd ‘/etc/systemd/system/postgres_exporter.service’. Con esto, podrás gestionar fácilmente‘postgres_exporter’ mediante la utilidad de comandos 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

configure postgres export

Ahora ejecuta el siguiente comando systemctl para recargar el gestor systemd y aplicar los cambios.

sudo systemctl daemon-reload

Una vez recargado el gestor systemd, inicia y activa el servicio «postgres_exporter» mediante el comando systemctl que se indica a continuación.

sudo systemctl start postgres_exporter
sudo systemctl enable postgres_exporter

El servicio ‘postgres_exporter’ debe estar en ejecución y raspar las métricas del servidor PostgreSQL. Además, debe estar activado y se ejecutará automáticamente al arrancar.

postgres_exporter ajustes systemd

Por último, ejecuta el siguiente comando para verificar el estado del servicio «postgres_exporter «. Asegúrate también de que «postgres_exporter» se está ejecutando y está habilitado.

sudo systemctl status postgres_exporter

Recibirás un resultado similar a éste: el servicio «postgres_exporter» se está ejecutando y está activado.

postgres_exporter estado

En este punto, ‘postgres_exporter’ se está ejecutando en el puerto TCP por defecto‘9187‘ del servidor PostgreSQL. Esto expone las métricas de PostgreSQL al servidor Prometheus, pero antes, también tendrás que configurar el cortafuegos en el servidor PostgreSQL.

Configurar el cortafuegos

En este paso, configurarás el cortafuegos para que abra el puerto por defecto de‘postgres_exporter ‘ – TCP 9187. Después, comprobarás que la métrica ‘postgres_exporter’ es accesible a través del navegador web.

Para los sistemas Ubuntu que utilizaban UFW como cortafuegos, ejecuta el siguiente comando ufw para añadir el puerto 9187 al cortafuegos ufw. A continuación, recarga el cortafuegos para aplicar los cambios.

sudo ufw allow 9187/tcp
sudo ufw reload

Ahora puedes verificar la lista de puertos en UFW mediante el comando ufw que aparece a continuación.

sudo ufw status

Recibirás una salida como la siguiente: el puerto postgres_exporter 9187 se ha añadido al cortafuegos.

configurar cortafuegos

Para las distribuciones basadas en RHEL que utilizan firewalld como cortafuegos por defecto, ejecuta el siguiente comando firewall-cmd para añadir el puerto 9187 al firewalld. A continuación, recarga el firewalld para aplicar los nuevos cambios.

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

Después, ejecuta el siguiente comando para comprobar que se ha añadido el puerto postgres_exporter 9187.

sudo firewall-cmd --list-ports

Ahora deberías ver que el puerto 9187 está añadido al cortafuegos.

Por último, abre tu navegador web y visita la dirección IP de tu servidor PostgreSQL seguida del puerto‘postgres_exporter’ 9187 (es decir: http://192.168.5.21:9187/metrics).

Deberías ver los detalles de las métricas del servidor PostgreSQL recogidas por el ‘ postgres_exporter‘.

pstgres_exporter métricas

Con el cortafuegos configurado y el ‘postgres_exporter’ accesible, a continuación añadirás el ‘postgres_exporter’ al objetivo ‘scrape_configs’ de Prometheus.

Añadir postgres_exporter a Prometheus

Vuelve al servidor de Prometheus y abre el archivo de configuración de Prometheus‘/etc/prometheus/prometheus.yml‘ utilizando el siguiente comando del editor nano.

sudo nano /etc/prometheus/prometheus.yml

En la sección«scrape_configs«, añade las siguientes líneas al archivo. En este ejemplo, configurarás un nuevo trabajo para recopilar métricas del servidor PostgreSQL con el nombrepostgres_exporter‘, y el servidor de destino de PostgreSQL es‘192.168.5.21:9187‘, que es la métrica que expone el servicio‘postgres_exporter‘.

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

Guarda el archivo y sal del editor cuando hayas terminado.

añade postgres_exporter a prometheus

Ahora ejecuta el siguiente comando systemctl para reiniciar el servicio Prometheus y aplicar los cambios.

sudo systemctl restart prometheus

Con el nuevo scrape_configs creado y el servidor Prometheus reiniciado, a continuación, verifica el«postgres_exporter» a través del panel web de Prometheus.

Abre tu navegador web y visita la dirección IP del servidor Prometheus seguida del puerto 9090 por defecto (es decir: https://192.168.5.100:9090).

Inicia sesión en el servidor Prometheus con tu nombre de usuario y contraseña, cuando tengas activado el basic_auth.

En el panel de control de Prometheus, haz clic en el icono«navegador» para obtener la lista de consultas de Prometheus. A continuación, introduce«pg» para filtrar las consultas que empiecen por«pg«. Recibirás entonces un resultado como el de la siguiente captura de pantalla.

pg consultas

A continuación, haz clic en el menú Estado y selecciona Objetivos, y deberías ver que el nombre del trabajo«postgres_exporter » está activo y en ejecución en el servidor PostgreSQL con la dirección IP«192.168.5.21:9187«.

postgres_exporter prometheus

Ahora que« postgres_exporter» se ha añadido al servidor Prometheus, la métrica del servidor PostgreSQL ya está disponible en Prometheus.

En los siguientes pasos, configurarás el panel de control de Grafana para supervisar el servidor PostgreSQL.

Configuración de la monitorización del panel de control a través de Grafana

Abre tu nombre de dominio Grafana o la dirección IP del servidor, luego inicia sesión en el tablero Grafana con tu nombre de usuario y contraseña.

Tras acceder, haz clic en el menú Panel de control y selecciona Importar.

importación de cuadros de mando

Introduce el identificador del panel de control PostgreSQL «xxx» y haz clic en Cargar. El identificador del panel de control PostgreSQL«9628» está disponible en el repositorio de paneles de control de Grafana.

importar dashboard id

A continuación, introduce el nuevo panel y selecciona«Prometheus» como fuente de datos. A continuación, haz clic en Importar para aplicarlo.

En este ejemplo, crearás un nuevo panel con el nombre«Monitorización PostgreSQL«.

coinfigurar nuevo cuadro de mandos

Una vez importado el panel Grafana, comprueba tu nuevo panel y deberías ver la monitorización del panel PostgreSQL como se muestra a continuación.

Monitorización del panel de control PostgreSQL

Conclusión

¡Enhorabuena! Ya has terminado la monitorización del Servidor PostgreSQL con Prometheus y Grafana mediante el‘postgres_exporter‘. También has creado un panel de control específico para la monitorización de tu Servidor PostgreSQL. Con esto, puedes obtener detalles reveladores sobre lo que está ocurriendo en tu PostgreSQL.

Ahora puedes consultar la página GitHub de la Comunidad Prometheus para obtener detalles de los exportadores disponibles en Prometheus. Esto te permitirá monitorizar tus aplicaciones a través de Grafana y Prometheus Monitoring Stack.

También te podría gustar...