Arquitectura de Prometheus¶
Prometheus es una plataforma de monitorización basada en series temporales. Su función principal es recopilar métricas de diferentes objetivos, almacenarlas y permitir su consulta mediante PromQL.
En este bloque se utilizará una arquitectura formada por:
Sistema operativo
|
v
Node Exporter
|
| Scraping HTTP
v
Prometheus
|
| Consultas PromQL
v
Grafana
|
v
Dashboards
La arquitectura sigue normalmente un modelo pull: Prometheus consulta periódicamente los endpoints de métricas de los sistemas monitorizados.
Objetivos¶
Al finalizar esta sección, el alumno podrá:
- Explicar la función de Prometheus dentro de una plataforma de monitorización.
- Identificar los componentes principales de la arquitectura.
- Diferenciar entre Prometheus, Node Exporter y Grafana.
- Explicar el modelo de recopilación pull.
- Diferenciar entre un
job, untarget, una métrica y una serie temporal. - Comprender la función de las etiquetas.
- Identificar el endpoint
/metrics. - Interpretar la métrica
up. - Consultar los objetivos configurados en Prometheus.
- Consultar la API HTTP de Prometheus.
- Comprender el recorrido de una métrica desde el sistema operativo hasta Grafana.
- Diagnosticar dónde puede producirse un error en la cadena de monitorización.
Introducción¶
Una plataforma de monitorización debe responder a preguntas como:
- ¿Está disponible un servidor?
- ¿Cuánto CPU está utilizando?
- ¿Cuánta memoria queda disponible?
- ¿Qué sistemas de ficheros están próximos a llenarse?
- ¿Qué cantidad de tráfico circula por una interfaz de red?
- ¿Desde cuándo está funcionando un servicio?
- ¿Cuándo comenzó a degradarse el rendimiento?
Prometheus responde a estas preguntas recopilando valores medibles llamados métricas.
Una métrica es un valor asociado a un nombre y, opcionalmente, a un conjunto de etiquetas.
Ejemplo:
Esta métrica indica la memoria disponible expresada en bytes.
Una métrica con etiquetas puede tener esta forma:
node_network_receive_bytes_total{
device="ens33",
instance="localhost:9100",
job="node_exporter"
} 123456789
Las etiquetas permiten distinguir distintas series. Por ejemplo, el tráfico recibido puede medirse por cada interfaz de red.
Componentes de la arquitectura¶
Prometheus¶
Prometheus es el componente central de la plataforma.
Sus funciones principales son:
- Consultar objetivos de monitorización.
- Recopilar métricas periódicamente.
- Almacenar muestras como series temporales.
- Asociar etiquetas a los datos.
- Ejecutar consultas PromQL.
- Evaluar reglas de grabación.
- Evaluar reglas de alerta.
- Exponer una API HTTP.
- Proporcionar una interfaz web.
Prometheus escucha normalmente en el puerto:
URL habitual:
Flujo interno simplificado¶
Configuración
|
v
Descubrimiento de objetivos
|
v
Scraping
|
v
Procesamiento de etiquetas
|
v
Almacenamiento local
|
v
Consultas PromQL
Node Exporter¶
Node Exporter es un componente que expone métricas del sistema operativo.
Recopila información como:
- Tiempo de CPU.
- Memoria.
- Sistemas de ficheros.
- Interfaces de red.
- Tiempo de actividad.
- Procesos.
- Información del kernel.
- Carga del sistema.
Node Exporter no suele enviar los datos directamente a Prometheus. En su lugar, publica un endpoint HTTP que Prometheus consulta.
Endpoint habitual:
Puerto habitual:
Ejemplo de consulta:
Ejemplo de respuesta:
# HELP node_memory_MemAvailable_bytes Memory information field MemAvailable_bytes.
# TYPE node_memory_MemAvailable_bytes gauge
node_memory_MemAvailable_bytes 2.147483648e+09
La respuesta contiene:
- Comentarios de ayuda.
- Tipo de métrica.
- Nombre de la métrica.
- Etiquetas, si existen.
- Valor actual.
Exporters¶
Un exporter es un componente que transforma información de un sistema en métricas que Prometheus puede consultar.
No todos los sistemas exponen métricas en el formato de Prometheus. Un exporter actúa como adaptador.
Ejemplos:
| Exporter | Sistema monitorizado |
|---|---|
| Node Exporter | Sistema operativo |
| MySQL Exporter | MySQL |
| PostgreSQL Exporter | PostgreSQL |
| Blackbox Exporter | HTTP, DNS, ICMP y TCP |
| SNMP Exporter | Dispositivos de red mediante SNMP |
| Windows Exporter | Servidores Windows |
El patrón general es:
Grafana¶
Grafana es la herramienta utilizada para visualizar los datos almacenados en Prometheus.
Grafana no sustituye a Prometheus:
- Prometheus recopila y almacena métricas.
- Grafana consulta y representa esas métricas.
- PromQL se utiliza para obtener los datos desde Prometheus.
- Grafana puede utilizar otras fuentes de datos además de Prometheus.
Puerto habitual:
URL habitual:
Flujo entre Grafana y Prometheus:
Usuario
|
v
Grafana
|
| Consulta PromQL
v
Prometheus
|
| Devuelve series temporales
v
Grafana muestra un panel
Modelo de recopilación¶
Modelo pull¶
Prometheus utiliza normalmente un modelo pull. Esto significa que Prometheus inicia la conexión con el objetivo y solicita sus métricas.
Prometheus ---- HTTP GET /metrics ----> Node Exporter
Prometheus <--- Respuesta con métricas -- Node Exporter
La configuración determina:
- Qué objetivos se consultan.
- Cada cuánto tiempo se consultan.
- Qué etiquetas se asignan.
- Qué protocolo y ruta se utilizan.
Ventajas del modelo pull:
- Prometheus controla el intervalo de recopilación.
- Es sencillo comprobar si un objetivo responde.
- La configuración está centralizada.
- Se puede detectar si un objetivo está caído.
- No es necesario configurar cada exporter para enviar datos.
Modelo push¶
En un modelo push, el sistema monitorizado inicia la comunicación y envía los datos hacia otro componente.
Prometheus no utiliza normalmente este modelo para la monitorización habitual. Sin embargo, existen mecanismos complementarios, como Pushgateway, para casos concretos.
Comparación¶
| Característica | Modelo pull | Modelo push |
|---|---|---|
| Quién inicia la conexión | Prometheus | Sistema monitorizado |
| Configuración principal | Prometheus | Cliente o emisor |
| Detección de objetivos caídos | Directa mediante up |
Requiere mecanismos adicionales |
| Uso habitual en Prometheus | Sí | Casos específicos |
Jobs y targets¶
Job¶
Un job es un grupo lógico de objetivos relacionados.
Ejemplo:
Este trabajo agrupa objetivos que exponen métricas del sistema operativo.
Otros ejemplos:
Target¶
Un target es un endpoint concreto que Prometheus consulta.
Ejemplo:
Un mismo job puede contener varios objetivos:
- job_name: linux_servers
static_configs:
- targets:
- server-01.example.local:9100
- server-02.example.local:9100
- server-03.example.local:9100
Representación:
Job: linux_servers
├── server-01.example.local:9100
├── server-02.example.local:9100
└── server-03.example.local:9100
Ejemplo de configuración¶
En este ejemplo:
| Elemento | Valor |
|---|---|
| Job | node_exporter |
| Target | localhost:9100 |
| Protocolo | HTTP |
| Ruta predeterminada | /metrics |
| Puerto | 9100 |
Scraping¶
El scraping es el proceso mediante el cual Prometheus consulta un endpoint de métricas.
La secuencia es:
- Prometheus lee su configuración.
- Identifica los objetivos.
- Espera el intervalo configurado.
- Realiza una petición HTTP.
- Lee las métricas devueltas.
- Aplica etiquetas.
- Almacena las muestras.
- Actualiza el estado del objetivo.
Configuración básica:
global:
scrape_interval: 15s
scrape_configs:
- job_name: node_exporter
static_configs:
- targets:
- localhost:9100
La propiedad scrape_interval indica cada cuánto tiempo se consulta un objetivo.
Ejemplo:
En este caso, Prometheus intentará recopilar las métricas cada treinta segundos.
Intervalo global e intervalo específico¶
Es posible definir un intervalo global:
Y sobrescribirlo para un trabajo concreto:
scrape_configs:
- job_name: node_exporter
scrape_interval: 10s
static_configs:
- targets:
- localhost:9100
El intervalo específico del trabajo tiene prioridad sobre el intervalo global.
Modelo de datos¶
Series temporales¶
Prometheus almacena los datos como series temporales.
Una serie se identifica mediante:
- El nombre de la métrica.
- El conjunto de etiquetas.
Ejemplo:
Cada muestra contiene:
- Un valor.
- Una marca temporal.
Representación conceptual:
Ejemplo:
Nombre: node_memory_MemAvailable_bytes
Instancia: localhost:9100
Job: node_exporter
Timestamp: 2026-09-24 16:30:00
Valor: 2147483648
Etiquetas¶
Las etiquetas permiten añadir contexto a una métrica.
Ejemplo:
En este caso:
cpu="0"identifica el procesador.mode="idle"identifica el modo de CPU.instance="localhost:9100"identifica el objetivo.job="node_exporter"identifica el trabajo.
Etiquetas habituales¶
| Etiqueta | Significado |
|---|---|
job |
Trabajo al que pertenece el objetivo |
instance |
Dirección del objetivo |
device |
Dispositivo, interfaz o recurso |
mountpoint |
Punto de montaje |
mode |
Modo de una métrica |
cpu |
Identificador de procesador |
Tipos de métricas¶
Prometheus utiliza varios tipos de métricas.
Counter¶
Un counter representa un valor acumulativo que normalmente solo aumenta.
Ejemplo:
Los contadores pueden reiniciarse cuando se reinicia el proceso o el sistema.
Para calcular una velocidad de cambio se utiliza normalmente rate():
Gauge¶
Un gauge representa un valor que puede aumentar o disminuir.
Ejemplos:
Histogram¶
Un histograma agrupa observaciones en intervalos.
Se utiliza habitualmente para estudiar distribuciones, como latencias de peticiones.
Summary¶
Un summary calcula determinados cuantiles en el cliente que genera la métrica.
En las primeras prácticas se trabajará principalmente con:
counter.gauge.
La métrica up¶
La métrica up es una métrica especial que indica si Prometheus ha podido recopilar métricas de un objetivo.
Ejemplo:
Resultado conceptual:
up{instance="localhost:9090",job="prometheus"} 1
up{instance="localhost:9100",job="node_exporter"} 1
Interpretación:
| Valor | Significado |
|---|---|
1 |
El objetivo respondió correctamente |
0 |
El objetivo no respondió correctamente |
Filtrar Node Exporter:
Filtrar una instancia:
Consultar objetivos caídos:
Contar objetivos disponibles:
Contar objetivos caídos:
La métrica
upindica si Prometheus pudo realizar el scraping. No significa necesariamente que todos los componentes internos del objetivo funcionen correctamente.
Configuración mínima¶
Un fichero de configuración básico puede ser:
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
Elementos de la configuración¶
global¶
Define valores generales:
scrape_interval: frecuencia de recopilación.evaluation_interval: frecuencia de evaluación de reglas.
scrape_configs¶
Contiene la configuración de los trabajos:
job_name¶
Identifica el trabajo:
static_configs¶
Define objetivos estáticos:
targets¶
Lista de endpoints que deben consultarse:
Etiquetas externas y personalizadas¶
Es posible añadir etiquetas a los objetivos mediante labels.
scrape_configs:
- job_name: node_exporter
static_configs:
- targets:
- localhost:9100
labels:
environment: laboratorio
team: sistemas
Las etiquetas pueden utilizarse en las consultas:
También se pueden definir etiquetas externas para identificar una instalación de Prometheus:
Service discovery¶
En un laboratorio pequeño se pueden definir los objetivos manualmente:
En entornos más grandes, los objetivos pueden descubrirse automáticamente mediante mecanismos como:
- DNS.
- Kubernetes.
- Consul.
- EC2.
- Azure.
- Google Cloud.
- Ficheros.
- Otros sistemas de descubrimiento.
Ejemplo conceptual mediante fichero:
El descubrimiento permite evitar la modificación constante del fichero principal de Prometheus cuando se incorporan nuevos servidores.
Recorrido completo de una métrica¶
Consideremos la métrica de memoria disponible.
Paso 1: el sistema operativo genera el dato¶
El sistema operativo conoce la memoria total y disponible.
Paso 2: Node Exporter expone la métrica¶
Paso 3: Prometheus realiza el scraping¶
Prometheus consulta:
Paso 4: Prometheus añade etiquetas¶
Paso 5: Prometheus almacena la muestra¶
La muestra se guarda con su valor y marca temporal.
Paso 6: PromQL consulta el dato¶
Paso 7: Grafana representa el resultado¶
Grafana puede mostrar el dato como:
- Valor instantáneo.
- Serie temporal.
- Indicador.
- Tabla.
- Gráfico de área.
- Panel de capacidad.
Ejemplo completo¶
Arquitectura del laboratorio¶
Servidor Ubuntu: 192.168.1.50
+---------------------------------------------------+
| |
| Node Exporter |
| 192.168.1.50:9100/metrics |
| |
| Prometheus |
| 192.168.1.50:9090 |
| |
| Grafana |
| 192.168.1.50:3000 |
| |
+---------------------------------------------------+
Configuración¶
global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets:
- localhost:9090
- job_name: node_exporter
static_configs:
- targets:
- localhost:9100
Comprobación de Node Exporter¶
Ejemplo:
Comprobación del objetivo¶
curl -s http://localhost:9090/api/v1/targets \
| jq -r '
.data.activeTargets[]
| [
.labels.job,
.labels.instance,
.health
]
| @tsv
'
Ejemplo:
Consulta desde PromQL¶
Consulta filtrada¶
Consulta para Grafana¶
Esta consulta calcula un porcentaje aproximado de memoria utilizada.
Sesiones prácticas¶
Sesión 1: identificar los componentes¶
Objetivo¶
Reconocer los componentes que forman la arquitectura del laboratorio.
Actividad¶
Completar la tabla:
| Componente | Función | Puerto | ¿Inicia la conexión? |
|---|---|---|---|
| Prometheus | 9090 | ||
| Node Exporter | 9100 | ||
| Grafana | 3000 |
Preguntas¶
- ¿Qué componente recopila las métricas?
- ¿Qué componente expone las métricas?
- ¿Qué componente visualiza los datos?
- ¿Qué componente inicia normalmente el scraping?
Sesión 2: consultar el endpoint de Node Exporter¶
Objetivo¶
Comprobar que Node Exporter expone métricas HTTP.
Comandos¶
Mostrar las primeras líneas:
Buscar métricas de CPU:
Buscar métricas de memoria:
Buscar métricas de red:
Ejemplo de sesión¶
$ curl -I http://localhost:9100/metrics
HTTP/1.1 200 OK
Content-Type: text/plain; version=0.0.4; charset=utf-8
$ curl -s http://localhost:9100/metrics | grep '^node_memory_' | head
node_memory_MemTotal_bytes 4.10437632e+09
node_memory_MemFree_bytes 6.291456e+08
node_memory_MemAvailable_bytes 2.414534656e+09
Actividades¶
- Comprueba que el endpoint responde con código
200. - Localiza tres métricas de CPU.
- Localiza tres métricas de memoria.
- Localiza tres métricas de red.
- Identifica las etiquetas presentes.
- Explica la diferencia entre
MemFreeyMemAvailable.
Sesión 3: inspeccionar los objetivos configurados¶
Objetivo¶
Comprobar los jobs, targets y estados detectados por Prometheus.
Consultar todos los objetivos¶
Mostrar la información relevante¶
curl -s http://localhost:9090/api/v1/targets \
| jq -r '
.data.activeTargets[]
| {
job: .labels.job,
instance: .labels.instance,
health: .health,
scrapeUrl: .scrapeUrl,
lastError: .lastError
}
'
Mostrar solo los objetivos caídos¶
curl -s http://localhost:9090/api/v1/targets \
| jq -r '
.data.activeTargets[]
| select(.health != "up")
| [
.labels.job,
.labels.instance,
.health,
.lastError
]
| @tsv
'
Actividades¶
- Cuenta cuántos objetivos hay.
- Anota el nombre de cada
job. - Anota la dirección de cada
target. - Comprueba el estado de salud.
- Indica qué error aparece cuando un objetivo está caído.
- Relaciona cada objetivo con su puerto.
Sesión 4: experimentar con up¶
Objetivo¶
Utilizar up para comprobar la disponibilidad de los objetivos.
Consultas¶
Actividades¶
- Ejecuta
up. - Identifica los objetivos disponibles.
- Detén temporalmente Node Exporter:
- Espera varios intervalos de scraping.
- Ejecuta:
- Inicia de nuevo el servicio:
- Comprueba cuándo vuelve a aparecer como disponible.
Esta práctica debe realizarse únicamente en el entorno de laboratorio. Detener un exporter en un servidor de producción puede generar alertas o pérdida de información.
Sesión 5: seguir una métrica¶
Objetivo¶
Seguir el recorrido de una métrica desde Node Exporter hasta Prometheus.
Paso 1: consultar directamente Node Exporter¶
Paso 2: consultar Prometheus mediante la API¶
curl -sG http://localhost:9090/api/v1/query \
--data-urlencode 'query=node_memory_MemAvailable_bytes' \
| jq
Paso 3: mostrar únicamente el valor¶
curl -sG http://localhost:9090/api/v1/query \
--data-urlencode 'query=node_memory_MemAvailable_bytes' \
| jq -r '.data.result[] | [.metric.instance, .value[1]] | @tsv'
Ejemplo de respuesta¶
Paso 4: consultar la misma métrica en PromQL¶
Actividades¶
- Compara el valor de Node Exporter con el valor de Prometheus.
- Explica por qué puede existir una pequeña diferencia temporal.
- Identifica las etiquetas añadidas por Prometheus.
- Explica qué representa
value[1]en la respuesta de la API.
Sesión 6: analizar etiquetas¶
Objetivo¶
Comprender cómo las etiquetas identifican una serie temporal.
Consulta¶
Observar especialmente:
Filtrar por modo¶
Filtrar por procesador¶
Filtrar por trabajo¶
Combinar filtros¶
Actividades¶
- Consulta todas las series de CPU.
- Filtra el procesador
0. - Filtra el modo
idle. - Combina ambos filtros.
- Explica por qué cada combinación representa una serie diferente.
Sesión 7: comprobar el modelo pull¶
Objetivo¶
Observar que Prometheus consulta a Node Exporter.
Paso 1: consultar Node Exporter¶
Paso 2: revisar la configuración¶
Paso 3: consultar el objetivo¶
curl -s http://localhost:9090/api/v1/targets \
| jq -r '
.data.activeTargets[]
| select(.labels.job == "node_exporter")
| [
.scrapeUrl,
.lastScrape,
.lastScrapeDuration,
.health
]
| @tsv
'
Actividades¶
- Identifica la URL de scraping.
- Identifica el momento del último scraping.
- Identifica la duración del último scraping.
- Comprueba el estado.
- Explica qué componente inicia la petición HTTP.
Diagnóstico de la arquitectura¶
Caso 1: Node Exporter no responde¶
Síntoma¶
Devuelve un error de conexión.
Comprobaciones¶
Posibles causas¶
- El servicio está detenido.
- El binario no existe.
- El puerto está ocupado.
- Hay un error en la unidad de
systemd. - El cortafuegos bloquea la conexión.
- Node Exporter está escuchando en otra dirección.
Caso 2: Node Exporter responde, pero Prometheus lo muestra como down¶
Comprobaciones¶
curl -s http://localhost:9090/api/v1/targets \
| jq -r '
.data.activeTargets[]
| select(.labels.job == "node_exporter")
| [.health, .lastError, .scrapeUrl]
| @tsv
'
Posibles causas¶
- El target está mal escrito.
- El puerto es incorrecto.
- La dirección no es accesible desde Prometheus.
- Hay un error de configuración YAML.
- El objetivo utiliza HTTPS cuando debería utilizar HTTP.
- El cortafuegos bloquea el puerto.
Caso 3: Grafana no muestra datos¶
Comprobaciones¶
- Verificar que Prometheus responde:
- Verificar que existen datos:
- Verificar la fuente de datos en Grafana.
- Comprobar que la URL es correcta.
- Comprobar que se utiliza el puerto
9090. - Ejecutar primero la consulta:
Error habitual¶
Si Grafana y Prometheus están en máquinas diferentes, esta URL puede ser incorrecta:
Debe utilizarse una dirección accesible desde el servidor de Grafana:
Actividad integradora¶
Objetivo¶
Representar y comprobar la arquitectura completa del laboratorio.
Tareas¶
- Dibuja la arquitectura del laboratorio.
- Identifica todos los componentes.
- Anota los puertos.
- Comprueba que Node Exporter responde.
- Comprueba que Prometheus puede realizar scraping.
- Comprueba la métrica
up. - Consulta una métrica de memoria.
- Conecta Grafana con Prometheus.
- Ejecuta una consulta desde Grafana.
- Documenta cualquier error encontrado.
Diagrama que debe completar el alumno¶
________________________
|
| ________________________
v
________________________
|
| ________________________
v
________________________
|
| ________________________
v
________________________
Tabla de resultados¶
| Comprobación | Comando o consulta | Resultado |
|---|---|---|
| Node Exporter responde | ||
| Prometheus está saludable | ||
| Target de Node Exporter | ||
up{job="node_exporter"} |
||
| Métrica de memoria | ||
| Fuente de datos de Grafana | ||
| Consulta desde Grafana |
Puntos clave¶
- Prometheus es el componente central de recopilación y consulta.
- Node Exporter expone métricas del sistema operativo.
- Grafana visualiza los datos obtenidos desde Prometheus.
- Prometheus utiliza normalmente un modelo de recopilación pull.
- Un
jobagrupa objetivos relacionados. - Un
targetes un endpoint concreto. - El endpoint habitual de métricas es
/metrics. - La métrica
upindica si el último scraping fue correcto. - Un valor
up = 1indica que el objetivo respondió. - Un valor
up = 0indica que el objetivo no respondió correctamente. - Las etiquetas identifican y clasifican las series temporales.
counterrepresenta valores acumulativos.gaugerepresenta valores que pueden subir o bajar.rate()se utiliza habitualmente con contadores.- Prometheus almacena muestras asociadas a marcas temporales.
- La API HTTP permite consultar objetivos y métricas.
- Grafana necesita conectividad con Prometheus.
- Un fallo puede producirse en el exporter, en la red, en Prometheus o en Grafana.
- La arquitectura debe verificarse de extremo a extremo.
- Una métrica visible en Node Exporter no garantiza que ya esté disponible en Prometheus.
Preguntas de comprobación¶
- ¿Qué función cumple Prometheus?
- ¿Qué función cumple Node Exporter?
- ¿Qué función cumple Grafana?
- ¿Qué significa que Prometheus utilice un modelo pull?
- ¿Qué es un
job? - ¿Qué es un
target? - ¿Qué endpoint expone normalmente Node Exporter?
- ¿Qué puerto utiliza normalmente Prometheus?
- ¿Qué puerto utiliza normalmente Node Exporter?
- ¿Qué indica la métrica
up? - ¿Qué diferencia existe entre
up = 1yup = 0? - ¿Qué es una serie temporal?
- ¿Para qué sirven las etiquetas?
- ¿Qué diferencia existe entre un
countery ungauge? - ¿Por qué se utiliza
rate()con algunas métricas? - ¿Qué información contiene una muestra?
- ¿Qué componente inicia normalmente la petición HTTP de scraping?
- ¿Qué puede provocar que un target aparezca como
down? - ¿Por qué una métrica puede aparecer en Node Exporter pero no en Prometheus?
- ¿Por qué Grafana no debe utilizar
localhostpara acceder a Prometheus cuando están en equipos diferentes? - ¿Qué comando permite consultar los objetivos de Prometheus?
- ¿Qué comando permite comprobar el endpoint de Node Exporter?
- ¿Qué consulta muestra todos los objetivos disponibles?
- ¿Qué consulta muestra únicamente los objetivos caídos?
- ¿Qué componente almacena las series temporales?
Criterios de finalización¶
La sección se considera superada cuando el alumno puede:
- Dibujar la arquitectura de Prometheus.
- Explicar la función de cada componente.
- Identificar los puertos principales.
- Explicar el modelo pull.
- Diferenciar
jobytarget. - Consultar el endpoint
/metrics. - Consultar la API de objetivos.
- Interpretar la métrica
up. - Identificar etiquetas de una serie.
- Seguir una métrica desde Node Exporter hasta Grafana.
- Diagnosticar un objetivo en estado
down. - Explicar por qué Grafana necesita acceder a Prometheus.
El recorrido completo que debe comprender el alumno es: