¿Por qué Prometheus y Grafana para la monitorización de servidores?
Prometheus y Grafana forman un potente stack de código abierto para la monitorización de servidores y aplicaciones. Prometheus destaca en la recopilación y almacenamiento de datos de series temporales, ofreciendo un lenguaje de consulta flexible (PromQL) para análisis y alertas. Grafana, por otro lado, proporciona paneles de control ricos y personalizables para visualizar estos datos, haciendo que las métricas complejas sean fácilmente digeribles. Juntos, ofrecen una solución integral para el seguimiento de la salud del servidor, la utilización de recursos y las métricas específicas de la aplicación, esenciales para mantener servicios estables y de alto rendimiento como servidores de juegos, alojamiento web, bases de datos o pipelines de CI/CD.
Requisitos previos
Antes de empezar, asegúrate de tener lo siguiente:
- Dos servidores: Un servidor dedicado o un VPS robusto para el stack de Prometheus/Grafana (el 'servidor de monitorización'), y al menos un servidor a monitorizar (el 'servidor monitorizado').
- Sistema operativo: Ubuntu 22.04 LTS o una distribución similar basada en Debian en ambos servidores.
- Acceso SSH: Acceso root o un usuario con privilegios
sudoen ambos servidores. - Cortafuegos: UFW habilitado y configurado para permitir el tráfico SSH (puerto 22), Prometheus (puerto 9090), Grafana (puerto 3000) y Node Exporter (puerto 9100).
Requisitos mínimos del servidor para el stack de monitorización (servidor de monitorización)
Para el servidor que aloja Prometheus y Grafana, considera estas especificaciones básicas:
- vCPU: 2 núcleos
- RAM: 4GB
- Disco: 50GB NVMe (para rendimiento y almacenamiento de datos)
- Ancho de banda: 1TB/mes
Estas especificaciones son adecuadas para monitorizar hasta 10-15 endpoints con volúmenes de métricas típicos. Despliegues más grandes requerirán más recursos.
Instalación y configuración paso a paso
Paso 1: Actualizar el sistema e instalar dependencias (servidor de monitorización)
Comienza actualizando la lista de paquetes de tu servidor de monitorización e instalando las utilidades necesarias.
sudo apt update
sudo apt upgrade -y
sudo apt install -y wget curl gnupg2 software-properties-common apt-transport-https
Paso 2: Instalar el servidor Prometheus (servidor de monitorización)
Prometheus no suele venir en los repositorios estándar, por lo que descargaremos su binario directamente.
Descargar y extraer Prometheus
PROMETHEUS_VERSION="2.48.0" # Comprueba la última versión estable en prometheus.io
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
sudo mv prometheus-${PROMETHEUS_VERSION}.linux-amd64 /usr/local/prometheus
Crear usuario y directorios de Prometheus
sudo useradd --no-create-home --shell /bin/false prometheus
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus
Configurar Prometheus
Crea un archivo de configuración básico de Prometheus en /etc/prometheus/prometheus.yml:
sudo nano /etc/prometheus/prometheus.yml
Añade el siguiente contenido:
global:
scrape_interval: 15s # Con qué frecuencia se recopilan los objetivos.
evaluation_interval: 15s # Con qué frecuencia se evalúan las reglas.
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090'] # Prometheus se recopila a sí mismo
Establecer permisos y crear servicio Systemd
sudo chown -R prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /usr/local/prometheus/prometheus
sudo chown prometheus:prometheus /usr/local/prometheus/promtool
sudo cp /usr/local/prometheus/consoles /usr/local/prometheus/console_libraries /etc/prometheus/
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
sudo nano /etc/systemd/system/prometheus.service
Añade la configuración del servicio:
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/prometheus/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.external-url=http://<YOUR_MONITORING_SERVER_IP>:9090
[Install]
WantedBy=multi-user.target
Reemplaza <YOUR_MONITORING_SERVER_IP> con la dirección IP pública o el nombre de dominio de tu servidor.
Iniciar Prometheus y habilitar el cortafuegos
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
sudo ufw allow 9090/tcp
Verifica que Prometheus está funcionando navegando a http://<YOUR_MONITORING_SERVER_IP>:9090 en tu navegador web. Deberías ver la interfaz de usuario de Prometheus.
Paso 3: Instalar Node Exporter (servidor monitorizado)
Node Exporter se ejecuta en cada servidor que deseas monitorizar, exponiendo métricas del sistema para que Prometheus las recopile.
Descargar y extraer Node Exporter
En tu servidor *monitorizado*:
NODE_EXPORTER_VERSION="1.7.0" # Comprueba la última versión estable
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
sudo mv node_exporter-${NODE_EXPORTER_VERSION}.linux-amd64 /usr/local/node_exporter
Crear usuario y servicio de Node Exporter
sudo useradd --no-create-home --shell /bin/false node_exporter
sudo chown -R node_exporter:node_exporter /usr/local/node_exporter
sudo nano /etc/systemd/system/node_exporter.service
Añade la configuración del servicio:
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
Iniciar Node Exporter y habilitar el cortafuegos
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
sudo ufw allow 9100/tcp
Verifica que Node Exporter está funcionando visitando http://<YOUR_MONITORED_SERVER_IP>:9100/metrics en tu navegador. Deberías ver una página llena de métricas.
Añadir Node Exporter a la configuración de Prometheus (servidor de monitorización)
De vuelta en tu servidor *de monitorización*, edita /etc/prometheus/prometheus.yml para añadir el nuevo objetivo:
sudo nano /etc/prometheus/prometheus.yml
Añade una nueva entrada scrape_configs:
...
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['<YOUR_MONITORED_SERVER_IP>:9100'] # Reemplazar con la IP real
labels:
instance: 'my_first_server'
Recarga Prometheus para aplicar los cambios:
sudo systemctl reload prometheus
Comprueba la interfaz de usuario de Prometheus (http://<YOUR_MONITORING_SERVER_IP>:9090/targets) para asegurarte de que Node Exporter aparece y está saludable.
Paso 4: Instalar Grafana (servidor de monitorización)
Grafana proporciona la capa de visualización para tus datos de Prometheus.
Añadir clave GPG y repositorio de Grafana
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
Instalar Grafana
sudo apt install -y grafana
Iniciar Grafana y habilitar el cortafuegos
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
sudo ufw allow 3000/tcp
Accede a Grafana en http://<YOUR_MONITORING_SERVER_IP>:3000. El inicio de sesión predeterminado es admin / admin. Se te pedirá que cambies la contraseña.
Añadir Prometheus como fuente de datos en Grafana
- Inicia sesión en Grafana.
- Haz clic en el icono de engranaje (Configuración) en la barra lateral izquierda, luego en Fuentes de datos.
- Haz clic en Añadir fuente de datos y selecciona Prometheus.
- Establece el Nombre (por ejemplo,
Prometheus). - Para la URL, introduce
http://localhost:9090(ya que Grafana está en el mismo servidor). - Haz clic en Guardar y probar. Deberías ver un mensaje de "La fuente de datos está funcionando".
Paso 5: Importar paneles y crear alertas (servidor de monitorización)
Importar un panel de Node Exporter
Grafana Labs proporciona muchos paneles contribuidos por la comunidad. Uno popular para Node Exporter es el ID 1860.
- En la barra lateral izquierda, haz clic en el icono de más (Crear), luego en Importar.
- Introduce
1860en el campo "Importar vía grafana.com" y haz clic en Cargar. - Selecciona tu fuente de datos de Prometheus y haz clic en Importar.
Ahora deberías ver un panel completo que visualiza las métricas de tu servidor monitorizado.
Alertas básicas con Prometheus y Grafana
Prometheus gestiona las reglas de alerta, mientras que Grafana puede visualizar y enviar notificaciones para estas alertas.
- Reglas de alerta de Prometheus: Crea un archivo como
/etc/prometheus/alert.rules.ymlcon reglas (por ejemplo, alto uso de CPU, poco espacio en disco). - Configuración de Prometheus: Actualiza
prometheus.ymlpara incluirrule_files: ['/etc/prometheus/alert.rules.yml']. - Alertmanager: Para un enrutamiento avanzado de notificaciones (correo electrónico, Slack, PagerDuty), instala y configura Prometheus Alertmanager.
- Alertas de Grafana: También puedes configurar alertas directamente dentro de los paneles de Grafana, que pueden activar notificaciones basadas en los resultados de las consultas.
¿Buscas un servidor que simplemente funcione?
Valebyte VPS — NVMe, soporte 24/7, despliegue en 60 segundos.
Escalando tu configuración de monitorización
Los recursos necesarios para tu stack de monitorización de Prometheus y Grafana dependen en gran medida del número de endpoints monitorizados, la frecuencia de recopilación de datos y el período de retención de tus métricas. Es crucial seleccionar el hardware de servidor adecuado para garantizar que tu sistema de monitorización siga siendo fiable y de alto rendimiento a medida que tu infraestructura crece.
| Número de Endpoints Monitorizados (Node Exporters) | vCPU/Núcleos | RAM | Disco (Tipo + GB) | Ancho de banda mensual |
|---|---|---|---|---|
| Hasta 10 | 2 vCPU | 4 GB | 50 GB NVMe | 1 TB |
| 10 - 50 | 4 vCPU | 8 GB | 100 GB NVMe | 2 TB |
| 50 - 150 | 6-8 Núcleos | 16-32 GB | 200 GB NVMe | 5 TB |
| 150+ (Alta densidad) | 8+ Núcleos | 32+ GB | 500+ GB NVMe (RAID 1) | 10+ TB |
Resolución de problemas comunes
- Interfaz de usuario de Prometheus no accesible (9090): Comprueba el cortafuegos (
sudo ufw status) y el estado del servicio Prometheus (sudo systemctl status prometheus). Asegúrate de que--web.external-urlesté configurado correctamente en el archivo de servicio. - Node Exporter no accesible (9100): Verifica el cortafuegos en el servidor monitorizado y el estado del servicio Node Exporter.
- Objetivos caídos en Prometheus: Comprueba la conectividad de red entre los servidores de monitorización y monitorizados. Asegúrate de que Node Exporter se está ejecutando en el objetivo y de que su IP/puerto son correctos en
prometheus.yml. - Error de fuente de datos de Grafana: Confirma que Prometheus se está ejecutando en el puerto 9090. Comprueba los registros del servidor Grafana (
sudo journalctl -u grafana-server -f) en busca de errores. - Métricas faltantes en Grafana: Asegúrate de que la fuente de datos de Prometheus correcta esté seleccionada en tu panel. Verifica que Prometheus realmente está recopilando el objetivo (consulta la interfaz de usuario de Prometheus -> Estado -> Objetivos).
- Espacio en disco bajo: Prometheus almacena datos de métricas. Configura políticas de retención en
prometheus.yml(por ejemplo,--storage.tsdb.retention.time=30d) o considera soluciones de almacenamiento remoto para la retención a largo plazo.