¿Por qué Prometheus y Grafana para la monitorización de servidores Bare Metal?
La monitorización es un componente crítico para mantener una infraestructura de servidores saludable y de alto rendimiento. Para entornos bare metal, donde tienes control total y responsabilidad, una solución de monitorización robusta como Prometheus y Grafana es indispensable. Prometheus destaca en la recopilación y almacenamiento de datos de series temporales, mientras que Grafana proporciona potentes capacidades de visualización, convirtiendo métricas en bruto en paneles de control accionables. Juntos, ofrecen una vista completa del uso de CPU, consumo de memoria, E/S de disco, tráfico de red y métricas específicas de la aplicación de tu servidor.
Ya sea que estés alojando una aplicación web de alto tráfico, un servidor de juegos exigente, un clúster de bases de datos complejo o una pipeline de CI/CD, comprender las características de rendimiento de tu servidor es clave para el mantenimiento proactivo, la resolución de problemas y el escalado. Este tutorial se centra en configurar esta pila en un servidor dedicado de Valebyte, proporcionando el aislamiento y la potencia bruta necesarios para una monitorización seria.
Requisitos previos
- Un servidor dedicado o un VPS potente (para la propia pila de monitorización) ejecutando Ubuntu 22.04 LTS.
- Acceso root o sudo al servidor.
- Familiaridad básica con la línea de comandos de Linux.
- Un usuario sin privilegios para ejecutar los servicios de Prometheus y Grafana.
- Cortafuegos configurado para permitir el acceso a Prometheus (puerto 9090), Grafana (puerto 3000) y Node Exporter (puerto 9100).
Requisitos mínimos del servidor para la pila de monitorización
Para una configuración de monitorización de tamaño pequeño a mediano (monitorizando 5-10 servidores), el propio servidor de monitorización debería tener:
- vCPU: 2 núcleos (o 2 vCPU)
- RAM: 4 GB
- Disco: 50 GB NVMe (para datos de series temporales de Prometheus)
- Ancho de banda: 100 Mbps (para la recopilación de métricas y acceso al panel de control)
Para despliegues más grandes, considera especificaciones más altas como se detalla en la tabla de escalado a continuación.
Tutorial paso a paso: Configuración de Prometheus y Grafana
Paso 1: Prepara tu servidor
Primero, actualiza los paquetes de tu sistema e instala las utilidades necesarias:
sudo apt update
sudo apt upgrade -y
sudo apt install -y wget curl gnupg2 software-properties-common apt-transport-https
Crea usuarios de sistema dedicados para Prometheus y Grafana. Esto mejora la seguridad al ejecutar servicios con privilegios mínimos.
sudo useradd --no-create-home --shell /bin/false prometheus
sudo useradd --no-create-home --shell /bin/false grafana
Paso 2: Instala el servidor Prometheus
Descarga la última versión estable de Prometheus. Consulta la página de descarga de Prometheus para la versión más reciente. Al momento de escribir esto, la versión 2.47.0 es la actual.
PROMETHEUS_VERSION="2.47.0"
wget https://github.com/prometheus/prometheus/releases/download/v${PROMETHEUS_VERSION}/prometheus-${PROMETHEUS_VERSION}.linux-amd64.tar.gz
tar xvfz prometheus-${PROMETHEUS_VERSION}.linux-amd64.tar.gz
cd prometheus-${PROMETHEUS_VERSION}.linux-amd64
Crea los directorios necesarios y copia los binarios y archivos de configuración:
sudo mkdir -p /etc/prometheus /var/lib/prometheus
sudo cp prometheus promtool /usr/local/bin/
sudo cp consoles/ console_libraries/ /etc/prometheus/
sudo cp prometheus.yml /etc/prometheus/prometheus.yml
Establece la propiedad para mayor seguridad:
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /usr/local/bin/prometheus /usr/local/bin/promtool
Paso 3: Configura Prometheus
Edita el archivo de configuración de Prometheus para definir los objetivos de scrape. Para una configuración básica, monitorizaremos el propio servidor Prometheus usando un Node Exporter (que instalaremos más tarde).
sudo nano /etc/prometheus/prometheus.yml
Reemplaza la sección scrape_configs existente con lo siguiente, o añade un nuevo trabajo para el Node Exporter local:
global:
scrape_interval: 15s # Frecuencia con la que se recopilan los objetivos
evaluation_interval: 15s # Frecuencia con la que se evalúan las reglas
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100'] # Objetivo para el Node Exporter local
Guarda y sal (Ctrl+X, Y, Enter).
Paso 4: Crea el servicio Systemd de Prometheus
Crea un archivo de servicio systemd para gestionar Prometheus:
sudo nano /etc/systemd/system/prometheus.service
Añade el siguiente contenido:
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.listen-address=":9090"
Restart=always
[Install]
WantedBy=multi-user.target
Recarga systemd, inicia Prometheus y habilítalo para que se inicie al arrancar:
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo systemctl status prometheus
Verifica que Prometheus esté funcionando navegando a http://TU_IP_DEL_SERVIDOR:9090/ en tu navegador. Deberías ver la interfaz de usuario de Prometheus.
Paso 5: Instala Node Exporter en los servidores monitorizados (y en el servidor Prometheus)
Node Exporter recopila métricas a nivel de host (CPU, memoria, disco, red) y las expone a Prometheus. Instálalo en cualquier servidor que desees monitorizar, incluyendo el propio servidor Prometheus.
Descarga la última versión estable de Node Exporter (por ejemplo, 1.6.1):
NODE_EXPORTER_VERSION="1.6.1"
wget https://github.com/prometheus/node_exporter/releases/download/v${NODE_EXPORTER_VERSION}/node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz
tar xvfz node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64.tar.gz
cd node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64
Copia el binario y establece la propiedad:
sudo cp node_exporter /usr/local/bin
sudo chown prometheus:prometheus /usr/local/bin/node_exporter
Crea un servicio systemd para Node Exporter:
sudo nano /etc/systemd/system/node_exporter.service
Añade el siguiente contenido:
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/node_exporter --web.listen-address=":9100"
Restart=always
[Install]
WantedBy=multi-user.target
Recarga systemd, inicia Node Exporter y habilítalo:
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
sudo systemctl status node_exporter
Verifica que Node Exporter esté funcionando navegando a http://TU_IP_DEL_SERVIDOR:9100/metrics en tu navegador. Deberías ver una página de métricas en bruto.
Importante: Si instalas Node Exporter en otros servidores, recuerda abrir el puerto 9100 en sus cortafuegos y añadir sus IPs al archivo /etc/prometheus/prometheus.yml en tu servidor Prometheus:
- job_name: 'remote_servers'
static_configs:
- targets: ['REMOTE_SERVER_IP_1:9100', 'REMOTE_SERVER_IP_2:9100']
Después de modificar prometheus.yml, reinicia Prometheus: sudo systemctl restart prometheus.
Paso 6: Instala Grafana
Añade la clave GPG y el repositorio de Grafana a tu sistema:
sudo wget -q -O - https://apt.grafana.com/gpg.key | sudo gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/trusted.gpg.d/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
Actualiza los paquetes e instala Grafana:
sudo apt update
sudo apt install -y grafana
Inicia Grafana y habilítalo para que se inicie al arrancar:
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo systemctl status grafana-server
Verifica que Grafana esté funcionando navegando a http://TU_IP_DEL_SERVIDOR:3000/ en tu navegador. El inicio de sesión predeterminado es admin / admin. Se te pedirá que cambies la contraseña en el primer inicio de sesión.
Paso 7: Configura Grafana con la fuente de datos y el panel de control de Prometheus
Inicia sesión en Grafana (admin/admin).
Añade Prometheus como fuente de datos:
- Haz clic en el icono de engranaje (Configuración) en la barra lateral izquierda, luego en 'Data sources' (Fuentes de datos).
- Haz clic en 'Add data source' (Añadir fuente de datos).
- Selecciona 'Prometheus'.
- En 'Name' (Nombre), introduce
Prometheus. - En 'URL', introduce
http://localhost:9090. - Desplázate hacia abajo y haz clic en 'Save & Test' (Guardar y probar). Deberías ver 'Data source is working' (La fuente de datos funciona correctamente).
Importa un panel de control de Node Exporter:
- Haz clic en el icono '+' (Crear) en la barra lateral izquierda, luego en 'Import' (Importar).
- En el campo 'Import via grafana.com' (Importar a través de grafana.com), introduce
1860(un ID de panel de control completo de Node Exporter popular). - Haz clic en 'Load' (Cargar).
- En la siguiente pantalla, selecciona tu fuente de datos 'Prometheus' del menú desplegable.
- Haz clic en 'Import' (Importar).
Ahora deberías ver un panel de control completo que muestra métricas de tus instancias de Node Exporter. Puedes cambiar entre diferentes objetivos de Node Exporter si tienes varios configurados.
Resolución de problemas comunes
- El servicio no se inicia: Revisa los registros de systemd con
sudo journalctl -u prometheus.serviceosudo journalctl -u grafana-server.serviceen busca de errores. - Prometheus no está recopilando objetivos (scraping): Verifica las IPs y puertos de los objetivos en
/etc/prometheus/prometheus.yml. Revisa la página 'Status -> Targets' (Estado -> Objetivos) de Prometheus en la interfaz de usuario para ver errores de scrape. Asegúrate de que los cortafuegos estén abiertos tanto en el servidor Prometheus (puerto 9090, 9100) como en los servidores monitorizados (puerto 9100). - Grafana no se conecta a Prometheus: Vuelve a verificar la URL de la fuente de datos de Prometheus en Grafana. Asegúrate de que Prometheus esté funcionando y sea accesible desde el servidor de Grafana.
- Faltan métricas en Grafana: Confirma que Node Exporter se está ejecutando en el servidor objetivo y que Prometheus lo está recopilando correctamente. Revisa la página 'Graph' (Gráfico) de Prometheus para ver si se están recopilando métricas (por ejemplo,
node_cpu_seconds_total). - Problemas de permisos: Asegúrate de que los usuarios
prometheusygrafanasean propietarios de sus respectivos directorios y binarios.
Elegir el servidor adecuado para tu pila de monitorización, especialmente al gestionar numerosos servicios o servicios críticos, es primordial. La siguiente tabla proporciona orientación sobre las especificaciones del servidor basadas en la escala de tu infraestructura monitorizada.
| Escala de carga de trabajo (Servidores monitorizados) | vCPU (para carga de trabajo monitorizada) | RAM (para carga de trabajo monitorizada) | Disco (Tipo + GB) | Ancho de banda mensual (para carga de trabajo monitorizada) |
|---|---|---|---|---|
| Pequeña (1-5 servidores, proyectos personales, alojamiento web ligero) | 4-8 vCPU | 8-16 GB | 240 GB NVMe | 100 Mbps |
| Mediana (5-15 servidores, múltiples microservicios, bases de datos moderadas, servidores de juegos) | 8-16 núcleos | 32-64 GB | 480 GB NVMe (RAID1) | 1 Gbps |
| Grande (más de 15 servidores, APIs de alto tráfico, grandes clústeres de DB, CI/CD, streaming) | 16-32+ núcleos | 64-128+ GB | 1 TB+ NVMe (RAID10) | 10 Gbps |
Personalización adicional y monitorización avanzada
Una vez que tu configuración básica esté operativa, puedes ampliar tus capacidades de monitorización:
- Alertmanager: Integra Alertmanager con Prometheus para enviar notificaciones (correo electrónico, Slack, PagerDuty) cuando se superen umbrales críticos.
- Exporters para aplicaciones específicas: Instala otros Prometheus Exporters para bases de datos (por ejemplo,
mysqld_exporter,postgres_exporter), servidores web (por ejemplo,apache_exporter,nginx_exporter) o colas de mensajes. - Paneles de control personalizados: Crea tus propios paneles de control de Grafana adaptados a las métricas específicas de tu aplicación y a las necesidades de tu negocio.
- Reglas de grabación (Recording Rules): Utiliza las reglas de grabación de Prometheus para pre-agregar datos consultados con frecuencia, mejorando los tiempos de carga del panel de control.
- Almacenamiento remoto (Remote Storage): Para la retención a largo plazo o alta disponibilidad, considera integrar Prometheus con soluciones de almacenamiento remoto.