Prometheus y fuentes de datos¶
Este bloque presenta Prometheus, Node Exporter, PromQL y la integración de Prometheus como fuente de datos en Grafana.
Durante las prácticas se construirá una plataforma básica de monitorización para un servidor Ubuntu. El alumno aprenderá a instalar los componentes, comprobar su funcionamiento, recopilar métricas, realizar consultas y visualizar los resultados mediante Grafana.
El recorrido completo será:
Servidor Ubuntu
|
v
Node Exporter
|
| Endpoint HTTP de métricas
v
Prometheus
|
| Consultas PromQL
v
Grafana
|
v
Dashboards y alertas
El propósito de este bloque no es únicamente instalar herramientas. También se pretende comprender qué información proporciona cada componente, cómo se comunican entre sí y cómo se puede diagnosticar un problema cuando una métrica no aparece.
Objetivos¶
Al finalizar este bloque, el alumno podrá:
- Explicar la función de Prometheus en una plataforma de monitorización.
- Describir la arquitectura formada por Prometheus, Node Exporter y Grafana.
- Identificar la función de un exporter.
- Diferenciar entre un
joby untarget. - Comprender el modelo de recopilación pull utilizado por Prometheus.
- Instalar Prometheus en Ubuntu.
- Crear y configurar un servicio mediante
systemd. - Comprobar el estado de Prometheus.
- Consultar los registros de Prometheus mediante
journalctl. - Acceder a la interfaz web de Prometheus.
- Ejecutar consultas desde la interfaz web.
- Consultar la API HTTP de Prometheus.
- Instalar Node Exporter.
- Consultar el endpoint
/metrics. - Identificar métricas de CPU, memoria, disco y red.
- Configurar objetivos de scraping.
- Comprobar el estado de los objetivos configurados.
- Utilizar la métrica
up. - Escribir consultas básicas en PromQL.
- Filtrar series mediante etiquetas.
- Utilizar funciones como
rate(),avg(),sum()ycount(). - Calcular porcentajes de uso de CPU, memoria y almacenamiento.
- Añadir Prometheus como fuente de datos en Grafana.
- Crear un dashboard básico con métricas del sistema.
- Diagnosticar problemas de conectividad y configuración.
Contenidos¶
El bloque está dividido en los siguientes temas:
1. Entorno de laboratorio¶
Se documenta el sistema donde se realizarán las prácticas:
- Distribución y versión de Ubuntu.
- Hostname.
- Dirección IP.
- Arquitectura.
- Recursos disponibles.
- Usuarios.
- Puertos utilizados.
- Estado inicial del sistema.
- Conectividad de red.
- Sincronización horaria.
2. Arquitectura de Prometheus¶
Se estudian los elementos que forman la plataforma:
- Prometheus.
- Node Exporter.
- Exporters.
- Jobs.
- Targets.
- Scraping.
- Series temporales.
- Etiquetas.
- Almacenamiento.
- PromQL.
- Grafana.
3. Instalación de Prometheus¶
Se instala Prometheus como servicio del sistema:
- Creación del usuario de servicio.
- Descarga del binario.
- Creación de directorios.
- Configuración de permisos.
- Fichero
prometheus.yml. - Unidad de
systemd. - Inicio automático.
- Comprobación del puerto
9090. - Consulta de registros.
4. Interfaz web de Prometheus¶
Se aprende a utilizar la interfaz web para:
- Ejecutar consultas.
- Consultar métricas.
- Cambiar entre tabla y gráfico.
- Revisar objetivos.
- Consultar la configuración.
- Consultar información de ejecución.
- Revisar el estado de los objetivos.
5. Instalación de Node Exporter¶
Se instala Node Exporter para exponer métricas del servidor:
- CPU.
- Memoria.
- Sistemas de ficheros.
- Red.
- Procesos.
- Kernel.
- Tiempo de actividad.
6. Configuración del scraping¶
Se configura Prometheus para consultar Node Exporter:
scrape_interval.scrape_configs.job_name.static_configs.targets.- Etiquetas.
- Reinicio del servicio.
- Verificación de objetivos.
7. Consultas PromQL¶
Se introducen las consultas PromQL:
- Selección de métricas.
- Filtros mediante etiquetas.
- Operadores.
- Rangos temporales.
- Agregaciones.
- Funciones.
- Cálculos derivados.
- Uso de
rate(). - Agrupación con
by.
8. Añadir Prometheus como fuente de datos¶
Se conecta Grafana con Prometheus:
- Creación de la fuente de datos.
- Configuración de la URL.
- Prueba de conexión.
- Ejecución de consultas.
- Errores frecuentes.
- Diferencia entre
localhosty una dirección IP.
9. Laboratorio integrador¶
Se crea un dashboard operativo con:
- Uso de CPU.
- Uso de memoria.
- Uso del almacenamiento.
- Tráfico de red.
- Estado de Node Exporter.
- Consultas PromQL.
- Paneles de Grafana.
- Umbrales.
- Evidencias.
Arquitectura del bloque¶
La arquitectura básica del laboratorio 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:
+---------------------+
| Servidor Ubuntu |
| |
| Node Exporter |
| puerto 9100 |
| |
| Prometheus |
| puerto 9090 |
| |
| Grafana |
| puerto 3000 |
+---------------------+
Flujo de una métrica¶
Una métrica sigue este recorrido:
- El sistema operativo genera información.
- Node Exporter recopila información del sistema.
- Node Exporter publica los datos en el endpoint
/metrics. - Prometheus consulta periódicamente ese endpoint.
- Prometheus almacena las muestras.
- PromQL permite consultar las series temporales.
- Grafana ejecuta consultas contra Prometheus.
- Los paneles muestran los resultados.
- Las alertas pueden detectar condiciones anómalas.
Ejemplo:
Uso de CPU
|
v
node_cpu_seconds_total
|
v
Node Exporter :9100
|
v
Prometheus :9090
|
v
Consulta PromQL
|
v
Panel de Grafana
Componentes y puertos¶
| Componente | Función | Puerto habitual | URL |
|---|---|---|---|
| Grafana | Visualización y dashboards | 3000 | http://localhost:3000 |
| Prometheus | Recopilación y almacenamiento | 9090 | http://localhost:9090 |
| Node Exporter | Exposición de métricas | 9100 | http://localhost:9100/metrics |
Comprobación rápida de puertos¶
Comprobación 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
Resultado esperado:
Conceptos fundamentales¶
Prometheus¶
Prometheus es un sistema de monitorización y una base de datos de series temporales.
Sus funciones principales son:
- Consultar objetivos.
- Recopilar métricas.
- Almacenar muestras.
- Ejecutar consultas PromQL.
- Evaluar reglas de alerta.
- Exponer una API HTTP.
Node Exporter¶
Node Exporter es un agente que expone métricas del sistema operativo en un formato que Prometheus puede consultar.
Ejemplo de endpoint:
Ejemplo de métrica:
Job¶
Un job agrupa objetivos que cumplen una función común.
Ejemplo:
Target¶
Un target es un objetivo concreto que Prometheus consulta.
Ejemplo:
Scraping¶
El scraping es el proceso mediante el cual Prometheus consulta periódicamente un endpoint de métricas.
PromQL¶
PromQL es el lenguaje de consultas de Prometheus.
Ejemplo:
Ejemplo con filtro:
Sesiones prácticas¶
Sesión 1: revisar el entorno¶
Objetivo¶
Comprobar que el sistema está preparado para realizar el bloque.
Comandos¶
Consultar la versión del sistema:
Consultar el hostname:
Consultar la dirección IP:
Consultar la arquitectura:
Consultar la memoria:
Consultar el espacio libre:
Consultar la hora:
Ejemplo de sesión¶
$ lsb_release -ds
Ubuntu 24.04.5 LTS
$ hostname
monitoring-01
$ hostname -I
192.168.1.50
$ uname -m
x86_64
$ free -h
total used free shared buff/cache available
Mem: 3.8Gi 1.2Gi 620Mi 15Mi 2.0Gi 2.3Gi
$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 40G 12G 26G 32% /
Actividades¶
- Anota la versión del sistema operativo.
- Anota el hostname.
- Anota la dirección IP.
- Comprueba la arquitectura.
- Comprueba la memoria disponible.
- Comprueba el espacio libre.
- Explica por qué es importante documentar estos datos.
Sesión 2: comprobar la red¶
Objetivo¶
Verificar que el sistema dispone de conectividad y puede descargar los componentes del laboratorio.
Comandos¶
Consultar la ruta predeterminada:
Consultar la resolución DNS:
Probar conectividad IP:
Probar conectividad mediante nombre:
Comprobar acceso HTTPS:
Actividades¶
- Identifica la puerta de enlace predeterminada.
- Comprueba si funciona la resolución DNS.
- Comprueba si funciona el acceso HTTPS.
- Explica la diferencia entre conectividad IP y resolución DNS.
- Registra cualquier error observado.
Sesión 3: comprobar Prometheus¶
Objetivo¶
Verificar que Prometheus está instalado, activo y accesible.
Consultar el estado:
Comprobar si está activo:
Comprobar si se inicia automáticamente:
Comprobar el puerto:
Probar la interfaz HTTP:
Comprobar la salud:
Consultar registros:
Resultado esperado¶
Actividades¶
- Comprueba si Prometheus está activo.
- Comprueba si está habilitado.
- Comprueba el puerto
9090. - Consulta la respuesta HTTP.
- Consulta los últimos registros.
- Anota cualquier mensaje de advertencia o error.
Sesión 4: explorar la interfaz web de Prometheus¶
Objetivo¶
Ejecutar consultas desde la interfaz web de Prometheus.
Abrir en el navegador:
Si Prometheus está en otro servidor:
Ejecutar la consulta:
Después ejecutar:
Y:
Consultas iniciales¶
Consultar el momento de inicio del proceso:
Consultar el número de muestras almacenadas en memoria:
Consultar el número de series:
Actividades¶
- Ejecuta la consulta
up. - Cambia entre la vista de tabla y la vista gráfica.
- Identifica las etiquetas disponibles.
- Ejecuta una consulta relacionada con la memoria.
- Anota la versión de Prometheus.
- Explica qué significa el resultado de
up.
Sesión 5: comprobar Node Exporter¶
Objetivo¶
Verificar que Node Exporter expone métricas del sistema.
Comprobar el estado:
Comprobar el puerto:
Consultar el endpoint:
Mostrar las primeras líneas:
Buscar métricas de CPU:
Buscar métricas de memoria:
Buscar métricas de disco:
Buscar métricas de red:
Actividades¶
- Comprueba que Node Exporter está activo.
- Comprueba el puerto
9100. - Consulta cinco métricas diferentes.
- Identifica las etiquetas de una métrica.
- Explica qué representa
node_memory_MemTotal_bytes. - Explica qué representa
node_memory_MemAvailable_bytes.
Sesión 6: configurar el scraping¶
Objetivo¶
Configurar Prometheus para que consulte Node Exporter.
Editar el fichero:
Configuración mínima:
global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
- job_name: node_exporter
static_configs:
- targets:
- localhost:9100
Reiniciar Prometheus:
Comprobar el estado:
Consultar los objetivos:
Mostrar únicamente el trabajo, la instancia y el estado:
curl -s http://localhost:9090/api/v1/targets \
| jq -r '
.data.activeTargets[]
| [
.labels.job,
.labels.instance,
.health
]
| @tsv
'
Resultado esperado:
Actividades¶
- Añade Node Exporter a la configuración.
- Reinicia Prometheus.
- Comprueba que el servicio sigue activo.
- Consulta los objetivos.
- Comprueba que Node Exporter aparece como
up. - Ejecuta en Prometheus:
- Ejecuta:
Sesión 7: realizar consultas PromQL¶
Objetivo¶
Consultar métricas y calcular indicadores básicos del sistema.
Comprobar la disponibilidad¶
Consultar la memoria total¶
Consultar la memoria disponible¶
Calcular el uso de memoria¶
Consultar el tiempo de actividad¶
Consultar el espacio disponible¶
Calcular el uso del sistema de ficheros raíz¶
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay"
}
)
Calcular el uso de CPU¶
Consultar tráfico recibido¶
Consultar tráfico enviado¶
Actividades¶
- Ejecuta la consulta
up. - Filtra por el trabajo
node_exporter. - Consulta la memoria total.
- Calcula el uso de memoria.
- Calcula el uso de CPU.
- Consulta el espacio utilizado en
/. - Consulta el tráfico recibido.
- Explica para qué sirve
rate(). - Explica por qué se utiliza una ventana de cinco minutos.
Sesión 8: trabajar con etiquetas¶
Objetivo¶
Aprender a filtrar y agrupar series mediante etiquetas.
Consultar todas las interfaces de red:
Excluir la interfaz de loopback:
Seleccionar interfaces cuyo nombre comience por en:
Seleccionar el trabajo de Node Exporter:
Seleccionar una instancia concreta:
Operadores de etiquetas¶
| Operador | Significado |
|---|---|
= |
Igual a |
!= |
Distinto de |
=~ |
Coincide con una expresión regular |
!~ |
No coincide con una expresión regular |
Actividades¶
- Consulta todas las interfaces de red.
- Excluye la interfaz
lo. - Selecciona las interfaces que comienzan por
en. - Filtra las métricas del trabajo
node_exporter. - Identifica las etiquetas de una métrica.
- Explica la diferencia entre
=y=~.
Sesión 9: conectar Grafana con Prometheus¶
Objetivo¶
Añadir Prometheus como fuente de datos en Grafana.
Acceder a Grafana:
Desde la interfaz:
- Abrir Connections.
- Seleccionar Data sources.
- Pulsar Add data source.
- Seleccionar Prometheus.
- Introducir la URL:
- Pulsar Save & test.
- Comprobar que la conexión es correcta.
Si los servicios están en equipos diferentes¶
Utilizar la dirección accesible desde Grafana:
No utilizar:
si Prometheus está en otro servidor. En ese caso, localhost hace referencia al equipo donde se ejecuta Grafana.
Actividades¶
- Añade Prometheus como fuente de datos.
- Ejecuta la consulta:
- Ejecuta la consulta de uso de CPU.
- Comprueba que Grafana recibe datos.
- Anota la URL utilizada.
- Explica qué ocurriría si se introduce un puerto incorrecto.
Sesión 10: crear un dashboard básico¶
Objetivo¶
Crear un dashboard para consultar el estado general del servidor.
Crear un dashboard llamado:
Panel 1: uso de CPU¶
Consulta:
Configuración recomendada:
Panel 2: uso de memoria¶
Consulta:
Configuración recomendada:
Panel 3: uso del sistema de ficheros¶
Consulta:
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay"
}
)
Configuración recomendada:
Panel 4: estado de Node Exporter¶
Consulta:
Configuración recomendada:
Panel 5: tráfico recibido¶
Consulta:
Configuración recomendada:
Panel 6: memoria disponible¶
Consulta:
Configuración recomendada:
Actividades¶
- Crea el dashboard.
- Añade los seis paneles.
- Configura títulos claros.
- Configura las unidades.
- Añade umbrales a memoria y disco.
- Guarda el dashboard.
- Cambia el rango temporal.
- Comprueba que todos los paneles muestran datos.
- Ordena los paneles para facilitar la interpretación.
Práctica integradora¶
Objetivo¶
Construir y documentar una plataforma funcional con Prometheus, Node Exporter y Grafana.
Requisitos¶
El alumno debe:
- Utilizar un servidor Ubuntu.
- Tener Prometheus instalado.
- Tener Node Exporter instalado.
- Configurar al menos un objetivo de scraping.
- Verificar que el objetivo está en estado
up. - Ejecutar consultas PromQL.
- Conectar Grafana con Prometheus.
- Crear un dashboard operativo.
- Guardar evidencias de las comprobaciones.
Dashboard mínimo¶
El dashboard debe contener:
- Uso de CPU.
- Uso de memoria.
- Uso del sistema de ficheros raíz.
- Tráfico de red.
- Estado de Node Exporter.
- Memoria disponible.
- Un panel de texto con información del servidor.
Panel de texto sugerido¶
# Servidor Linux
Dashboard básico de monitorización.
## Componentes
- Node Exporter
- Prometheus
- Grafana
## Métricas
- CPU
- Memoria
- Almacenamiento
- Red
- Disponibilidad del exporter
Evidencias que se deben entregar¶
Crear una estructura similar a esta:
evidencias/
├── sistema.txt
├── servicios.txt
├── puertos.txt
├── targets-prometheus.json
├── consultas-promql.txt
└── captura-dashboard.png
Crear un informe del sistema:
mkdir -p evidencias
{
echo "Fecha: $(date)"
echo "Hostname: $(hostname)"
echo "IP: $(hostname -I)"
echo "Sistema: $(lsb_release -ds)"
echo "Kernel: $(uname -r)"
echo "Arquitectura: $(uname -m)"
} > evidencias/sistema.txt
Crear un informe de servicios:
for service in grafana-server prometheus node_exporter; do
echo "===== $service ====="
systemctl is-active "$service"
systemctl is-enabled "$service"
done > evidencias/servicios.txt
Guardar los puertos:
Guardar los objetivos de Prometheus:
Guardar algunas consultas PromQL:
cat > evidencias/consultas-promql.txt <<'EOF'
Consulta de disponibilidad:
up
Consulta de Node Exporter:
up{job="node_exporter"}
Uso de memoria:
100 * (
1 -
node_memory_MemAvailable_bytes
/
node_memory_MemTotal_bytes
)
Uso de CPU:
100 - (
avg by (instance) (
rate(node_cpu_seconds_total{mode="idle"}[5m])
) * 100
)
EOF
Diagnóstico básico¶
Prometheus aparece como down¶
Comprobar Node Exporter:
Probar directamente el endpoint:
Revisar el target:
Consultar los registros:
Prometheus no inicia¶
Consultar el estado:
Consultar los registros:
Revisar especialmente:
- Indentación del YAML.
- Nombre de las propiedades.
- Puertos.
- Rutas.
- Permisos.
- Sintaxis del fichero.
- Objetivos definidos.
Grafana no conecta con Prometheus¶
Desde el equipo donde se ejecuta Grafana:
Si Prometheus está en otro equipo:
Revisar:
- URL configurada.
- Dirección IP.
- Puerto
9090. - Cortafuegos.
- Rutas de red.
- Estado de Prometheus.
- Accesibilidad desde el servidor de Grafana.
Una consulta no muestra datos¶
Ejecutar primero:
Después:
Si no aparecen datos:
- Comprobar que Node Exporter está activo.
- Comprobar que el target está configurado.
- Comprobar que el target está
up. - Revisar el rango temporal.
- Comprobar el nombre de la métrica.
- Revisar las etiquetas.
- Consultar los registros de Prometheus.
Prácticas relacionadas¶
Este bloque se desarrolla mediante los siguientes documentos:
- Entorno de laboratorio
- Arquitectura de Prometheus
- Instalación de Prometheus
- Interfaz web de Prometheus
- Instalación de Node Exporter
- Configuración del scraping
- Consultas PromQL
- Añadir Prometheus como fuente de datos
- Laboratorio integrador
Puntos clave¶
- Prometheus recopila y almacena métricas como series temporales.
- Node Exporter expone métricas del sistema operativo.
- Grafana consulta Prometheus para visualizar los datos.
- Prometheus utiliza normalmente un modelo pull.
- Un
jobagrupa objetivos relacionados. - Un
targetes un endpoint concreto que Prometheus consulta. - El endpoint habitual de Node Exporter es
/metrics. - La métrica
uppermite comprobar la disponibilidad de un objetivo. rate()permite calcular la velocidad de cambio de una métrica acumulativa.- Las etiquetas permiten filtrar y agrupar series.
- Grafana y Prometheus deben tener conectividad.
localhosthace referencia al equipo desde el que se realiza la conexión.- La configuración de Prometheus utiliza YAML.
- Una indentación incorrecta puede impedir que Prometheus se inicie.
- Los dashboards deben utilizar títulos, unidades y umbrales claros.
- Las evidencias facilitan la revisión y el diagnóstico de las prácticas.
Preguntas de comprobación¶
- ¿Qué función cumple Prometheus?
- ¿Qué función cumple Node Exporter?
- ¿Qué función cumple Grafana?
- ¿Qué diferencia existe entre un
joby untarget? - ¿Qué puerto utiliza normalmente Prometheus?
- ¿Qué puerto utiliza normalmente Node Exporter?
- ¿Qué contiene el endpoint
/metrics? - ¿Qué significa que un objetivo aparezca como
up? - ¿Qué significa que un objetivo aparezca como
down? - ¿Qué función cumple
scrape_interval? - ¿Qué diferencia existe entre los modelos push y pull?
- ¿Para qué sirve la función
rate()? - ¿Por qué se utiliza una ventana como
[5m]? - ¿Cómo se filtra una métrica por la etiqueta
job? - ¿Qué diferencia existe entre
=y=~en PromQL? - ¿Cómo comprobarías que Node Exporter está activo?
- ¿Cómo comprobarías que Prometheus está saludable?
- ¿Por qué Grafana necesita acceder a Prometheus?
- ¿Qué problema produce utilizar
localhostcuando Prometheus está en otro servidor? - ¿Qué componentes debe incluir un dashboard operativo?
Criterios de evaluación¶
| Criterio | Puntuación |
|---|---|
| Comprensión de la arquitectura | 1 punto |
| Instalación y estado de Prometheus | 2 puntos |
| Instalación y estado de Node Exporter | 1 punto |
| Configuración correcta del scraping | 2 puntos |
| Consultas PromQL | 2 puntos |
| Integración con Grafana | 1 punto |
| Dashboard y evidencias | 1 punto |
| Total | 10 puntos |
Resultado esperado¶
Al finalizar este bloque, el alumno debe poder explicar y demostrar el recorrido completo de una métrica: