Entorno de laboratorio¶
Este documento describe el entorno utilizado durante el bloque Prometheus y fuentes de datos.
Antes de instalar o configurar Prometheus, Node Exporter y Grafana, es necesario comprobar que el sistema cumple los requisitos mínimos, que dispone de conectividad y que los puertos necesarios están disponibles.
El laboratorio se realizará sobre un servidor Ubuntu con la siguiente arquitectura:
Durante las prácticas, los alumnos deberán completar los datos pendientes y conservar las evidencias de las comprobaciones realizadas.
Objetivos¶
Al finalizar esta sección, el alumno podrá:
- Identificar las características principales del servidor de laboratorio.
- Comprobar la versión y arquitectura del sistema operativo.
- Consultar el hostname y la dirección IP.
- Verificar los recursos disponibles.
- Comprobar la conectividad de red.
- Identificar los puertos utilizados por los componentes del laboratorio.
- Consultar el estado de los servicios mediante
systemctl. - Consultar los registros mediante
journalctl. - Diferenciar entre usuarios personales y usuarios de servicio.
- Comprobar que Prometheus puede comunicarse con Node Exporter.
- Documentar el entorno antes de comenzar las prácticas.
Sistema operativo¶
El laboratorio utiliza Ubuntu como sistema operativo base.
| Propiedad | Valor |
|---|---|
| Distribución | Ubuntu |
| Versión | 24.04.5 LTS |
| Codename | Noble |
| Arquitectura | Pendiente |
| Hostname | Pendiente |
| Dirección IP | Pendiente |
| Zona horaria | Pendiente |
| Usuario principal | Pendiente |
Comprobar la versión de Ubuntu¶
Ejecutar:
Ejemplo de salida:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 24.04.5 LTS
Release: 24.04
Codename: noble
También puede consultarse el fichero del sistema:
Comando abreviado:
Resultado esperado:
Comprobar la arquitectura¶
Resultado habitual:
Consultar información completa del kernel:
La arquitectura x86_64 también puede aparecer como amd64.
Comprobar el hostname¶
También puede utilizarse:
Ejemplo:
Registrar el resultado:
Comprobar la dirección IP¶
Consultar las interfaces de red:
Mostrar únicamente las direcciones IPv4:
Consultar la dirección IP asignada al equipo:
Ejemplo:
Consultar la ruta predeterminada:
Ejemplo:
$ ip route
default via 192.168.1.1 dev ens33
192.168.1.0/24 dev ens33 proto kernel scope link src 192.168.1.50
Registrar los datos:
Interfaz principal: ______________________
Dirección IPv4: __________________________
Prefijo de red: __________________________
Puerta de enlace: ________________________
La dirección IP puede ser diferente en cada laboratorio. Puede utilizarse una red física, una máquina virtual, NAT, bridge o una red interna.
Recursos del sistema¶
Los componentes del laboratorio pueden ejecutarse en un entorno pequeño, aunque se recomienda disponer de suficientes recursos para que las consultas y los dashboards funcionen con fluidez.
Recursos recomendados¶
| Recurso | Mínimo recomendado |
|---|---|
| CPU | 2 núcleos |
| Memoria RAM | 4 GB |
| Almacenamiento libre | 20 GB |
| Arquitectura | amd64 / x86_64 |
| Acceso administrativo | Usuario con sudo |
| Conectividad | Acceso a Internet |
Consultar los procesadores¶
Consultar información detallada:
Ejemplo:
Consultar la memoria¶
Ejemplo:
$ free -h
total used free shared buff/cache available
Mem: 3.8Gi 1.2Gi 620Mi 15Mi 2.0Gi 2.3Gi
Swap: 2.0Gi 0B 2.0Gi
La columna available es especialmente útil porque indica una estimación de la memoria que puede utilizarse sin recurrir inmediatamente a la memoria de intercambio.
Consultar el almacenamiento¶
Consultar el espacio disponible:
Consultar únicamente el sistema de ficheros raíz:
Ejemplo:
Consultar los dispositivos:
Consultar la carga del sistema¶
Ejemplo:
Actividad¶
Completar la siguiente tabla:
| Recurso | Valor detectado |
|---|---|
| CPU disponibles | |
| Memoria total | |
| Memoria disponible | |
Espacio total en / |
|
Espacio libre en / |
|
| Carga del sistema |
Componentes del laboratorio¶
El entorno está formado por tres componentes principales.
| Componente | Función | Versión | Puerto | Estado |
|---|---|---|---|---|
| Grafana | Visualización y dashboards | Pendiente | 3000 | Pendiente |
| Prometheus | Recopilación y almacenamiento | Pendiente | 9090 | Pendiente |
| Node Exporter | Exposición de métricas del sistema | Pendiente | 9100 | Pendiente |
Grafana¶
Grafana proporciona la interfaz web desde la que se consultan y visualizan las métricas almacenadas en Prometheus.
Funciones principales:
- Crear dashboards.
- Crear paneles.
- Consultar datos mediante PromQL.
- Configurar unidades.
- Definir umbrales.
- Crear alertas.
- Comparar rangos temporales.
URL habitual:
Ejemplo:
Comprobar si el binario está instalado:
Consultar la versión:
Consultar el estado:
Comprobar el puerto:
Probar la respuesta HTTP:
Consultar los registros:
Prometheus¶
Prometheus recopila y almacena métricas como series temporales.
Funciones principales:
- Consultar objetivos.
- Realizar operaciones de scraping.
- Almacenar métricas.
- Ejecutar consultas PromQL.
- Evaluar reglas de alerta.
- Proporcionar una API HTTP.
URL habitual:
Ejemplo:
Consultar la versión:
Consultar el estado:
Comprobar el puerto:
Comprobar la salud del servicio:
Resultado esperado:
Consultar los registros:
Node Exporter¶
Node Exporter expone métricas del sistema operativo en un formato que Prometheus puede consultar.
Métricas habituales:
- Uso de CPU.
- Memoria total y disponible.
- Sistemas de ficheros.
- Tráfico de red.
- Tiempo de actividad.
- Procesos.
- Información del kernel.
Endpoint habitual:
Ejemplo:
Consultar la versión:
Consultar el estado:
Comprobar el puerto:
Consultar las métricas:
Mostrar las primeras líneas:
Buscar métricas de memoria:
Arquitectura¶
La arquitectura del entorno es la siguiente:
flowchart LR
SO[Servidor Ubuntu] --> NE[Node Exporter<br/>Puerto 9100]
P[Prometheus<br/>Puerto 9090] -->|Scraping HTTP| NE
G[Grafana<br/>Puerto 3000] -->|Consultas PromQL| P
U[Usuario] -->|Navegador web| G
También puede representarse de forma simplificada:
Sistema operativo
|
v
Node Exporter :9100
|
| Scraping
v
Prometheus :9090
|
| PromQL
v
Grafana :3000
|
v
Navegador del usuario
Flujo de una métrica¶
- El sistema operativo genera información.
- Node Exporter recopila esa información.
- Node Exporter publica las métricas en
/metrics. - Prometheus consulta periódicamente el endpoint.
- Prometheus almacena las muestras.
- PromQL permite consultar los datos.
- Grafana consulta Prometheus.
- Los paneles muestran los resultados.
Ejemplo:
CPU del servidor
|
v
node_cpu_seconds_total
|
v
Node Exporter :9100
|
v
Prometheus :9090
|
v
Consulta PromQL
|
v
Panel de Grafana
Usuarios y permisos¶
Usuario principal¶
El usuario principal es el utilizado por el alumno para realizar las prácticas.
Consultar el usuario actual:
Consultar su identidad:
Consultar sus grupos:
Comprobar los permisos administrativos:
Ejemplo:
Completar:
Usuario principal: _______________________
UID: _____________________________________
Grupo principal: _________________________
¿Puede utilizar sudo?: ___________________
Usuarios de servicio¶
Cada componente debería ejecutarse, preferiblemente, con un usuario de servicio específico.
| Usuario | Servicio | Función |
|---|---|---|
grafana |
Grafana | Ejecutar Grafana |
prometheus |
Prometheus | Ejecutar Prometheus |
node_exporter |
Node Exporter | Exponer métricas |
Consultar los usuarios:
Ejemplo:
El shell /usr/sbin/nologin evita que el usuario de servicio se utilice normalmente para iniciar sesiones interactivas.
Comprobar el usuario de ejecución¶
Consultar el usuario configurado en systemd:
systemctl show grafana-server -p User
systemctl show prometheus -p User
systemctl show node_exporter -p User
Consultar los procesos:
Recomendaciones de seguridad¶
- No ejecutar los servicios como
rootsi no es necesario. - No compartir contraseñas entre alumnos.
- No publicar credenciales en repositorios.
- No exponer los puertos del laboratorio directamente a Internet.
- Utilizar una red interna o un cortafuegos.
- Mantener Ubuntu actualizado.
- Revisar los permisos de los ficheros de configuración.
- No incluir contraseñas en capturas de pantalla.
Puertos del laboratorio¶
| Servicio | Puerto | Protocolo | Finalidad |
|---|---|---|---|
| Grafana | 3000 | TCP | Interfaz web |
| Prometheus | 9090 | TCP | Interfaz y API |
| Node Exporter | 9100 | TCP | Endpoint de métricas |
| SSH | 22 | TCP | Administración remota |
Consultar los puertos en escucha¶
Filtrar los puertos del laboratorio:
Comprobar cada puerto:
for port in 3000 9090 9100; do
echo "===== Puerto $port ====="
if sudo ss -lnt "( sport = :$port )" | grep -q LISTEN; then
echo "En escucha"
else
echo "No está en escucha"
fi
done
Identificar qué proceso utiliza un puerto:
Sustituir 3000 para consultar los demás puertos:
Verificaciones iniciales¶
Verificación 1: sistema operativo¶
Resultado esperado:
Verificación 2: arquitectura¶
Resultado esperado:
Verificación 3: hostname¶
Verificación 4: dirección IP¶
Verificación 5: hora del sistema¶
Consultar el estado:
Comprobar si está sincronizado:
Resultado esperado:
Consultar la zona horaria:
Una hora incorrecta puede provocar:
- Métricas aparentemente desordenadas.
- Dashboards vacíos.
- Comparaciones temporales incorrectas.
- Problemas al correlacionar métricas y logs.
- Evaluación incorrecta de alertas.
Verificación 6: conectividad¶
Consultar la ruta predeterminada:
Comprobar DNS:
Probar conectividad IP:
Probar conectividad mediante nombre:
Probar HTTPS:
Verificación 7: estado de servicios¶
for service in grafana-server prometheus node_exporter; do
printf "%-20s" "$service"
if systemctl is-active --quiet "$service"; then
echo "activo"
else
echo "no activo"
fi
done
Comprobar el inicio automático:
for service in grafana-server prometheus node_exporter; do
printf "%-20s" "$service"
systemctl is-enabled "$service" 2>/dev/null || true
done
Verificación 8: endpoints HTTP¶
Grafana¶
Prometheus¶
Node Exporter¶
Sesiones prácticas¶
Sesión 1: inventario del sistema¶
Objetivo¶
Recopilar la información básica del servidor de laboratorio.
Comandos¶
echo "Hostname: $(hostname)"
echo "IP: $(hostname -I | awk '{print $1}')"
echo "Sistema: $(lsb_release -ds)"
echo "Arquitectura: $(uname -m)"
echo "Kernel: $(uname -r)"
echo "CPUs: $(nproc)"
echo "Zona horaria: $(timedatectl show -p Timezone --value)"
Ejemplo de salida¶
Hostname: prometheus-lab-01
IP: 192.168.1.50
Sistema: Ubuntu 24.04.5 LTS
Arquitectura: x86_64
Kernel: 6.8.0-40-generic
CPUs: 2
Zona horaria: Europe/Madrid
Actividades¶
- Ejecuta los comandos.
- Completa la tabla del sistema operativo.
- Guarda la salida en un fichero:
mkdir -p ~/laboratorio-grafana/evidencias
{
echo "Fecha: $(date)"
echo "Hostname: $(hostname)"
echo "IP: $(hostname -I)"
echo "Sistema: $(lsb_release -ds)"
echo "Arquitectura: $(uname -m)"
echo "Kernel: $(uname -r)"
echo "CPUs: $(nproc)"
} | tee ~/laboratorio-grafana/evidencias/inventario-sistema.txt
Sesión 2: comprobar recursos¶
Objetivo¶
Verificar que el servidor tiene recursos suficientes.
Comandos¶
Actividades¶
- Anota el número de CPUs.
- Anota la memoria total.
- Anota la memoria disponible.
- Anota el espacio libre en
/. - Anota la carga del sistema.
- Explica si el equipo puede utilizarse para el laboratorio.
Sesión 3: comprobar usuarios¶
Objetivo¶
Identificar el usuario del alumno y los usuarios de servicio.
Comandos¶
Consultar usuarios de servicio:
Comprobar permisos administrativos:
Actividades¶
- Identifica el usuario principal.
- Comprueba si pertenece al grupo
sudo. - Comprueba si existen los usuarios de servicio.
- Explica por qué los servicios no deberían ejecutarse con el usuario personal del alumno.
- Registra los resultados.
Sesión 4: comprobar puertos¶
Objetivo¶
Relacionar cada componente con su puerto de escucha.
Comando¶
Actividades¶
Completar la tabla:
| Servicio | Puerto | Proceso | Dirección de escucha |
|---|---|---|---|
| Grafana | 3000 | ||
| Prometheus | 9090 | ||
| Node Exporter | 9100 |
Pregunta¶
Explica la diferencia entre:
y:
Orientación:
127.0.0.1permite conexiones desde el propio equipo.0.0.0.0indica que el servicio escucha en todas las interfaces IPv4, sujeto al cortafuegos.
Sesión 5: probar los servicios¶
Objetivo¶
Comprobar que los tres componentes responden.
Grafana¶
Prometheus¶
Node Exporter¶
Actividades¶
Completar:
| Servicio | URL | Código HTTP | Resultado |
|---|---|---|---|
| Grafana | http://localhost:3000 |
||
| Prometheus | http://localhost:9090 |
||
| Node Exporter | http://localhost:9100/metrics |
Un código 200 indica normalmente que el recurso se ha servido correctamente. Grafana puede responder con un código de redirección dependiendo de su configuración.
Sesión 6: consultar métricas de Node Exporter¶
Objetivo¶
Comprobar que Node Exporter expone métricas reales del sistema.
Consultar la memoria total:
Consultar la memoria disponible:
Consultar métricas de CPU:
Consultar métricas de disco:
Consultar métricas de red:
Actividades¶
- Localiza una métrica de memoria.
- Localiza una métrica de CPU.
- Localiza una métrica de almacenamiento.
- Localiza una métrica de red.
- Identifica las etiquetas de cada métrica.
- Explica qué representa la unidad
_bytes.
Sesión 7: comprobar los objetivos de Prometheus¶
Objetivo¶
Comprobar que Prometheus puede consultar sus objetivos.
Consultar la API de objetivos:
Mostrar la respuesta con formato legible:
Mostrar el estado de cada objetivo:
curl -s http://localhost:9090/api/v1/targets \
| jq -r '
.data.activeTargets[]
| [
.labels.job,
.labels.instance,
.health,
.lastError
]
| @tsv
'
Ejemplo:
Actividades¶
- Ejecuta la consulta.
- Identifica los trabajos configurados.
- Identifica las instancias.
- Comprueba el estado
health. - Registra cualquier valor de
lastError. - Explica qué significa que un objetivo aparezca como
down.
Sesión 8: generar un informe de estado¶
Objetivo¶
Crear un informe con el estado general del laboratorio.
Crear el directorio de evidencias:
Crear el informe:
cat > ~/laboratorio-grafana/evidencias/estado-laboratorio.txt <<EOF
Fecha: $(date)
Hostname: $(hostname)
IP: $(hostname -I | awk '{print $1}')
Sistema: $(lsb_release -ds)
Arquitectura: $(uname -m)
Kernel: $(uname -r)
CPUs: $(nproc)
Estado de los servicios:
Grafana: $(systemctl is-active grafana-server 2>/dev/null || echo no-disponible)
Prometheus: $(systemctl is-active prometheus 2>/dev/null || echo no-disponible)
Node Exporter: $(systemctl is-active node_exporter 2>/dev/null || echo no-disponible)
Puertos:
$(sudo ss -lntp | grep -E ':(3000|9090|9100)\b' || true)
EOF
Consultar el informe:
Actividades¶
- Ejecuta el script.
- Revisa el contenido.
- Añade el nombre del alumno.
- Añade el grupo.
- Añade las incidencias encontradas.
- Guarda el informe como evidencia.
Diagnóstico básico¶
Grafana no responde¶
Comprobar el servicio:
Consultar los registros:
Comprobar el puerto:
Probar localmente:
Prometheus no responde¶
Comprobar el servicio:
Consultar los registros:
Comprobar el puerto:
Comprobar la salud:
Node Exporter no responde¶
Comprobar el servicio:
Consultar los registros:
Comprobar el puerto:
Probar el endpoint:
Un puerto está ocupado por otro proceso¶
Identificar el proceso:
También puede utilizarse:
No se debe detener un proceso desconocido sin identificar antes su función.
Prometheus muestra un objetivo down¶
Revisar el estado de Node Exporter:
Probar el endpoint directamente:
Revisar la configuración:
Consultar los registros de Prometheus:
Grafana no conecta con Prometheus¶
Si ambos servicios están en el mismo servidor:
Si están en servidores diferentes:
Revisar:
- La URL configurada.
- La dirección IP.
- El puerto
9090. - Las reglas del cortafuegos.
- La conectividad entre servidores.
- El estado de Prometheus.
Ficha del entorno¶
Datos generales¶
| Propiedad | Valor |
|---|---|
| Alumno | |
| Grupo | |
| Fecha | |
| Distribución | Ubuntu |
| Versión | 24.04.5 LTS |
| Hostname | |
| Dirección IP | |
| Arquitectura | |
| Kernel | |
| CPUs | |
| Memoria total | |
Espacio libre en / |
|
| Zona horaria | |
| Usuario principal |
Componentes¶
| Componente | Versión | Puerto | Estado | Inicio automático |
|---|---|---|---|---|
| Grafana | 3000 | |||
| Prometheus | 9090 | |||
| Node Exporter | 9100 |
Verificaciones¶
| Verificación | Resultado | Observaciones |
|---|---|---|
| Sistema operativo | ||
| Arquitectura | ||
| Hostname | ||
| Dirección IP | ||
| Recursos | ||
| Conectividad | ||
| DNS | ||
| Sincronización horaria | ||
| Puerto 3000 | ||
| Puerto 9090 | ||
| Puerto 9100 | ||
| Grafana | ||
| Prometheus | ||
| Node Exporter | ||
| Objetivos de Prometheus |
Puntos clave¶
- El laboratorio utiliza Ubuntu como sistema operativo base.
- Grafana utiliza normalmente el puerto
3000. - Prometheus utiliza normalmente el puerto
9090. - Node Exporter utiliza normalmente el puerto
9100. - Grafana visualiza los datos almacenados en Prometheus.
- Prometheus recopila métricas mediante scraping.
- Node Exporter expone métricas del sistema mediante
/metrics. systemctlpermite consultar el estado de los servicios.journalctlpermite consultar los registros.curlpermite verificar rápidamente los endpoints HTTP.- La métrica
uppermite comprobar la disponibilidad de los objetivos. - La hora del sistema debe estar sincronizada.
- Los usuarios de servicio reducen los privilegios innecesarios.
- Los puertos y las direcciones IP deben documentarse antes de comenzar.
- Las evidencias ayudan a reproducir y diagnosticar las prácticas.
Preguntas de comprobación¶
- ¿Qué versión de Ubuntu utiliza el laboratorio?
- ¿Qué comando permite consultar el hostname?
- ¿Qué comando muestra la dirección IP?
- ¿Qué comando permite consultar la arquitectura?
- ¿Qué función cumple Grafana?
- ¿Qué función cumple Prometheus?
- ¿Qué función cumple Node Exporter?
- ¿Qué puerto utiliza Grafana?
- ¿Qué puerto utiliza Prometheus?
- ¿Qué puerto utiliza Node Exporter?
- ¿Qué contiene el endpoint
/metrics? - ¿Qué diferencia existe entre
localhosty una dirección IP de red? - ¿Qué comando permite comprobar si un puerto está en escucha?
- ¿Qué comando permite consultar los registros de Prometheus?
- ¿Qué significa que un objetivo de Prometheus esté
up? - ¿Qué significa que un objetivo esté
down? - ¿Por qué es importante sincronizar la hora?
- ¿Por qué se utilizan usuarios de servicio?
- ¿Cómo comprobarías que Prometheus está saludable?
- ¿Cómo comprobarías que Node Exporter responde correctamente?
Criterios de finalización¶
El entorno se considera preparado cuando:
- Se ha identificado la versión de Ubuntu.
- Se ha registrado el hostname.
- Se ha registrado la dirección IP.
- Se ha comprobado la arquitectura.
- Se han revisado los recursos disponibles.
- Se ha comprobado la conectividad.
- Se ha comprobado la sincronización horaria.
- Se han identificado los usuarios de servicio.
- Grafana responde en el puerto
3000. - Prometheus responde en el puerto
9090. - Node Exporter responde en el puerto
9100. - Prometheus puede consultar sus objetivos.
- Se ha completado la ficha del entorno.
- Se ha guardado un informe de evidencias.
El resultado final debe permitir responder rápidamente a estas preguntas:
¿Qué sistema operativo utiliza el laboratorio?
¿Qué hostname tiene el servidor?
¿Qué dirección IP tiene?
¿Qué servicios están instalados?
¿Qué versión tiene cada servicio?
¿En qué puerto escucha cada componente?
¿Están activos los servicios?
¿Puede Prometheus consultar Node Exporter?
¿Puede Grafana consultar Prometheus?