¿Por qué monitorear su servidor bare metal?
Los servidores dedicados ofrecen una potencia, control y rendimiento inigualables, pero con gran poder viene la responsabilidad de una supervisión vigilante. Monitorear su servidor bare metal con herramientas como Prometheus y Grafana no es solo una buena práctica; es esencial para:
- Resolución Proactiva de Problemas: Detecte anomalías, cuellos de botella de recursos y posibles fallas de hardware antes de que impacten sus servicios.
- Optimización del Rendimiento: Comprenda los patrones de uso de CPU, RAM, I/O de disco y red para ajustar aplicaciones e infraestructura.
- Gestión de Recursos: Evalúe con precisión si las especificaciones actuales de su servidor satisfacen la demanda o si se necesita una actualización.
- Fiabilidad y Tiempo de Actividad: Asegure que sus aplicaciones críticas, ya sean game servers, sitios web de alto tráfico, bases de datos o CI/CD pipelines, permanezcan operativas y responsivas.
- Planificación de Capacidad: Recopile datos históricos para tomar decisiones informadas sobre la futura escalabilidad de la infraestructura.
Para sysadmins, desarrolladores y empresas que dependen del alojamiento dedicado, una solución de monitoreo robusta proporciona los conocimientos basados en datos necesarios para maximizar el retorno de su inversión en infraestructura.
Comprendiendo Prometheus y Grafana
Prometheus y Grafana son un dúo dinámico en el mundo del monitoreo de código abierto. Están diseñados para trabajar juntos sin problemas, cada uno destacando en su dominio específico:
Prometheus: El Recolector de Datos y Base de Datos de Series Temporales
Prometheus es un kit de herramientas de monitoreo y alerta de sistemas de código abierto construido originalmente en SoundCloud. Es reconocido por su potente modelo de datos multidimensional (datos de series temporales identificados por nombre de métrica y pares clave/valor), lenguaje de consulta flexible (PromQL) y almacenamiento eficiente.
- Modelo de Scraping: Prometheus extrae (scrapes) métricas de los targets configurados a intervalos específicos.
- Exporters: Pequeñas aplicaciones que exponen métricas de varios servicios (por ejemplo, Node Exporter para métricas del sistema operativo del servidor, Blackbox Exporter para sondeo de endpoints).
- Descubrimiento de Servicios: Puede descubrir dinámicamente targets para monitorear.
- Alertmanager: Gestiona las alertas enviadas por Prometheus, deduplicándolas, agrupándolas y enrutándolas a varios canales de notificación.
Grafana: La Potencia de Visualización y Paneles de Control
Grafana es una aplicación web de análisis y visualización interactiva de código abierto. Le permite consultar, visualizar, alertar y explorar sus métricas sin importar dónde estén almacenadas. Cuando se combina con Prometheus, Grafana transforma los datos brutos en paneles de control intuitivos y accionables.
- Paneles de Control Ricos: Cree paneles de control personalizados con una amplia gama de opciones de visualización (gráficos, tablas, mapas de calor, estadísticas individuales).
- Múltiples Fuentes de Datos: Soporta Prometheus, InfluxDB, PostgreSQL, MySQL, Elasticsearch y muchos otros.
- Alertas: Defina reglas de alerta directamente dentro de Grafana para notificarle sobre eventos críticos.
- Plantillas: Construya paneles de control dinámicos y reutilizables.
Prerrequisitos y Requisitos del Servidor
Antes de sumergirse en la instalación, asegúrese de que su servidor dedicado Valebyte cumpla con estos requisitos:
Sistema Operativo
Esta guía se centra principalmente en distribuciones Linux basadas en Debian/Ubuntu, que son opciones comunes para implementaciones bare metal debido a su estabilidad y soporte comunitario. Los comandos pueden variar ligeramente para sistemas basados en RHEL/CentOS, pero los conceptos centrales siguen siendo los mismos.
Recursos del Servidor
Aunque Prometheus y Grafana son eficientes, consumen recursos. Para monitorear un solo servidor bare metal y algunas aplicaciones:
- CPU: 1-2 núcleos (las CPU multinúcleo modernas son ideales).
- RAM: 2GB - 4GB dedicados a la pila de monitoreo (Prometheus puede consumir mucha memoria con períodos de retención largos o muchas métricas).
- Almacenamiento: Se recomiendan 20GB - 50GB SSD para la base de datos de series temporales (TSDB) de Prometheus. El requisito real depende en gran medida del número de métricas, su tasa de cambio y su período de retención de datos deseado. Los SSD son cruciales para un buen rendimiento de TSDB.
- Red: Conectividad de red estándar.
Acceso y Privilegios
- Acceso Root o Sudo: Necesitará privilegios administrativos para instalar paquetes, crear usuarios y administrar servicios del sistema.
- Acceso SSH: Acceso Secure Shell a su servidor dedicado.
Configuración del Firewall
Deberá abrir puertos específicos en el firewall de su servidor (por ejemplo, UFW en Ubuntu o firewalld en CentOS) para permitir el acceso a los componentes de monitoreo:
- Prometheus: Puerto
9090(para la UI de Prometheus y el scraping). - Node Exporter: Puerto
9100(para métricas de Node Exporter). - Grafana: Puerto
3000(para la interfaz web de Grafana).
¿Necesitas un servidor dedicado?
Compare prices from top providers. Configure and order in minutes.
Guía de Instalación Paso a Paso
Comencemos con la configuración de su pila de monitoreo.
Paso 1: Prepare su Servidor Bare Metal
Primero, actualice su sistema e instale las utilidades necesarias.
sudo apt update
sudo apt upgrade -y
sudo apt install -y wget curl gnupg2 software-properties-common
Crear Usuarios Dedicados
Es una buena práctica de seguridad ejecutar Prometheus y Node Exporter bajo usuarios sin privilegios.
sudo useradd --no-create-home --shell /bin/false prometheus
sudo useradd --no-create-home --shell /bin/false node_exporter
Configurar Firewall (Ejemplo UFW)
Si está usando UFW, actívelo y permita los puertos necesarios.
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow 9090/tcp # Prometheus
sudo ufw allow 9100/tcp # Node Exporter
sudo ufw allow 3000/tcp # Grafana
sudo ufw status
Paso 2: Instalar Prometheus
Descargar y Extraer Prometheus
Visite la página de descarga de Prometheus para obtener la última versión estable. Ajuste el número de versión según sea necesario.
cd /tmp
wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz
tar xvf prometheus-2.48.0.linux-amd64.tar.gz
sudo mv prometheus-2.48.0.linux-amd64 /opt/prometheus-2.48.0
Crear Directorios y Establecer Permisos
sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus
sudo cp /opt/prometheus-2.48.0/prometheus /usr/local/bin/
sudo cp /opt/prometheus-2.48.0/promtool /usr/local/bin/
sudo cp -r /opt/prometheus-2.48.0/consoles /etc/prometheus
sudo cp -r /opt/prometheus-2.48.0/console_libraries /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus /var/lib/prometheus
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool
Crear Archivo de Configuración de Prometheus
Cree /etc/prometheus/prometheus.yml con la siguiente configuración básica. Esta configuración inicial incluye a Prometheus como un target.
sudo nano /etc/prometheus/prometheus.yml
Agregue el siguiente contenido:
global:
scrape_interval: 15s # How frequently to scrape targets
evaluation_interval: 15s # How frequently to evaluate rules
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
Crear Archivo de Servicio Systemd para Prometheus
Esto permite que Prometheus se ejecute como un servicio.
sudo nano /etc/systemd/system/prometheus.service
Agregue 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=0.0.0.0:9090 \
--log.level=info
[Install]
WantedBy=multi-user.target
Recargar Systemd, Iniciar y Habilitar Prometheus
sudo systemctl daemon-reload
sudo systemctl start prometheus
sudo systemctl enable prometheus
Verificar Instalación de Prometheus
sudo systemctl status prometheus
Debería ver un estado 'active (running)'. También puede acceder a la UI de Prometheus en su navegador web en http://YOUR_SERVER_IP:9090. Navegue a 'Status' -> 'Targets' para ver si Prometheus se está haciendo scraping a sí mismo.
Paso 3: Instalar Node Exporter (para Métricas del Servidor)
Node Exporter expone una amplia gama de métricas de hardware y del sistema operativo del servidor en el que se ejecuta.
Descargar y Extraer Node Exporter
Obtenga la última versión estable desde la página de descarga de Prometheus.
cd /tmp
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
sudo mv node_exporter-1.7.0.linux-amd64 /opt/node_exporter-1.7.0
Mover Binario y Establecer Permisos
sudo cp /opt/node_exporter-1.7.0/node_exporter /usr/local/bin/
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
Crear Archivo de Servicio Systemd para Node Exporter
sudo nano /etc/systemd/system/node_exporter.service
Agregue el siguiente contenido:
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target
Recargar Systemd, Iniciar y Habilitar Node Exporter
sudo systemctl daemon-reload
sudo systemctl start node_exporter
sudo systemctl enable node_exporter
Verificar Instalación de Node Exporter
sudo systemctl status node_exporter
Debería ver un estado 'active (running)'. También puede verificar sus métricas visitando http://YOUR_SERVER_IP:9100/metrics en su navegador.
Configurar Prometheus para Scrapear Node Exporter
Ahora, dígale a Prometheus que recolecte métricas de Node Exporter. Edite su archivo /etc/prometheus/prometheus.yml:
sudo nano /etc/prometheus/prometheus.yml
Agregue una nueva entrada scrape_configs:
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100'] # Or YOUR_SERVER_IP:9100 if on a different machine
Guarde el archivo y reinicie Prometheus para que los cambios surtan efecto:
sudo systemctl restart prometheus
Verifique en la UI de Prometheus (http://YOUR_SERVER_IP:9090 -> 'Status' -> 'Targets') que node_exporter esté listado y saludable.
Paso 4: Instalar Grafana
Grafana se instala típicamente desde su repositorio APT oficial.
Agregar Clave GPG y Repositorio de Grafana
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 -a /etc/apt/sources.list.d/grafana.list
Instalar Grafana
sudo apt update
sudo apt install grafana -y
Iniciar y Habilitar Grafana
sudo systemctl daemon-reload
sudo systemctl start grafana-server
sudo systemctl enable grafana-server
Verificar Instalación de Grafana
sudo systemctl status grafana-server
Debería ver un estado 'active (running)'. Acceda a la interfaz web de Grafana en http://YOUR_SERVER_IP:3000. El inicio de sesión predeterminado es admin / admin. Se le pedirá que cambie la contraseña en el primer inicio de sesión.
Paso 5: Configurar Grafana con la Fuente de Datos de Prometheus
Ahora, conectemos Grafana a su instancia de Prometheus.
- Inicie sesión en Grafana (predeterminado:
admin/admin). Cambie la contraseña cuando se le solicite. - En el menú de la izquierda, pase el cursor sobre el icono de 'engranaje' (Configuration) y haga clic en 'Data Sources'.
- Haga clic en 'Add data source'.
- Seleccione 'Prometheus' de la lista.
-
Configure la fuente de datos:
- Nombre:
Prometheus(o cualquier nombre descriptivo). - URL:
http://localhost:9090(ohttp://YOUR_SERVER_IP:9090si Prometheus está en una máquina diferente). - Deje otras configuraciones como predeterminadas por ahora.
- Nombre:
- Haga clic en 'Save & Test'. Debería ver un mensaje como 'Data source is working'.
Paso 6: Importar/Crear Paneles de Control de Grafana
Grafana brilla con sus paneles de control. Puede crear los suyos propios o importar plantillas preconstruidas de la comunidad de Grafana.
Importar un Panel de Control Preconstruido (Recomendado para Node Exporter)
Un panel de control popular para las métricas de Node Exporter es Node Exporter Full (ID: 1860).
- En Grafana, pase el cursor sobre el icono de 'más' (Create) en el menú de la izquierda y haga clic en 'Import'.
- En el campo 'Import via grafana.com', ingrese
1860y haga clic en 'Load'. - Seleccione su fuente de datos 'Prometheus' del menú desplegable.
- Haga clic en 'Import'.
¡Ahora debería ver un panel de control completo que muestra el uso de CPU, memoria, I/O de disco, tráfico de red y más de su servidor bare metal!
Crear Paneles de Control Personalizados
Para monitoreo de aplicaciones específicas o casos de uso únicos (por ejemplo, conteo de jugadores de game server, tasas de consulta de bases de datos), puede construir paneles de control personalizados:
- Haga clic en el icono de 'más' (Create) y seleccione 'Dashboard'.
- Haga clic en 'Add new panel'.
- Seleccione su fuente de datos de Prometheus.
- Use PromQL (Prometheus Query Language) para consultar sus métricas (por ejemplo,
node_cpu_seconds_total,node_memory_MemFree_bytes). - Elija su tipo de visualización (Graph, Stat, Gauge, etc.).
- Personalice títulos, unidades y opciones de visualización.
Configuración Avanzada y Mejores Prácticas
Alertas con Alertmanager
Aunque Grafana ofrece alertas básicas, el Alertmanager de Prometheus está diseñado para un enrutamiento, agrupación y deduplicación de alertas más sofisticados. Para infraestructuras bare metal críticas, se recomienda encarecidamente configurar Alertmanager para enviar notificaciones por correo electrónico, Slack, PagerDuty u otros canales.
Consideraciones de Seguridad
- Firewall: Restrinja el acceso a los puertos de Prometheus (9090), Node Exporter (9100) y Grafana (3000) a IPs de confianza o a su red interna siempre que sea posible.
- TLS/SSL: Asegure Grafana con HTTPS, especialmente si es accesible públicamente. Puede usar un proxy inverso como Nginx o Apache con Let's Encrypt.
- Contraseñas Fuertes: Cambie las credenciales predeterminadas de Grafana inmediatamente.
- Usuarios Dedicados: Como se implementó, ejecutar servicios bajo usuarios sin privilegios mejora la seguridad.
Consideraciones de Almacenamiento
Prometheus almacena datos localmente en su TSDB. Considere:
- Retención: La retención predeterminada es de 15 días. Ajuste
--storage.tsdb.retention.time(por ejemplo,--storage.tsdb.retention.time=30d) o--storage.tsdb.retention.size(por ejemplo,--storage.tsdb.retention.size=50GB) en su archivoprometheus.service. Una retención más larga requiere más espacio en disco. - Tipo de Disco: Los SSD son altamente recomendados para el directorio de datos de Prometheus (
/var/lib/prometheus) debido a su alto rendimiento de I/O.
Monitoreo de Múltiples Servidores
Para monitorear servidores bare metal adicionales, simplemente instale Node Exporter en cada servidor y configure su instancia central de Prometheus para scrapear sus respectivos endpoints :9100. Actualice su prometheus.yml:
- job_name: 'additional_servers'
static_configs:
- targets: ['server2_ip:9100', 'server3_ip:9100']
Casos de Uso Reales para el Monitoreo
- Game Servers: Rastree la carga de CPU, la latencia de red y el uso de memoria para garantizar una experiencia de juego fluida. Monitoree métricas específicas del game server a través de exporters personalizados.
- Alojamiento Web: Observe las métricas del servidor web (Nginx/Apache), el rendimiento de la base de datos (MySQL/PostgreSQL) y los tiempos de respuesta de las aplicaciones para sitios web de alto tráfico.
- Bases de Datos: Monitoree las tasas de consulta, el número de conexiones, el I/O de disco y el uso del pool de búfer para una salud y rendimiento óptimos de la base de datos.
- Servidores de Correo: Vigile el tamaño de la cola de correo, el tráfico entrante/saliente y el consumo de recursos para evitar problemas de entrega.
- Servicios de Streaming: Monitoree el uso de ancho de banda, la utilización de CPU durante la codificación/transcodificación y el rendimiento del almacenamiento.
- CI/CD Pipelines: Rastree el uso de recursos del agente de compilación, los tiempos de ejecución de los trabajos y la salud general del pipeline para identificar cuellos de botella.
Resolución de Problemas Comunes
Prometheus No Inicia o No Hace Scraping
- Errores de Configuración: Use
promtool check config /etc/prometheus/prometheus.ymlpara validar su archivo de configuración de Prometheus. - Conflictos de Puerto: Asegúrese de que el puerto 9090 no esté ya en uso por otra aplicación. Revise los logs con
sudo journalctl -u prometheus.service. - Permisos: Verifique que el usuario
prometheustenga acceso de lectura a/etc/prometheus/prometheus.ymly acceso de escritura a/var/lib/prometheus. - Firewall: Asegúrese de que el puerto 9090 esté abierto.
Node Exporter No Accesible
- Estado del Servicio: Verifique si Node Exporter está en ejecución:
sudo systemctl status node_exporter. - Firewall: Confirme que el puerto 9100 esté abierto en el servidor que ejecuta Node Exporter.
- Configuración de Prometheus: Verifique dos veces la IP/hostname del target y el puerto en
prometheus.yml. - Logs: Revise
sudo journalctl -u node_exporter.serviceen busca de errores.
Problemas de Conexión de la Fuente de Datos de Grafana
- Estado de Prometheus: Asegúrese de que Prometheus esté en ejecución y sea accesible desde el servidor que aloja Grafana (si están separados).
- Firewall: Verifique que el puerto 9090 esté abierto desde la perspectiva de Grafana.
- Corrección de URL: Confirme que la URL de Prometheus en la configuración de la fuente de datos de Grafana sea correcta (por ejemplo,
http://localhost:9090).
Métricas Faltantes en Grafana
- Targets de Prometheus: Verifique la UI de Prometheus (Status -> Targets) para asegurarse de que todos los targets esperados (Prometheus, Node Exporter) estén activos y saludables.
- Consulta PromQL: Verifique que sus consultas PromQL en Grafana sean correctas y apunten a las métricas que espera. Use la interfaz 'Graph' de la UI de Prometheus para probar las consultas primero.
- Rango de Tiempo: Asegúrese de que el rango de tiempo de su panel de control de Grafana cubra el período en el que los datos deberían estar disponibles.
Errores de Permiso
Si encuentra errores de permiso denegado durante la instalación o al iniciar servicios, verifique dos veces que los archivos y directorios tengan la propiedad correcta (por ejemplo, prometheus:prometheus para archivos de Prometheus, node_exporter:node_exporter para Node Exporter) y los permisos de lectura/escritura apropiados.