Fundamentos de telemetría¶
La telemetría permite recopilar información sobre el estado y el comportamiento de sistemas, aplicaciones y servicios.
Estos datos pueden utilizarse para:
- Detectar problemas.
- Analizar tendencias.
- Validar cambios.
- Investigar incidentes.
- Crear alertas.
- Mejorar la operación de una infraestructura.
- Planificar la capacidad futura.
En este bloque se estudiará el recorrido completo de una métrica:
Objetivos¶
Al finalizar este bloque podrás:
- Explicar qué es la telemetría.
- Diferenciar métricas, logs, trazas y eventos.
- Diferenciar los modelos de recopilación
pushypull. - Interpretar una serie temporal.
- Identificar el significado de un nombre de métrica y sus etiquetas.
- Comprender la relación entre muestreo, retención y almacenamiento.
- Explicar el concepto de downsampling.
- Identificar el papel de Grafana y de las fuentes de datos.
- Consultar métricas básicas de un sistema Linux.
- Interpretar consultas sencillas de PromQL.
1. ¿Qué es la telemetría?¶
La telemetría es el conjunto de técnicas utilizadas para recopilar, transmitir, almacenar y analizar información sobre un sistema.
Un sistema monitorizado puede ser:
- Un servidor.
- Una máquina virtual.
- Un contenedor.
- Una aplicación.
- Una base de datos.
- Un dispositivo de red.
- Un servicio web.
La telemetría permite responder preguntas como:
- ¿Está funcionando el sistema?
- ¿Cuánta CPU está utilizando?
- ¿Cuánta memoria queda disponible?
- ¿Cuánto espacio libre tiene el disco?
- ¿Cuántas peticiones recibe una aplicación?
- ¿Cuánto tardan las respuestas?
- ¿Cuándo comenzó un problema?
- ¿Qué componente puede estar provocando un error?
La telemetría convierte el comportamiento de un sistema en datos que pueden analizarse.
Sin telemetría¶
Sin datos históricos, normalmente solo podemos comprobar el estado actual:
No sabemos:
- Cuándo comenzó el incremento.
- Si es un pico puntual.
- Si ocurre periódicamente.
- Si está relacionado con un cambio reciente.
- Si otros componentes también están afectados.
Con telemetría¶
Con una serie de datos podemos observar la evolución:
En este caso se observa una tendencia ascendente que podría indicar una sobrecarga progresiva.
2. Tipos de telemetría¶
En observabilidad suelen distinguirse cuatro tipos principales de información:
| Tipo | Qué representa | Ejemplo |
|---|---|---|
| Métrica | Un valor numérico medible | Uso de CPU del 75 % |
| Log | Un registro textual | Error de conexión con una base de datos |
| Traza | El recorrido de una petición | Cliente → API → base de datos |
| Evento | Una acción puntual | Reinicio de un servicio |
2.1. Métricas¶
Una métrica es un valor numérico que describe el estado o la actividad de un sistema.
Ejemplos:
Uso de CPU: 73 %
Memoria disponible: 2,4 GiB
Espacio libre: 38 GiB
Peticiones por segundo: 125
Tiempo de respuesta: 240 ms
Una métrica puede representarse de forma conceptual así:
Ejemplo:
Esta línea contiene:
- Nombre de la métrica:
cpu_usage_percent. - Etiqueta
host:ubuntu-01. - Valor:
73. - Unidad conceptual: porcentaje.
Las métricas son especialmente útiles para:
- Crear gráficos.
- Detectar tendencias.
- Establecer umbrales.
- Generar alertas.
- Comparar sistemas.
Ejemplos en Ubuntu¶
Consultar la carga media:
Consultar el uso de memoria:
Consultar el espacio de disco:
Consultar las interfaces de red:
Estos comandos muestran valores puntuales. Una plataforma de monitorización permite recopilar esos valores periódicamente y almacenarlos.
2.2. Logs¶
Un log es un registro textual generado por una aplicación, un servicio o el sistema operativo.
Ejemplos:
Usuario autenticado correctamente
Conexión aceptada desde 192.168.1.25
ERROR: no se pudo conectar con la base de datos
Servicio reiniciado correctamente
Un log puede contener:
- Fecha y hora.
- Servicio o componente.
- Nivel de severidad.
- Mensaje.
- Identificador de proceso.
- Información adicional.
Niveles habituales¶
| Nivel | Significado |
|---|---|
DEBUG |
Información detallada para diagnóstico |
INFO |
Funcionamiento normal |
WARNING |
Situación anómala que no impide continuar |
ERROR |
Error que afecta a una operación |
CRITICAL |
Problema grave |
Consultar logs en Ubuntu¶
Consultar los últimos mensajes:
Consultar los logs de Grafana:
Consultar los logs de Prometheus:
Consultar los logs de Node Exporter:
Ver los logs en tiempo real:
Para salir:
Filtrar únicamente errores:
2.3. Trazas¶
Una traza representa el recorrido de una petición a través de diferentes componentes.
Es especialmente útil en aplicaciones distribuidas y arquitecturas basadas en microservicios.
Ejemplo:
Una petición puede producir estos tiempos:
La traza permite identificar qué parte de la petición está provocando la demora.
Una métrica podría indicar:
La traza ayuda a responder:
2.4. Eventos¶
Un evento representa una acción o cambio ocurrido en un instante concreto.
Ejemplos:
El servicio Grafana se ha reiniciado.
Se ha desplegado una nueva versión.
Se ha agotado el espacio disponible.
Se ha modificado la configuración.
Se ha creado un nuevo usuario.
En Ubuntu se pueden consultar algunos eventos mediante:
Los eventos son especialmente útiles para relacionar un cambio con un problema posterior.
Por ejemplo:
10:00 — Se despliega una nueva versión.
10:05 — Aumenta el tiempo de respuesta.
10:10 — Aparecen errores en los logs.
3. Comparación entre métricas, logs, trazas y eventos¶
| Tipo | Pregunta principal | Ejemplo |
|---|---|---|
| Métrica | ¿Cuánto? | CPU al 75 % |
| Log | ¿Qué ocurrió? | Error de conexión |
| Traza | ¿Dónde se produjo la demora? | Base de datos: 800 ms |
| Evento | ¿Qué cambió? | Reinicio del servicio |
Una investigación completa suele combinar varios tipos de telemetría:
Ejemplo integrado¶
Supongamos que una aplicación responde lentamente.
Métricas¶
Indican que las peticiones tardan más y que la carga del sistema es elevada.
Log¶
Indica un problema de conexión con la base de datos.
Traza¶
Localiza la mayor parte del retraso en la base de datos.
Evento¶
Puede explicar el inicio de la degradación.
4. Modelos de recopilación¶
Existen dos modelos principales para recopilar datos: pull y push.
4.1. Modelo pull¶
En el modelo pull, el sistema de monitorización consulta periódicamente al componente monitorizado.
Por ejemplo, Prometheus puede consultar:
El exporter devuelve métricas como:
Ventajas:
- El sistema de monitorización controla la frecuencia.
- Es sencillo comprobar si un objetivo responde.
- La configuración está centralizada.
- La ausencia de respuesta puede detectarse fácilmente.
Requisitos:
- El endpoint debe ser accesible.
- El componente monitorizado debe exponer las métricas.
- La red debe permitir la conexión.
4.2. Modelo push¶
En el modelo push, el componente monitorizado envía los datos al sistema receptor.
Puede ser adecuado cuando:
- El componente no puede ser consultado directamente.
- Se trata de un trabajo temporal.
- El sistema está detrás de una red restringida.
- Se utiliza un agente intermediario.
- El proceso dura poco tiempo y no permanece activo.
Ventajas:
- El sistema monitorizado decide cuándo enviar datos.
- Es adecuado para trabajos efímeros.
- Puede funcionar en redes donde el receptor no puede acceder directamente al origen.
4.3. Comparación¶
| Característica | Pull | Push |
|---|---|---|
| Quién inicia la comunicación | Sistema de monitorización | Sistema monitorizado |
| Ejemplo | Prometheus consulta un exporter | Un agente envía métricas |
| Ventaja principal | Control centralizado | Adecuado para trabajos temporales |
| Riesgo principal | El endpoint debe ser accesible | El receptor debe aceptar datos |
| Uso habitual | Servidores permanentes | Jobs y agentes |
En el laboratorio utilizaremos principalmente el modelo pull:
5. Series temporales¶
Una serie temporal es una secuencia de valores asociados a instantes concretos.
Ejemplo:
Cada valor tiene:
- Un instante de tiempo.
- Un valor.
- Una métrica.
- Un conjunto de etiquetas.
Una serie temporal puede representarse así:
Ejemplo:
Contiene:
- Nombre:
cpu_usage_percent. - Etiqueta
host:ubuntu-01. - Etiqueta
cpu:0. - Valor:
42.5.
5.1. Etiquetas¶
Las etiquetas permiten diferenciar y filtrar series temporales.
Estas métricas tienen el mismo nombre, pero representan series diferentes:
http_requests_total{method="GET",status="200"} 1500
http_requests_total{method="GET",status="500"} 12
http_requests_total{method="POST",status="200"} 430
Las etiquetas indican:
- Método HTTP.
- Código de respuesta.
- Equipo.
- Instancia.
- Servicio.
- Punto de montaje.
- Interfaz de red.
Una métrica con demasiadas combinaciones de etiquetas puede generar una cantidad excesiva de series. Este problema se conoce como alta cardinalidad.
5.2. Ejemplo de métrica de disco¶
node_filesystem_avail_bytes{
device="/dev/sda2",
fstype="ext4",
instance="localhost:9100",
job="node",
mountpoint="/"
} 18446744073
La métrica contiene:
| Elemento | Valor |
|---|---|
| Nombre | node_filesystem_avail_bytes |
| Dispositivo | /dev/sda2 |
| Sistema de ficheros | ext4 |
| Instancia | localhost:9100 |
| Trabajo | node |
| Punto de montaje | / |
| Valor | 18446744073 |
5.3. Tipos de métricas frecuentes¶
Gauge¶
Un gauge representa un valor que puede subir o bajar.
Ejemplos:
Counter¶
Un counter representa un valor acumulado que normalmente aumenta.
Ejemplo:
Para analizar la velocidad de incremento de un contador se utilizan funciones como rate.
Histograma¶
Un histograma permite analizar la distribución de valores, como tiempos de respuesta.
Summary¶
Un summary calcula determinados cuantiles o estadísticas sobre observaciones.
Es importante conocer el tipo y la unidad de una métrica antes de interpretarla.
6. Comprobar métricas con Node Exporter¶
Node Exporter expone métricas del sistema operativo en un endpoint HTTP.
Endpoint habitual:
Comprobar si responde:
La respuesta esperada contiene:
Consultar las primeras líneas:
Buscar métricas de CPU:
Buscar métricas de memoria:
Buscar métricas de disco:
Contar las métricas expuestas:
Ejemplos importantes¶
Es un contador acumulado expresado en segundos.
Representa memoria disponible expresada en bytes.
Representa la carga media del sistema durante un minuto.
7. Muestreo¶
El intervalo de muestreo indica cada cuánto se recopila una métrica.
Ejemplos:
- Cada 5 segundos.
- Cada 15 segundos.
- Cada 30 segundos.
- Cada minuto.
Un intervalo corto permite observar cambios rápidos, pero genera más datos.
Un intervalo largo reduce el almacenamiento, pero puede ocultar picos breves.
Ejemplo¶
Supongamos que la CPU cambia así:
Si recopilamos un valor cada minuto, detectamos el pico:
Si recopilamos un valor cada cinco minutos, podríamos obtener:
El pico habría desaparecido de la observación.
7.1. Configuración de Prometheus¶
Una configuración habitual puede ser:
scrape_interval: frecuencia con la que se consultan los objetivos.evaluation_interval: frecuencia con la que se evalúan reglas y alertas.
Consultar la configuración:
8. Retención de datos¶
La retención indica cuánto tiempo se conservan los datos.
Ejemplos:
- 24 horas.
- 15 días.
- 90 días.
- 1 año.
La política de retención debe equilibrar:
- Necesidad de análisis histórico.
- Espacio disponible.
- Rendimiento.
- Coste.
- Requisitos legales o de auditoría.
Una retención larga con un intervalo muy corto puede generar un volumen importante de datos.
La pregunta adecuada no es únicamente:
¿Cuántos datos podemos guardar?
También debemos preguntarnos:
¿Qué resolución necesitamos conservar para cada periodo?
9. Downsampling¶
El downsampling consiste en reducir la resolución de los datos históricos.
Ejemplo:
Se pueden conservar agregaciones como:
- Media.
- Mínimo.
- Máximo.
- Percentiles.
- Número de eventos.
Ejemplo conceptual¶
Datos originales:
Agregación de un minuto:
La agregación ocupa menos espacio, pero ya no conserva cada valor original.
Ventajas¶
- Reduce el espacio de almacenamiento.
- Mejora el rendimiento de consultas históricas.
- Permite conservar tendencias durante más tiempo.
Inconveniente¶
- Se pierde detalle.
- Los picos breves pueden desaparecer.
- Ya no es posible reconstruir exactamente los valores originales.
10. Grafana y las fuentes de datos¶
Grafana es una plataforma para consultar, visualizar y analizar datos.
Grafana normalmente no recopila directamente las métricas. Se conecta a una fuente de datos, ejecuta consultas y presenta los resultados.
Sus funciones principales son:
- Conectarse a fuentes de datos.
- Ejecutar consultas.
- Mostrar gráficos y tablas.
- Crear dashboards.
- Configurar variables.
- Representar alertas.
- Facilitar el análisis operativo.
El flujo habitual del laboratorio es:
10.1. Comprobar Prometheus¶
Comprobar que Prometheus está preparado:
Respuesta esperada:
Consultar la API de Prometheus:
10.2. Comprobar la fuente de datos en Grafana¶
En Grafana:
- Accede a la interfaz web.
- Abre Connections.
- Selecciona Data sources.
- Abre la fuente de datos de Prometheus.
- Comprueba la URL configurada.
- Pulsa Save & test.
La URL puede ser:
o:
11. Consultas PromQL básicas¶
Comprobar objetivos¶
Interpretación:
El objetivo está disponible.
El objetivo está configurado, pero no responde correctamente.
Consultar la carga del sistema¶
Consultar la memoria disponible¶
Consultar el tiempo desde el arranque¶
Calcular el uso aproximado de CPU¶
La métrica node_cpu_seconds_total es un contador acumulado. Por eso se utiliza rate para calcular su velocidad de cambio durante los últimos cinco minutos.
Calcular el porcentaje de memoria utilizada¶
12. Práctica guiada¶
Práctica 1: identificar el estado del sistema¶
Ejecuta:
Completa la tabla:
| Dato | Resultado |
|---|---|
| Nombre del equipo | |
| Tiempo encendido | |
| Carga del sistema | |
| Memoria total | |
| Memoria disponible | |
Espacio libre en / |
|
| Dirección IP |
Responde:
- ¿Cuánto tiempo lleva encendido el sistema?
- ¿La carga parece elevada?
- ¿Cuánta memoria está disponible?
- ¿Qué porcentaje del disco está ocupado?
- ¿Qué datos son métricas?
- ¿Qué datos son información de configuración?
Práctica 2: consultar Node Exporter¶
Comprueba el servicio:
Comprueba el endpoint:
Busca tres métricas:
Documenta cada métrica:
Práctica 3: consultar Prometheus¶
Accede a:
Ejecuta estas consultas:
Responde:
- ¿Cuántos objetivos están activos?
- ¿Qué valor tiene la carga de un minuto?
- ¿Cuánta memoria está disponible?
- ¿Qué sistemas de ficheros aparecen?
- ¿Cuántas series de CPU existen?
Práctica 4: crear un dashboard en Grafana¶
Crea un dashboard con los siguientes paneles.
Panel 1: carga media¶
Consulta:
Título:
Visualización recomendada:
Panel 2: uso de CPU¶
Consulta:
Título:
Panel 3: memoria utilizada¶
Consulta:
Título:
Configura la unidad del panel como porcentaje cuando corresponda.
13. Comprobación del entorno¶
Antes de realizar las prácticas, comprueba los servicios:
Los tres deberían devolver:
Comprueba los puertos:
Deberían aparecer:
Comprueba los endpoints:
14. Resolución de problemas¶
Node Exporter no responde¶
Comprueba el servicio:
Comprueba el puerto:
Consulta los logs:
Prometheus muestra up = 0¶
Comprueba el endpoint del exporter:
Revisa la configuración:
Valida el fichero:
Reinicia Prometheus después de modificar la configuración:
Grafana no muestra datos¶
Comprueba:
- Que Prometheus está activo.
- Que Node Exporter responde.
- Que
updevuelve1. - Que la URL de la fuente de datos es correcta.
- Que el intervalo temporal incluye datos recientes.
- Que la consulta no contiene etiquetas incorrectas.
Los valores parecen demasiado grandes¶
Comprueba la unidad y el tipo de métrica:
- Los bytes deben convertirse a KiB, MiB o GiB.
- Los contadores deben analizarse con
rateoirate. - Los segundos acumulados no son una duración instantánea.
- Los porcentajes suelen estar entre $$0$$ y $$100$$.
- La carga del sistema no es un porcentaje de CPU.
15. Actividad de investigación¶
Situación¶
Un usuario informa:
La aplicación responde lentamente desde hace unos minutos.
Investiga el sistema utilizando:
Consulta también Node Exporter:
curl -s http://127.0.0.1:9100/metrics \
| grep -E '^node_load|^node_memory_MemAvailable_bytes|^node_filesystem_avail_bytes' \
| head -20
Completa el informe:
## Incidencia
Descripción:
## Métricas observadas
Carga del sistema:
Memoria disponible:
Espacio libre:
## Logs observados
¿Hay errores recientes?
¿Qué servicios aparecen?
## Eventos observados
¿Se ha reiniciado algún servicio?
¿Hay unidades fallidas?
## Hipótesis
¿Cuál puede ser la causa del problema?
## Evidencias
¿Qué comandos y resultados apoyan la hipótesis?
## Siguiente comprobación
¿Qué consultarías a continuación?
16. Preguntas de comprobación¶
- ¿Qué es la telemetría?
- ¿Qué diferencia existe entre una métrica y un log?
- ¿Qué información proporciona una traza?
- ¿Qué es un evento?
- ¿Quién inicia la comunicación en el modelo
pull? - ¿Quién inicia la comunicación en el modelo
push? - ¿Qué representa una etiqueta?
- ¿Por qué una métrica puede tener varias series temporales?
- ¿Qué ocurre si el intervalo de muestreo es demasiado grande?
- ¿Qué problema resuelve la retención?
- ¿Qué objetivo tiene el downsampling?
- ¿Qué función cumple Node Exporter?
- ¿Qué función cumple Prometheus?
- ¿Qué función cumple Grafana?
- ¿Qué indica
up = 1? - ¿Por qué se utiliza
rateconnode_cpu_seconds_total? - ¿Qué puede indicar que una métrica deje de actualizarse?
- ¿Por qué conviene combinar métricas, logs, trazas y eventos?
17. Puntos clave¶
- La telemetría permite observar y analizar el comportamiento de los sistemas.
- Las métricas representan valores numéricos.
- Los logs proporcionan información textual y contextual.
- Las trazas muestran el recorrido de una petición.
- Los eventos representan acciones o cambios puntuales.
- Una métrica aislada ofrece menos información que una serie temporal.
- Las etiquetas identifican y diferencian series temporales.
- El modelo
pulles utilizado habitualmente por Prometheus. - Node Exporter expone métricas del sistema operativo.
- Prometheus recopila y almacena métricas.
- Grafana consulta y visualiza los datos.
- El muestreo determina la frecuencia de recopilación.
- La retención determina cuánto tiempo se conservan los datos.
- El downsampling reduce la resolución de los datos históricos.
- Una investigación eficaz combina diferentes tipos de telemetría.