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.
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.
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
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
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.
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.
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.
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‘.
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 nombre‘postgres_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.
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.
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«.
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.
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.
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«.
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.
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.