Laboratorio: Prometheus, Node Exporter y Grafana¶
Este laboratorio integra los componentes principales de una plataforma de monitorización:
- Prometheus: recopila y almacena métricas.
- Node Exporter: expone métricas del sistema operativo.
- Grafana: consulta Prometheus y representa la información.
- PromQL: permite consultar y transformar las métricas.
Durante la práctica se construirá el siguiente flujo:
Sistema operativo
|
v
Node Exporter
|
| HTTP /metrics
v
Prometheus
|
| PromQL / API HTTP
v
Grafana
|
v
Dashboards
El objetivo no es únicamente ejecutar comandos. El alumno debe ser capaz de explicar qué componente participa en cada paso, comprobar el funcionamiento de la plataforma y diagnosticar los problemas más habituales.
Objetivos¶
Al finalizar este laboratorio, el alumno podrá:
- Explicar la función de Prometheus, Node Exporter y Grafana.
- Comprobar el estado de los servicios implicados.
- Verificar los puertos utilizados por cada componente.
- Comprobar el endpoint
/metricsde Node Exporter. - Configurar Prometheus para realizar scraping de Node Exporter.
- Validar el fichero
prometheus.yml. - Consultar los objetivos desde Prometheus.
- Interpretar la métrica
up. - Ejecutar consultas PromQL.
- Calcular el uso de CPU.
- Calcular el uso de memoria.
- Calcular el uso del sistema de ficheros.
- Consultar el tráfico de red.
- Añadir Prometheus como fuente de datos en Grafana.
- Crear un dashboard básico.
- Crear paneles de disponibilidad, CPU, memoria y almacenamiento.
- Diagnosticar objetivos en estado
DOWN. - Identificar errores de conectividad entre Grafana y Prometheus.
- Configurar una fuente de datos mediante provisioning.
- Guardar evidencias de la instalación y configuración.
- Documentar el resultado final del laboratorio.
Arquitectura y componentes¶
Introducción¶
Una plataforma de monitorización está formada por varias piezas especializadas.
Prometheus¶
Prometheus consulta periódicamente los endpoints de métricas configurados, almacena los datos como series temporales y permite consultarlos mediante PromQL.
Su puerto habitual es:
URL local:
Node Exporter¶
Node Exporter recopila información del sistema operativo Linux y la expone mediante HTTP.
Su puerto habitual es:
Endpoint de métricas:
Grafana¶
Grafana consulta Prometheus y utiliza los resultados para crear dashboards y paneles.
Su puerto habitual es:
URL local:
Flujo de trabajo¶
1. Node Exporter expone métricas.
2. Prometheus consulta /metrics.
3. Prometheus almacena las muestras.
4. PromQL consulta los datos almacenados.
5. Grafana ejecuta consultas PromQL.
6. Grafana representa los resultados.
Arquitectura del laboratorio¶
+----------------------------------------------------------+
| Servidor Linux |
| |
| Node Exporter |
| http://localhost:9100/metrics |
| | |
| v |
| Prometheus |
| http://localhost:9090 |
| | |
| v |
| Grafana |
| http://localhost:3000 |
+----------------------------------------------------------+
Puertos utilizados¶
| Componente | Puerto | Función |
|---|---|---|
| Prometheus | 9090 |
Interfaz web y API |
| Node Exporter | 9100 |
Endpoint de métricas |
| Grafana | 3000 |
Interfaz web y API |
Requisitos previos¶
Antes de comenzar, comprobar que se dispone de:
- Un servidor Linux.
- Un usuario con permisos de
sudo. - Conectividad de red.
- Prometheus instalado.
- Node Exporter instalado.
- Grafana instalado.
- Un navegador web.
- Al menos 2 GB de memoria disponible.
- Los puertos
9090,9100y3000disponibles. - La hora del sistema sincronizada.
Comprobar la distribución¶
También puede utilizarse:
Comprobar la arquitectura¶
Comprobar la memoria¶
Comprobar el espacio disponible¶
Comprobar la hora¶
Comprobar los puertos¶
Si alguno de los puertos no aparece, el servicio correspondiente puede estar detenido o configurado con otro puerto.
Variables utilizadas¶
Durante el laboratorio se utilizarán estas variables:
export PROMETHEUS_URL="http://localhost:9090"
export NODE_EXPORTER_URL="http://localhost:9100"
export GRAFANA_URL="http://localhost:3000"
Comprobarlas:
Comprobación inicial de los servicios¶
Comprobar Prometheus¶
Resultado esperado:
Comprobar el endpoint de salud:
Resultado esperado:
Comprobar el endpoint de preparación:
Resultado esperado:
Comprobar Node Exporter¶
Si Node Exporter se instaló manualmente:
Si se instaló mediante el paquete de Ubuntu:
Comprobar el endpoint:
Resultado esperado:
Comprobar Grafana¶
Resultado esperado:
Comprobar la API:
Resultado conceptual:
Sesión 1: comprobar la instalación¶
Objetivo¶
Verificar que los tres componentes están instalados y activos.
Comprobar los servicios¶
Para una instalación manual de Node Exporter:
Para una instalación mediante APT:
Comprobar Grafana:
Consultar las versiones¶
Consultar la versión de Grafana mediante la API:
Consultar los puertos¶
Actividades¶
- Anota el estado de cada servicio.
- Anota las versiones.
- Anota los puertos en escucha.
- Identifica el proceso asociado a cada puerto.
- Explica qué función cumple cada componente.
Completar:
| Componente | Servicio | Puerto | Estado |
|---|---|---|---|
| Prometheus | |||
| Node Exporter | |||
| Grafana |
Sesión 2: comprobar Node Exporter¶
Objetivo¶
Comprobar que Node Exporter expone métricas del sistema operativo.
Consultar las primeras líneas¶
Buscar métricas de CPU¶
Buscar métricas de memoria¶
Buscar métricas de almacenamiento¶
Buscar métricas de red¶
Actividades¶
- Localiza una métrica de CPU.
- Localiza una métrica de memoria.
- Localiza una métrica de disco.
- Localiza una métrica de red.
- Anota las etiquetas que aparecen.
- Explica la diferencia entre una línea
HELP, una líneaTYPEy una muestra.
Completar:
| Categoría | Métrica encontrada | Etiquetas |
|---|---|---|
| CPU | ||
| Memoria | ||
| Disco | ||
| Red |
Sesión 3: configurar el scraping¶
Objetivo¶
Configurar Prometheus para consultar Node Exporter.
Crear una copia de seguridad¶
sudo cp \
/etc/prometheus/prometheus.yml \
"/etc/prometheus/prometheus.yml.$(date +%Y%m%d-%H%M%S).bak"
Crear la configuración¶
sudo tee /etc/prometheus/prometheus.yml > /dev/null <<'EOF'
---
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
- job_name: node_exporter
static_configs:
- targets:
- localhost:9100
labels:
environment: laboratorio
role: monitoring
EOF
Mostrar el fichero:
Validar la configuración¶
Resultado esperado:
El texto exacto puede variar según la versión de Prometheus.
Reiniciar Prometheus¶
Comprobar:
Consultar los registros recientes:
Sesión 4: comprobar los objetivos¶
Objetivo¶
Comprobar que Prometheus ha cargado los objetivos y puede consultarlos.
Comprobar desde la interfaz web¶
Abrir:
Acceder a:
Comprobar que aparecen:
Ambos deben aparecer como:
Comprobar mediante la API¶
Mostrar un resumen:
curl -s "$PROMETHEUS_URL/api/v1/targets" \
| jq -r '
.data.activeTargets[]
| [
.labels.job,
.labels.instance,
.health,
.scrapeUrl,
.lastError
]
| @tsv
'
Resultado conceptual:
prometheus localhost:9090 up http://localhost:9090/metrics
node_exporter localhost:9100 up http://localhost:9100/metrics
Actividades¶
- Anota los jobs.
- Anota las instancias.
- Comprueba la URL de scraping.
- Comprueba el estado.
- Comprueba que no hay errores.
- Comprueba que aparecen las etiquetas personalizadas.
Sesión 5: consultar la métrica up¶
Objetivo¶
Utilizar PromQL para comprobar la disponibilidad de los objetivos.
Consultar todos los objetivos¶
Resultado conceptual:
up{instance="localhost:9090",job="prometheus"} 1
up{instance="localhost:9100",job="node_exporter"} 1
Consultar únicamente Node Exporter¶
Consultar los objetivos caídos¶
Contar los objetivos¶
Contar los objetivos disponibles¶
Calcular el porcentaje de disponibilidad¶
Consultar mediante la API¶
Mostrar únicamente job, instancia y valor:
curl -sG "$PROMETHEUS_URL/api/v1/query" \
--data-urlencode 'query=up' \
| jq -r '
.data.result[]
| [
.metric.job,
.metric.instance,
.value[1]
]
| @tsv
'
Sesión 6: practicar consultas PromQL¶
Objetivo¶
Consultar métricas de Prometheus y Node Exporter.
Métricas de Prometheus¶
Métricas de memoria¶
Métricas de carga¶
Métricas de red¶
Actividades¶
- Ejecuta cada consulta.
- Cambia entre las vistas Table y Graph.
- Identifica qué métricas son
gauge. - Identifica qué métricas son
counter. - Anota las etiquetas de cada resultado.
- Indica qué consultas son apropiadas para un gráfico temporal.
Sesión 7: calcular el uso de CPU¶
Objetivo¶
Construir una consulta PromQL para calcular el porcentaje de CPU utilizado.
Consultar el contador de CPU¶
Filtrar el modo inactivo¶
Calcular la velocidad de cambio¶
Calcular la media por instancia¶
Calcular el porcentaje de CPU utilizado¶
Generar carga temporal¶
Ejecutar únicamente en el entorno de laboratorio:
Comprobar los procesos:
Detener los procesos:
Actividades¶
- Ejecuta la consulta de uso de CPU.
- Visualízala como gráfico.
- Genera carga durante un periodo corto.
- Observa el aumento del uso.
- Detén la carga.
- Observa la recuperación.
- Explica por qué se utiliza
rate().
Sesión 8: calcular el uso de memoria¶
Objetivo¶
Calcular el porcentaje de memoria utilizada.
Memoria total¶
Memoria disponible¶
Memoria utilizada en bytes¶
Porcentaje disponible¶
Porcentaje utilizado¶
Comparar con el sistema operativo¶
Actividades¶
- Ejecuta las consultas.
- Compara los resultados con
free -h. - Configura la unidad como porcentaje.
- Representa el porcentaje utilizado como un indicador.
- Explica por qué el resultado puede cambiar entre consultas.
Sesión 9: calcular el uso del sistema de ficheros¶
Objetivo¶
Calcular el porcentaje de espacio utilizado en el sistema de ficheros raíz.
Consultar el tamaño total¶
Consultar el espacio disponible¶
Calcular el porcentaje utilizado¶
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay"
}
)
Comparar con el sistema operativo¶
Buscar sistemas con más del 80 % de uso¶
100 * (
1 -
node_filesystem_avail_bytes{
fstype!~"tmpfs|overlay"
}
/
node_filesystem_size_bytes{
fstype!~"tmpfs|overlay"
}
) > 80
Actividades¶
- Identifica el sistema de ficheros raíz.
- Excluye
tmpfs. - Excluye
overlay. - Compara la consulta con
df -h. - Configura la unidad del panel como porcentaje.
- Explica por qué se excluyen algunos tipos de sistemas de ficheros.
Sesión 10: consultar el tráfico de red¶
Objetivo¶
Calcular el tráfico recibido y enviado por las interfaces.
Bytes recibidos¶
Bytes enviados¶
Tráfico recibido por segundo¶
Tráfico enviado por segundo¶
Excluir la interfaz de loopback¶
Sumar tráfico por instancia¶
Comparar con el sistema operativo¶
Actividades¶
- Identifica las interfaces disponibles.
- Excluye
lo. - Representa el tráfico recibido.
- Representa el tráfico enviado.
- Configura la unidad como
bytes/sec. - Explica por qué se utiliza
rate().
Sesión 11: añadir Prometheus como fuente de datos en Grafana¶
Objetivo¶
Configurar Grafana para consultar Prometheus.
Acceder a Grafana¶
Abrir:
Crear la fuente de datos¶
Acceder a:
Seleccionar:
Configurar:
Activar:
Pulsar:
Resultado esperado¶
Grafana debe mostrar un mensaje indicando que la API de Prometheus responde correctamente.
Actividades¶
- Anota el nombre de la fuente.
- Anota la URL.
- Anota el modo de acceso.
- Comprueba si es la fuente predeterminada.
- Guarda una captura de la prueba correcta.
- Explica a qué equipo apunta
localhost.
Sesión 12: crear un dashboard básico¶
Objetivo¶
Crear un dashboard con información de disponibilidad y recursos.
Crear un dashboard nuevo y añadir los siguientes paneles.
Panel de disponibilidad de los objetivos¶
Consulta:
Visualización recomendada:
Título:
Panel de uso de CPU¶
Consulta:
Visualización recomendada:
Unidad:
Título:
Panel de uso de memoria¶
Consulta:
Visualización recomendada:
Unidad:
Título:
Panel de uso del sistema de ficheros¶
Consulta:
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay"
}
)
Visualización recomendada:
Unidad:
Título:
Panel de carga del sistema¶
Consulta:
Visualización recomendada:
Título:
Panel de tráfico recibido¶
Consulta:
Visualización recomendada:
Unidad:
Título:
Actividades¶
- Crea los seis paneles.
- Selecciona Prometheus como fuente.
- Configura las unidades.
- Guarda el dashboard.
- Comprueba que los paneles muestran datos.
- Anota el nombre del dashboard.
Sesión 13: probar un objetivo en estado DOWN¶
Objetivo¶
Comprobar cómo detecta Prometheus la caída de Node Exporter.
Comprobar el estado inicial¶
Resultado esperado:
Detener Node Exporter¶
Si se instaló manualmente:
Si se instaló mediante APT:
Esperar más de un intervalo de scraping.
Consultar el estado¶
Consultar el objetivo desde la API:
curl -s "$PROMETHEUS_URL/api/v1/targets" \
| jq -r '
.data.activeTargets[]
| select(.labels.job == "node_exporter")
| [
.labels.instance,
.health,
.lastError
]
| @tsv
'
Iniciar Node Exporter¶
Si se instaló manualmente:
Si se instaló mediante APT:
Comprobar el servicio:
Si se utiliza APT:
Esperar al siguiente scraping.
Verificar la recuperación¶
Resultado esperado:
Actividades¶
- Anota el estado inicial.
- Anota el error durante la interrupción.
- Anota el tiempo aproximado de detección.
- Anota el tiempo aproximado de recuperación.
- Explica la relación con
scrape_interval.
Sesión 14: diagnosticar una conexión incorrecta en Grafana¶
Objetivo¶
Diferenciar un problema de conexión de un problema de consulta.
Probar una URL incorrecta¶
Editar temporalmente la fuente de datos y sustituir:
por:
Pulsar:
Debe aparecer un error de conexión.
Restaurar la URL¶
Volver a configurar:
Pulsar:
Probar una consulta inexistente¶
En un panel ejecutar:
Esta consulta puede no devolver datos, pero la fuente puede estar funcionando correctamente.
Probar una consulta válida¶
Actividades¶
- Compara el error de conexión con una consulta vacía.
- Explica cómo se diagnostica cada caso.
- Utiliza el inspector del panel.
- Comprueba la API de Prometheus directamente.
- Documenta las diferencias.
Configurar la fuente mediante provisioning¶
Objetivo¶
Crear la fuente de datos automáticamente mediante un fichero YAML.
Crear el directorio¶
Crear el fichero¶
sudo tee /etc/grafana/provisioning/datasources/prometheus.yml > /dev/null <<'EOF'
apiVersion: 1
datasources:
- name: Prometheus
uid: prometheus
type: prometheus
access: proxy
url: http://localhost:9090
isDefault: true
editable: true
EOF
Reiniciar Grafana¶
Comprobar:
Acceder a:
Comprobar que aparece:
Actividades¶
- Crea el fichero de provisioning.
- Reinicia Grafana.
- Comprueba que la fuente existe.
- Comprueba su UID.
- Comprueba que es la fuente predeterminada.
- Consulta los registros de Grafana.
Consultar errores de provisioning¶
Revisar el fichero:
Diagnóstico de problemas¶
Prometheus no está activo¶
Comprobar:
Consultar los registros:
Validar la configuración:
Comprobar el puerto:
Node Exporter no está activo¶
Para una instalación manual:
Para una instalación mediante APT:
Consultar los registros de una instalación manual:
Consultar los registros de una instalación mediante APT:
Comprobar el endpoint:
Comprobar el puerto:
El target aparece como DOWN¶
Comprobar directamente Node Exporter:
Comprobar la configuración:
Consultar el último error:
curl -s "$PROMETHEUS_URL/api/v1/targets" \
| jq -r '
.data.activeTargets[]
| select(.labels.job == "node_exporter")
| .lastError
'
Posibles causas:
- Puerto incorrecto.
- Servicio detenido.
- Dirección incorrecta.
- Firewall.
- Error de YAML.
- Prometheus no se ha reiniciado.
- Node Exporter escucha solo en otra interfaz.
- Grafana y Prometheus utilizan redes diferentes.
Grafana no conecta con Prometheus¶
Comprobar Prometheus desde el servidor de Grafana:
Si están en servidores separados:
Comprobar la conectividad:
Consultar los registros:
Revisar:
- URL.
- Puerto.
- Nombre DNS.
- Red de contenedores.
- Firewall.
- Modo de acceso.
- TLS.
- Autenticación.
Grafana conecta, pero el panel está vacío¶
Comprobar:
Después:
Y:
Revisar:
- Fuente seleccionada.
- Consulta.
- Rango temporal.
- Variables del dashboard.
- Filtros.
- Unidades.
- Estado de los targets.
Evidencias del laboratorio¶
Crear el directorio:
Guardar información del sistema¶
{
echo "===== SISTEMA ====="
echo "Fecha: $(date)"
echo "Hostname: $(hostname)"
echo "Sistema: $(lsb_release -ds)"
echo "Arquitectura: $(uname -m)"
echo "Kernel: $(uname -r)"
} | tee \
~/laboratorio-grafana/evidencias/laboratorio-integrador/sistema.txt
Guardar los estados de los servicios¶
{
echo "===== PROMETHEUS ====="
systemctl is-active prometheus
systemctl is-enabled prometheus
echo
echo "===== NODE EXPORTER MANUAL ====="
systemctl is-active node_exporter 2>/dev/null || true
systemctl is-enabled node_exporter 2>/dev/null || true
echo
echo "===== NODE EXPORTER APT ====="
systemctl is-active prometheus-node-exporter 2>/dev/null || true
systemctl is-enabled prometheus-node-exporter 2>/dev/null || true
echo
echo "===== GRAFANA ====="
systemctl is-active grafana-server
systemctl is-enabled grafana-server
} | tee \
~/laboratorio-grafana/evidencias/laboratorio-integrador/servicios.txt
Guardar los puertos¶
sudo ss -lntp \
| grep -E ':(3000|9090|9100)' \
> ~/laboratorio-grafana/evidencias/laboratorio-integrador/puertos.txt
Guardar la configuración de Prometheus¶
sudo cp \
/etc/prometheus/prometheus.yml \
~/laboratorio-grafana/evidencias/laboratorio-integrador/prometheus.yml
Guardar los objetivos¶
curl -s "$PROMETHEUS_URL/api/v1/targets" \
| jq \
> ~/laboratorio-grafana/evidencias/laboratorio-integrador/targets.json
Guardar la consulta up¶
curl -sG "$PROMETHEUS_URL/api/v1/query" \
--data-urlencode 'query=up' \
| jq \
> ~/laboratorio-grafana/evidencias/laboratorio-integrador/query-up.json
Guardar la salud de Grafana¶
curl -s "$GRAFANA_URL/api/health" \
| jq \
> ~/laboratorio-grafana/evidencias/laboratorio-integrador/grafana-health.json
Guardar una muestra de Node Exporter¶
curl -s "$NODE_EXPORTER_URL/metrics" \
| head -n 100 \
> ~/laboratorio-grafana/evidencias/laboratorio-integrador/node-exporter-sample.txt
Guardar los registros¶
sudo journalctl -u prometheus \
--since "30 minutes ago" \
--no-pager \
> ~/laboratorio-grafana/evidencias/laboratorio-integrador/prometheus.log
Para una instalación manual de Node Exporter:
sudo journalctl -u node_exporter \
--since "30 minutes ago" \
--no-pager \
> ~/laboratorio-grafana/evidencias/laboratorio-integrador/node-exporter.log
Para una instalación mediante APT:
sudo journalctl -u prometheus-node-exporter \
--since "30 minutes ago" \
--no-pager \
> ~/laboratorio-grafana/evidencias/laboratorio-integrador/node-exporter.log
sudo journalctl -u grafana-server \
--since "30 minutes ago" \
--no-pager \
> ~/laboratorio-grafana/evidencias/laboratorio-integrador/grafana.log
Script de comprobación final¶
El siguiente script detecta automáticamente si Node Exporter utiliza la unidad manual o la unidad instalada mediante APT.
Crear el script¶
cat > /tmp/comprobar-laboratorio.sh <<'EOF'
#!/usr/bin/env bash
set -u
echo "===== COMPROBACIÓN DEL LABORATORIO ====="
echo
check_service() {
local service="$1"
printf '%-35s ' "$service"
if systemctl is-active --quiet "$service"; then
echo "ACTIVO"
else
echo "NO ACTIVO"
fi
}
check_http() {
local name="$1"
local url="$2"
printf '%-35s ' "$name"
if curl -fsS "$url" >/dev/null 2>&1; then
echo "OK"
else
echo "ERROR"
fi
}
check_service prometheus
if systemctl is-active --quiet node_exporter; then
check_service node_exporter
else
check_service prometheus-node-exporter
fi
check_service grafana-server
check_http "Prometheus saludable" \
"http://localhost:9090/-/healthy"
check_http "Prometheus preparado" \
"http://localhost:9090/-/ready"
check_http "Node Exporter /metrics" \
"http://localhost:9100/metrics"
check_http "API de Grafana" \
"http://localhost:3000/api/health"
printf '%-35s ' "Configuración Prometheus"
if promtool check config \
/etc/prometheus/prometheus.yml \
>/dev/null 2>&1; then
echo "VÁLIDA"
else
echo "INVÁLIDA"
fi
printf '%-35s ' "Consulta up"
if curl -fsS -G \
http://localhost:9090/api/v1/query \
--data-urlencode 'query=up' \
| jq -e '.status == "success"' \
>/dev/null 2>&1; then
echo "OK"
else
echo "ERROR"
fi
printf '%-35s ' "Target node_exporter"
if curl -fsS -G \
http://localhost:9090/api/v1/query \
--data-urlencode 'query=up{job="node_exporter"}' \
| jq -e '
.data.result
| length > 0
and .[0].value[1] == "1"
' \
>/dev/null 2>&1; then
echo "UP"
else
echo "DOWN O SIN DATOS"
fi
EOF
Dar permisos de ejecución¶
Ejecutar el script¶
Resultado esperado:
===== COMPROBACIÓN DEL LABORATORIO =====
prometheus ACTIVO
node_exporter ACTIVO
grafana-server ACTIVO
Prometheus saludable OK
Prometheus preparado OK
Node Exporter /metrics OK
API de Grafana OK
Configuración Prometheus VÁLIDA
Consulta up OK
Target node_exporter UP
Ejemplo de sesión completa¶
$ systemctl is-active prometheus
active
$ systemctl is-active node_exporter
active
$ systemctl is-active grafana-server
active
$ curl http://localhost:9090/-/healthy
Prometheus is Healthy.
$ curl -I http://localhost:9100/metrics
HTTP/1.1 200 OK
$ curl -s http://localhost:3000/api/health \
| jq -r '.database'
ok
$ promtool check config /etc/prometheus/prometheus.yml
Checking /etc/prometheus/prometheus.yml
SUCCESS: configuration is valid
$ curl -s http://localhost:9090/api/v1/targets \
| jq -r '
.data.activeTargets[]
| [.labels.job, .labels.instance, .health]
| @tsv
'
prometheus localhost:9090 up
node_exporter localhost:9100 up
$ curl -sG http://localhost:9090/api/v1/query \
--data-urlencode 'query=up' \
| jq -r '
.data.result[]
| [.metric.job, .metric.instance, .value[1]]
| @tsv
'
prometheus localhost:9090 1
node_exporter localhost:9100 1
En Grafana se crea una fuente de datos:
Después se crea un dashboard con los paneles:
Estado de los objetivos
Uso de CPU
Uso de memoria
Uso del sistema de ficheros raíz
Carga del sistema
Tráfico recibido
Actividad integradora¶
Objetivo¶
Construir una plataforma funcional de monitorización con Prometheus, Node Exporter y Grafana.
Parte 1: servicios¶
- Comprobar el estado de Prometheus.
- Comprobar el estado de Node Exporter.
- Comprobar el estado de Grafana.
- Comprobar los puertos
3000,9090y9100.
Parte 2: Node Exporter¶
- Consultar
/metrics. - Localizar métricas de CPU.
- Localizar métricas de memoria.
- Localizar métricas de disco.
- Localizar métricas de red.
Parte 3: Prometheus¶
- Configurar el job
prometheus. - Configurar el job
node_exporter. - Añadir etiquetas personalizadas.
- Validar la configuración.
- Reiniciar Prometheus.
- Comprobar los objetivos.
- Consultar la métrica
up.
Parte 4: PromQL¶
- Consultar el uso de CPU.
- Consultar el uso de memoria.
- Consultar el uso de
/. - Consultar el tráfico recibido.
- Consultar la carga del sistema.
Parte 5: Grafana¶
- Añadir Prometheus como fuente de datos.
- Probar la conexión.
- Establecer la fuente como predeterminada.
- Crear un dashboard.
- Crear al menos cuatro paneles.
- Configurar las unidades.
- Guardar el dashboard.
Parte 6: diagnóstico¶
- Detener Node Exporter.
- Observar el estado
DOWN. - Consultar el mensaje de error.
- Iniciar Node Exporter.
- Comprobar la recuperación.
- Provocar temporalmente un error de conexión en Grafana.
- Restaurar la configuración.
- Documentar las comprobaciones.
Entregables¶
El alumno debe entregar:
- Fichero
prometheus.yml. - Evidencia de los servicios activos.
- Evidencia del endpoint
/metrics. - Evidencia de los objetivos en estado
UP. - Resultado de la consulta
up. - Consultas PromQL utilizadas.
- Capturas del dashboard.
- Resultado del diagnóstico de un target
DOWN. - Informe de comprobación final.
- Explicación breve de la arquitectura.
Estructura recomendada:
laboratorio-prometheus-grafana/
├── prometheus.yml
├── consultas-promql.txt
├── dashboard/
│ └── dashboard-exportado.json
├── evidencias/
│ ├── servicios.txt
│ ├── puertos.txt
│ ├── targets.json
│ ├── query-up.json
│ ├── grafana-health.json
│ ├── prometheus.log
│ ├── node-exporter.log
│ └── grafana.log
└── informe.md
Tabla de resultados¶
| Comprobación | Resultado | Observaciones |
|---|---|---|
| Prometheus activo | ||
| Node Exporter activo | ||
| Grafana activo | ||
Puerto 9090 |
||
Puerto 9100 |
||
Puerto 3000 |
||
Endpoint /metrics |
||
| Configuración válida | ||
| Target Prometheus | ||
| Target Node Exporter | ||
Consulta up |
||
| Consulta de CPU | ||
| Consulta de memoria | ||
| Consulta de almacenamiento | ||
| Fuente de datos creada | ||
| Conexión de Grafana | ||
| Dashboard creado | ||
Prueba DOWN realizada |
||
| Recuperación verificada | ||
| Evidencias guardadas |
Puntos clave¶
- Node Exporter expone métricas del sistema operativo.
- Prometheus recopila y almacena las métricas.
- Grafana consulta Prometheus y representa los resultados.
- PromQL es el lenguaje de consulta de Prometheus.
- El endpoint de Node Exporter es normalmente
/metrics. - Prometheus utiliza normalmente el puerto
9090. - Node Exporter utiliza normalmente el puerto
9100. - Grafana utiliza normalmente el puerto
3000. - La configuración de scraping se encuentra en
prometheus.yml. promtool check configpermite validar la configuración.- La sección Targets muestra el estado del scraping.
- La métrica
upindica si el último scraping fue correcto. - Los contadores suelen requerir
rate()para calcular velocidades. - Las métricas de CPU, memoria, disco y red pueden transformarse mediante PromQL.
- Grafana necesita una fuente de datos configurada.
- La URL de Prometheus debe ser accesible desde Grafana.
localhostdepende del equipo o contenedor que realiza la conexión.- El modo de acceso
ServeroProxyes adecuado para este laboratorio. - El inspector de Grafana ayuda a diagnosticar consultas.
- Una buena documentación debe incluir configuración, evidencias y resultados.
Preguntas de comprobación¶
- ¿Qué función cumple Node Exporter?
- ¿Qué función cumple Prometheus?
- ¿Qué función cumple Grafana?
- ¿Qué componente inicia normalmente el scraping?
- ¿Qué endpoint expone Node Exporter?
- ¿Qué puerto utiliza normalmente Prometheus?
- ¿Qué puerto utiliza normalmente Node Exporter?
- ¿Qué puerto utiliza normalmente Grafana?
- ¿Qué función cumple
prometheus.yml? - ¿Qué comando permite validar la configuración de Prometheus?
- ¿Qué información muestra la sección Targets?
- ¿Qué significa
up = 1? - ¿Qué significa
up = 0? - ¿Por qué se utiliza
rate()connode_cpu_seconds_total? - ¿Cómo calcularías el porcentaje de memoria utilizado?
- ¿Cómo calcularías el uso del sistema de ficheros raíz?
- ¿Cómo excluirías la interfaz
lo? - ¿Qué es una fuente de datos en Grafana?
- ¿Qué URL utilizarías si Grafana y Prometheus están en el mismo servidor?
- ¿Qué problema puede producirse al utilizar
localhosten contenedores? - ¿Qué diferencia existe entre un error de conexión y una consulta sin resultados?
- ¿Cómo comprobarías que Grafana puede consultar Prometheus?
- ¿Qué pasos seguirías si Node Exporter aparece como
DOWN? - ¿Qué pasos seguirías para comprobar la recuperación de un objetivo?
- ¿Qué evidencias incluirías en el informe final?
Criterios de evaluación¶
| Criterio | Puntuación |
|---|---|
| Comprobación inicial de los servicios | 1 punto |
| Verificación de Node Exporter | 1 punto |
| Configuración correcta del scraping | 2 puntos |
| Validación y diagnóstico en Prometheus | 1 punto |
| Consultas PromQL | 2 puntos |
| Configuración de Grafana | 1 punto |
| Creación del dashboard | 1 punto |
| Documentación y evidencias | 1 punto |
| Total | 10 puntos |
El laboratorio se considera superado cuando¶
- Los tres servicios están activos.
- Node Exporter responde en
/metrics. - Prometheus consulta correctamente Node Exporter.
- Los objetivos aparecen como
UP. - La consulta
updevuelve valores correctos. - Se han ejecutado consultas de CPU, memoria, almacenamiento y red.
- Grafana tiene configurada la fuente de datos Prometheus.
- El dashboard muestra datos.
- Se ha realizado una prueba de caída y recuperación.
- Las evidencias son reproducibles y están documentadas.
Comprobación final¶
Ejecutar:
Resultado esperado:
===== COMPROBACIÓN DEL LABORATORIO =====
prometheus ACTIVO
node_exporter ACTIVO
grafana-server ACTIVO
Prometheus saludable OK
Prometheus preparado OK
Node Exporter /metrics OK
API de Grafana OK
Configuración Prometheus VÁLIDA
Consulta up OK
Target node_exporter UP
El flujo completo del laboratorio es: