Consultas PromQL¶
PromQL, abreviatura de Prometheus Query Language, es el lenguaje utilizado para consultar, seleccionar, transformar y agregar métricas almacenadas en Prometheus.
Durante el curso se utilizará PromQL para analizar métricas de Node Exporter y construir paneles operativos en Grafana. Las consultas permitirán responder preguntas como:
- ¿Está disponible un servicio?
- ¿Qué porcentaje de CPU está utilizando el equipo?
- ¿Cuánta memoria queda disponible?
- ¿Qué espacio libre existe en el sistema de archivos?
- ¿Cuál es el tráfico de red?
- ¿Qué targets están caídos?
- ¿Cómo ha evolucionado una métrica durante los últimos minutos?
Objetivos¶
Al finalizar esta sesión, el alumno podrá:
- Comprender la estructura de una métrica de Prometheus.
- Ejecutar consultas instantáneas en la interfaz web de Prometheus.
- Utilizar selectores de métricas y etiquetas.
- Diferenciar entre vectores instantáneos y vectores de rango.
- Utilizar operadores aritméticos, de comparación y lógicos.
- Calcular porcentajes de CPU, memoria y almacenamiento.
- Utilizar funciones como
rate,irate,increase,avg_over_timeymax_over_time. - Agrupar resultados mediante
sum,avg,min,maxycount. - Filtrar resultados con etiquetas.
- Detectar targets disponibles y no disponibles.
- Integrar consultas PromQL en Grafana.
- Crear consultas reutilizables para dashboards y alertas.
- Diagnosticar errores habituales de sintaxis y de interpretación.
Introducción¶
Prometheus almacena datos como series temporales. Cada serie está formada por:
- Un nombre de métrica.
- Un conjunto de etiquetas.
- Una secuencia de valores asociados a marcas de tiempo.
Una serie temporal puede representarse conceptualmente así:
Ejemplo:
En este ejemplo:
upes el nombre de la métrica.jobeinstanceson etiquetas.node_exporterylocalhost:9100son valores de etiquetas.1indica que el target está disponible.
Si el target no está disponible, Prometheus normalmente mostrará:
Acceso a la interfaz de Prometheus¶
La interfaz web de Prometheus suele estar disponible en:
Para ejecutar una consulta:
- Abre Prometheus en el navegador.
- Accede a la sección Query o Graph.
- Escribe una consulta en el campo de expresión.
- Ejecuta la consulta.
- Selecciona la vista de tabla o gráfico.
- Revisa las etiquetas y los valores devueltos.
Comprobar que Prometheus está disponible¶
Desde la terminal:
Resultado esperado:
Ejecutar una consulta mediante la API¶
La API HTTP de Prometheus permite ejecutar consultas desde la terminal.
Si jq está instalado:
Estructura de una métrica¶
Nombre de métrica¶
Una consulta sencilla puede contener únicamente el nombre de una métrica:
Esta consulta devuelve el estado de todos los targets conocidos por Prometheus.
Otros ejemplos:
Etiquetas¶
Las etiquetas permiten diferenciar distintas series que comparten el mismo nombre de métrica.
Ejemplo:
Esta consulta devuelve únicamente las series cuyo valor de job sea node_exporter.
Otro ejemplo:
Selector exacto¶
El operador = selecciona etiquetas con un valor exacto:
Selector distinto¶
El operador != excluye las series cuyo valor coincide:
Expresión regular positiva¶
El operador =~ selecciona valores que coinciden con una expresión regular:
Seleccionar varias instancias:
Expresión regular negativa¶
El operador !~ excluye los valores que coinciden con una expresión regular:
Combinar varias etiquetas¶
Las etiquetas dentro de un selector se separan mediante comas.
Tipos de datos de PromQL¶
PromQL trabaja con varios tipos de datos principales.
Vector instantáneo¶
Un vector instantáneo contiene una muestra por cada serie seleccionada en un momento concreto.
Ejemplo:
También:
Vector de rango¶
Un vector de rango contiene las muestras de una serie durante un intervalo de tiempo.
Se indica entre corchetes:
Las unidades de tiempo más utilizadas son:
| Unidad | Significado |
|---|---|
s |
Segundos |
m |
Minutos |
h |
Horas |
d |
Días |
w |
Semanas |
y |
Años |
Ejemplos:
Escalar¶
Un escalar es un valor numérico sin etiquetas.
Ejemplo:
También puede obtenerse mediante funciones:
Cadena¶
PromQL admite cadenas en contextos concretos, aunque las consultas operativas habituales utilizan principalmente vectores y escalares.
Consultas básicas¶
Consultar todos los targets¶
Consultar Node Exporter¶
Consultar una métrica concreta¶
Consultar la memoria disponible¶
Consultar la memoria total¶
Consultar el espacio disponible¶
Consultar el tamaño total del sistema de archivos¶
Consultar el tiempo de actividad¶
Consultar información de la máquina¶
Operadores aritméticos¶
PromQL permite utilizar operadores matemáticos.
| Operador | Operación |
|---|---|
+ |
Suma |
- |
Resta |
* |
Multiplicación |
/ |
División |
% |
Módulo |
^ |
Potencia |
Convertir bytes a gigabytes¶
También puedes utilizar una aproximación decimal:
Calcular memoria utilizada¶
Calcular memoria utilizada en porcentaje¶
Calcular memoria disponible en porcentaje¶
Convertir bytes por segundo a megabytes por segundo¶
Operadores de comparación¶
Los operadores de comparación permiten filtrar o evaluar valores.
| Operador | Significado |
|---|---|
== |
Igual |
!= |
Distinto |
> |
Mayor que |
< |
Menor que |
>= |
Mayor o igual que |
<= |
Menor o igual que |
Targets caídos¶
Targets disponibles¶
Memoria disponible inferior al 20 %¶
Sistemas de archivos con menos del 15 % libre¶
CPU con carga elevada¶
El valor adecuado depende del número de CPU y de las características del equipo. Un umbral fijo no debe interpretarse sin contexto.
Operadores lógicos¶
Operador and¶
Devuelve las series que cumplen ambas condiciones:
Operador or¶
Devuelve las series que cumplen una condición u otra:
Operador unless¶
Devuelve las series de la primera expresión que no tengan correspondencia en la segunda:
Métricas de disponibilidad¶
Métrica up¶
La métrica up es una de las métricas más importantes de Prometheus.
Interpretación:
| Valor | Significado |
|---|---|
1 |
El scraping ha funcionado |
0 |
El scraping ha fallado |
Comprobar Node Exporter¶
Contar targets disponibles¶
Contar targets caídos¶
Calcular el porcentaje de targets disponibles¶
Calcular la disponibilidad de Node Exporter¶
Mostrar únicamente targets caídos¶
Consultar el último error de scraping¶
La información detallada del último error se consulta normalmente mediante la interfaz de targets o la API de Prometheus:
Métricas de CPU¶
Node Exporter expone la métrica:
Esta métrica es un contador acumulativo. Por ese motivo, normalmente se consulta mediante rate o irate.
CPU por modo¶
La consulta devuelve series diferenciadas por etiquetas como:
CPU en modo idle¶
Porcentaje de CPU utilizada¶
Una consulta habitual es:
La consulta:
- Calcula la tasa de tiempo en modo
idle. - Obtiene la media entre las CPU.
- Resta el resultado a
1. - Multiplica por
100.
CPU utilizada por instancia¶
CPU utilizada por núcleo¶
CPU utilizada por modo¶
Uso de CPU durante un intervalo corto¶
irate reacciona más rápidamente a cambios recientes, pero puede ser más inestable que rate. Para dashboards operativos suele ser preferible rate.
Métricas de memoria¶
Memoria total¶
Memoria disponible¶
Memoria libre¶
MemFree y MemAvailable no significan exactamente lo mismo. Para estimar la memoria utilizable por el sistema suele ser más adecuado utilizar MemAvailable.
Memoria utilizada¶
Memoria utilizada en porcentaje¶
Memoria disponible en porcentaje¶
Memoria utilizada en gigabytes¶
Memoria disponible en gigabytes¶
Métricas de almacenamiento¶
Node Exporter proporciona métricas de sistemas de archivos.
Espacio disponible¶
Espacio libre para usuarios no privilegiados¶
Tamaño total del sistema de archivos¶
Espacio utilizado¶
Porcentaje utilizado¶
Porcentaje libre¶
Filtrar un punto de montaje¶
Filtrar por sistema de archivos¶
Excluir sistemas de archivos virtuales¶
Excluir dispositivos temporales¶
Porcentaje utilizado de la raíz¶
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
)
Filtrar valores no válidos¶
En algunos sistemas aparecen sistemas de archivos con tamaño cero. Para evitar divisiones problemáticas:
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/"
}
/
node_filesystem_size_bytes{
mountpoint="/"
}
)
and
node_filesystem_size_bytes{
mountpoint="/"
} > 0
Métricas de red¶
Las métricas de tráfico de red suelen ser contadores acumulativos.
Bytes recibidos¶
Bytes transmitidos¶
Tráfico recibido por segundo¶
Tráfico transmitido por segundo¶
Tráfico recibido en megabytes por segundo¶
Filtrar una interfaz¶
En algunos entornos la interfaz puede llamarse:
Consultar las interfaces disponibles:
Excluir interfaces virtuales¶
Errores de recepción¶
Paquetes descartados¶
Métricas de carga¶
Carga de un minuto¶
Carga de cinco minutos¶
Carga de quince minutos¶
Comparar carga con el número de CPU¶
Una carga superior al número de CPU puede indicar una presión importante, aunque debe interpretarse junto con el uso de CPU, la memoria y la espera de disco.
Métricas de tiempo y actividad¶
Tiempo actual del sistema¶
Momento de arranque¶
Tiempo de actividad¶
Tiempo de actividad en horas¶
Tiempo de actividad en días¶
Funciones de PromQL¶
rate¶
Calcula la tasa media por segundo de un contador durante un intervalo.
Es adecuada para:
- Uso de CPU.
- Tráfico de red.
- Operaciones de disco.
- Errores acumulativos.
- Peticiones por segundo.
irate¶
Calcula una tasa basada principalmente en las muestras más recientes:
Es más sensible a cambios rápidos y puede mostrar más variaciones.
increase¶
Calcula cuánto ha aumentado un contador durante un intervalo:
La consulta indica cuántos bytes se han recibido aproximadamente durante la última hora.
delta¶
Calcula la diferencia entre el primer y el último valor de una métrica de tipo gauge:
avg_over_time¶
Calcula la media de una métrica durante un intervalo:
min_over_time¶
Obtiene el valor mínimo:
max_over_time¶
Obtiene el valor máximo:
last_over_time¶
Obtiene la última muestra disponible dentro de un intervalo:
count_over_time¶
Cuenta las muestras existentes durante un intervalo:
Agregaciones¶
Las agregaciones permiten resumir varias series.
sum¶
Suma los valores:
avg¶
Calcula la media:
min¶
Obtiene el valor mínimo:
max¶
Obtiene el valor máximo:
count¶
Cuenta las series:
count_values¶
Cuenta cuántas series tienen cada valor:
Agrupar mediante by¶
Calcular la disponibilidad por trabajo:
Contar targets por trabajo:
Calcular la media de carga por instancia:
Agrupar mediante without¶
Excluir determinadas etiquetas de la agrupación:
Operadores vectoriales y coincidencia de etiquetas¶
PromQL debe saber cómo relacionar las series cuando se combinan dos expresiones.
Comparar expresiones con etiquetas compatibles¶
Si ambas métricas comparten las mismas etiquetas relevantes, Prometheus puede relacionarlas automáticamente.
Utilizar on¶
Indicar las etiquetas utilizadas para hacer coincidir las series:
rate(node_cpu_seconds_total[5m])
/ on (instance)
count by (instance) (
node_cpu_seconds_total{
mode="idle"
}
)
Utilizar ignoring¶
Ignorar determinadas etiquetas al hacer la coincidencia:
Debe utilizarse con cuidado. Una coincidencia incorrecta puede producir resultados vacíos o combinaciones inesperadas.
Utilizar group_left¶
Permite conservar etiquetas adicionales de la expresión derecha cuando existe una relación de uno a muchos.
Ejemplo conceptual:
No es necesario utilizar group_left en las consultas básicas del curso, pero resulta útil en métricas con metadatos adicionales.
Funciones de etiquetas¶
label_replace¶
Permite crear o modificar etiquetas a partir de otras etiquetas.
Ejemplo:
Esta consulta crea una etiqueta servidor a partir del nombre anterior a los dos puntos de instance.
label_join¶
Combina varias etiquetas en una nueva etiqueta:
Estas funciones son útiles para adaptar las etiquetas a una visualización o a una convención de nombres.
Consultas para dashboards¶
Panel de disponibilidad¶
Unidad recomendada:
Valores posibles:
Panel de CPU¶
Unidad recomendada:
Panel de memoria utilizada¶
Unidad recomendada:
Panel de memoria disponible¶
Unidad recomendada:
Panel de almacenamiento utilizado¶
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
)
Unidad recomendada:
Panel de carga del sistema¶
Unidad recomendada:
Panel de tráfico recibido¶
Unidad recomendada:
Panel de tráfico transmitido¶
Unidad recomendada:
Variables de Grafana¶
Las variables permiten reutilizar un dashboard para varias instancias, trabajos o dispositivos.
Variable de instancias¶
En Grafana, una consulta habitual para una variable de instancia es:
En versiones recientes de Grafana también puede utilizarse una consulta basada en Prometheus:
La sintaxis disponible depende de la versión y del editor de variables.
Variable de trabajos¶
Variable de dispositivos¶
Utilizar una variable en una consulta¶
Si la variable se llama instance:
Si permite selección múltiple:
Para una variable de trabajo:
Consulta de CPU con variables¶
100 * (
1 -
avg by (instance) (
rate(
node_cpu_seconds_total{
mode="idle",
instance=~"$instance"
}[5m]
)
)
)
Consultas para alertas¶
Target no disponible¶
Memoria disponible baja¶
Almacenamiento casi lleno¶
(
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
) * 100 < 15
CPU elevada durante varios minutos¶
El tiempo durante el cual debe mantenerse la condición se configura en la regla de alerta, no necesariamente dentro de la consulta.
Carga elevada respecto al número de CPU¶
Esta consulta es orientativa. La interpretación de la carga debe considerar el tipo de sistema y la actividad que está realizando.
Diferencia entre métricas gauge y counter¶
Gauge¶
Un gauge puede subir o bajar.
Ejemplos:
Los gauges suelen consultarse directamente:
Counter¶
Un counter aumenta de forma acumulativa y puede reiniciarse cuando se reinicia el proceso.
Ejemplos:
Los counters suelen analizarse mediante:
o:
No es recomendable interpretar directamente el valor acumulado de un counter como una tasa actual.
Consultas de diagnóstico¶
Verificar si existe una métrica¶
Si no devuelve resultados:
- Node Exporter puede no estar disponible.
- La métrica puede tener otro nombre.
- Prometheus puede no estar realizando scraping.
- El target puede estar configurado con otro job.
- La métrica puede no estar expuesta por la versión instalada.
Consultar todas las métricas de Node Exporter¶
Desde la terminal:
Buscar nombres relacionados con memoria:
Buscar nombres relacionados con disco:
Comprobar los nombres de las métricas en Prometheus¶
En la interfaz de Prometheus puedes utilizar el explorador de métricas para consultar los nombres disponibles.
También puedes obtener las etiquetas y series mediante la API:
Consultar las etiquetas de una métrica¶
Consultar los targets activos¶
Errores habituales¶
Utilizar una métrica que no existe¶
Consulta:
Si la métrica no existe, revisa el nombre real:
Los nombres de las métricas distinguen mayúsculas y minúsculas.
Olvidar el intervalo en rate¶
Incorrecto:
Correcto:
Aplicar rate a un gauge¶
No suele ser correcto aplicar rate directamente a:
Esta métrica es un gauge y debe consultarse directamente o mediante una función temporal apropiada.
Dividir series incompatibles¶
Una consulta puede devolver resultados vacíos si las etiquetas de las métricas no coinciden.
Comprueba primero cada parte:
Después combina ambas:
No filtrar sistemas de archivos¶
Una consulta general puede incluir tmpfs, overlay u otros sistemas virtuales:
Es preferible filtrar los sistemas relevantes:
Utilizar un intervalo demasiado corto¶
Una consulta como esta puede resultar inestable:
En muchos entornos es preferible:
Confundir valor instantáneo con histórico¶
La vista de tabla muestra el valor en un instante. La vista de gráfico muestra la evolución de la consulta durante un intervalo de tiempo.
Buenas prácticas para escribir consultas¶
- Utiliza nombres de métricas exactos.
- Comprueba primero la métrica sin filtros.
- Añade etiquetas progresivamente.
- Usa nombres de etiquetas coherentes.
- Aplica
ratea counters. - Usa ventanas de tiempo razonables.
- Filtra sistemas de archivos virtuales.
- Comprueba las unidades del resultado.
- Utiliza
bypara conservar las etiquetas necesarias. - Evita conservar cardinalidad innecesaria.
- Divide las consultas complejas en partes durante el diagnóstico.
- Comprueba que el resultado no esté vacío.
- Documenta los umbrales utilizados.
- Valida las consultas en Prometheus antes de incorporarlas a Grafana.
- No asumas que una métrica existe en todas las instalaciones.
- Comprueba la versión de Node Exporter si faltan métricas.
Sesión práctica 1: comprobar la disponibilidad¶
En esta sesión se comprobará el estado de los targets configurados.
Objetivo¶
Ejecutar consultas básicas sobre la métrica up.
Consultar todos los targets¶
Filtrar Node Exporter¶
Contar targets¶
Contar targets disponibles¶
Contar targets caídos¶
Calcular el porcentaje de disponibilidad¶
Actividad controlada¶
En el entorno de laboratorio:
- Ejecuta
up{job="node_exporter"}. - Anota el valor inicial.
- Detén Node Exporter:
- Espera varios intervalos de scraping.
- Ejecuta de nuevo:
- Comprueba que el valor cambia a
0. - Inicia el servicio:
- Espera a que Prometheus vuelva a realizar scraping.
- Comprueba que el valor vuelve a
1.
Preguntas de análisis¶
- ¿Qué valor tenía el target inicialmente?
- ¿Cuánto tardó en pasar a
0? - ¿Cuánto tardó en volver a
1? - ¿Qué relación existe entre el intervalo de scraping y el tiempo observado?
- ¿Qué mensaje aparece en la página de targets de Prometheus?
Sesión práctica 2: analizar CPU¶
Objetivo¶
Construir una consulta para medir el porcentaje de CPU utilizada.
Consultar la métrica base¶
Consultar únicamente el modo idle¶
Calcular la tasa del modo idle¶
Calcular el porcentaje utilizado¶
Actividad de generación de carga¶
En el laboratorio, abre una segunda terminal y ejecuta durante unos segundos:
En otra terminal, observa el dashboard o ejecuta la consulta de CPU.
Detén la carga con:
Preguntas de análisis¶
- ¿Qué ocurre con el porcentaje de CPU mientras se ejecuta
yes? - ¿Qué ocurre después de detenerlo?
- ¿Qué diferencia existe entre
rateeirate? - ¿Qué ventana temporal produce un gráfico más estable?
- ¿Qué valor devuelve la consulta cuando el equipo está en reposo?
Sesión práctica 3: analizar memoria¶
Objetivo¶
Calcular la memoria total, disponible y utilizada.
Consultar la memoria total¶
Consultar la memoria disponible¶
Calcular la memoria utilizada¶
Calcular el porcentaje utilizado¶
Calcular el porcentaje disponible¶
Convertir la memoria utilizada a gigabytes¶
Comparar con Ubuntu¶
Desde la terminal:
Compara los resultados con las consultas de Prometheus.
Preguntas de análisis¶
- ¿La memoria total de Prometheus coincide aproximadamente con
free -h? - ¿Por qué puede existir una pequeña diferencia?
- ¿Qué métrica es más adecuada para estimar la memoria disponible?
- ¿Cuál es el porcentaje actual de memoria utilizada?
Sesión práctica 4: analizar almacenamiento¶
Objetivo¶
Calcular el espacio utilizado y disponible en el sistema de archivos raíz.
Consultar los sistemas de archivos¶
Consultar la raíz¶
Consultar el espacio disponible¶
Calcular el porcentaje utilizado¶
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/"
}
/
node_filesystem_size_bytes{
mountpoint="/"
}
)
Excluir sistemas virtuales¶
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
)
Comparar con Ubuntu¶
Desde la terminal:
Crear una condición de alerta¶
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
) > 80
Preguntas de análisis¶
- ¿Qué sistema de archivos corresponde a
/? - ¿Qué valor devuelve
df -h /? - ¿Qué sistemas virtuales aparecen en Node Exporter?
- ¿Por qué conviene excluirlos?
- ¿Qué umbral utilizarías para una alerta de almacenamiento?
Sesión práctica 5: analizar tráfico de red¶
Objetivo¶
Medir el tráfico recibido y transmitido por una interfaz.
Consultar las interfaces¶
Identificar una interfaz concreta¶
Sustituye eth0 por el nombre real de la interfaz.
Calcular tráfico recibido¶
Calcular tráfico transmitido¶
Excluir interfaces virtuales¶
sum by (instance) (
rate(
node_network_receive_bytes_total{
device!~"lo|docker.*|veth.*|br-.*"
}[5m]
)
)
Convertir a megabytes por segundo¶
sum by (instance) (
rate(
node_network_receive_bytes_total{
device!~"lo|docker.*|veth.*|br-.*"
}[5m]
)
) / 1024 / 1024
Generar tráfico de prueba¶
Desde otra terminal puedes realizar una petición al endpoint de métricas:
Observa el gráfico de tráfico de red y comprueba si aparece alguna variación.
Preguntas de análisis¶
- ¿Qué interfaces existen?
- ¿Cuál es la interfaz principal?
- ¿Qué diferencia existe entre bytes recibidos y transmitidos?
- ¿Por qué se utiliza
rate? - ¿Qué interfaces conviene excluir del dashboard?
Sesión práctica 6: crear un dashboard operativo¶
Objetivo¶
Construir un dashboard en Grafana utilizando consultas PromQL verificadas.
Panel de disponibilidad¶
Consulta:
Configuración recomendada:
Panel de CPU¶
Consulta:
Configuración recomendada:
Panel de memoria¶
Consulta:
Configuración recomendada:
Panel de almacenamiento¶
Consulta:
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
)
Configuración recomendada:
Panel de carga¶
Consulta:
Configuración recomendada:
Validación del dashboard¶
Comprueba que:
- Los paneles muestran datos.
- Las unidades son correctas.
- Las etiquetas identifican la instancia.
- Los valores se actualizan.
- Los umbrales están documentados.
- No aparecen sistemas de archivos irrelevantes.
- La consulta sigue funcionando con el intervalo temporal seleccionado.
Sesión práctica 7: construir una consulta compleja paso a paso¶
Objetivo¶
Construir una consulta de porcentaje de CPU sin escribirla completa desde el principio.
Paso 1: localizar la métrica¶
Paso 2: seleccionar el modo idle¶
Paso 3: calcular la tasa¶
Paso 4: agrupar por instancia¶
Paso 5: calcular la parte utilizada¶
Paso 6: convertir a porcentaje¶
Preguntas de análisis¶
- ¿Qué devuelve cada paso?
- ¿Qué etiquetas se conservan después de
avg by (instance)? - ¿Por qué se resta el porcentaje idle a
1? - ¿Por qué se multiplica por
100? - ¿Qué sucedería si se utilizara
sumen lugar deavg?
Sesión práctica 8: crear consultas para alertas¶
Objetivo¶
Preparar consultas que puedan utilizarse como condiciones de alerta.
Alerta de Node Exporter caído¶
Alerta de CPU elevada¶
Alerta de memoria baja¶
Alerta de almacenamiento elevado¶
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
) > 80
Procedimiento¶
- Ejecuta la consulta en Prometheus.
- Comprueba que devuelve datos.
- Comprueba la unidad del resultado.
- Define el umbral.
- Configura el tiempo de permanencia.
- Añade etiquetas de severidad.
- Añade una descripción.
- Prueba la condición en el laboratorio.
- Documenta el resultado.
Catálogo de consultas¶
Disponibilidad¶
CPU¶
Memoria¶
Almacenamiento¶
100 * (
1 -
node_filesystem_avail_bytes{mountpoint="/"}
/
node_filesystem_size_bytes{mountpoint="/"}
)
Red¶
Carga¶
Actividad¶
Puntos clave¶
- PromQL es el lenguaje de consulta de Prometheus.
- Una serie temporal está formada por una métrica, etiquetas, valores y marcas temporales.
uppermite comprobar la disponibilidad de un target.- El valor
1indica normalmente que el scraping ha funcionado. - El valor
0indica que el scraping ha fallado. - Las etiquetas permiten filtrar y distinguir series.
=selecciona una etiqueta con coincidencia exacta.=~utiliza expresiones regulares.- Un vector instantáneo representa valores en un momento concreto.
- Un vector de rango representa valores durante un intervalo.
ratese utiliza principalmente con counters.iratereacciona más rápidamente, pero puede ser más inestable.- Los gauges suelen consultarse directamente.
sum,avg,min,maxycountpermiten agregar series.byconserva las etiquetas indicadas en una agregación.- Las consultas deben validarse en Prometheus antes de utilizarse en Grafana.
- Las unidades del panel deben corresponder al resultado de la consulta.
- Los sistemas de archivos virtuales deben filtrarse en las consultas de almacenamiento.
- Las consultas complejas deben construirse y validarse paso a paso.
- Los umbrales de alerta deben documentarse y justificarse.
Preguntas de comprobación¶
- ¿Qué significa la métrica
up? - ¿Qué diferencia existe entre los valores
0y1deup? - ¿Qué función cumplen las etiquetas de una métrica?
- ¿Qué diferencia existe entre
{job="node_exporter"}y{job=~"node_.*"}? - ¿Qué es un vector instantáneo?
- ¿Qué es un vector de rango?
- ¿Qué unidades de tiempo pueden utilizarse en un selector de rango?
- ¿Por qué se aplica
rateanode_cpu_seconds_total? - ¿Por qué no se debe aplicar normalmente
rateanode_memory_MemAvailable_bytes? - ¿Qué diferencia existe entre
rateeirate? - ¿Qué consulta permite calcular la memoria utilizada en porcentaje?
- ¿Qué consulta permite calcular el porcentaje de CPU utilizado?
- ¿Por qué se deben excluir algunos sistemas de archivos en una consulta de almacenamiento?
- ¿Qué función cumple
sum by (instance)? - ¿Qué diferencia existe entre
byywithout? - ¿Qué ocurre si una consulta utiliza una métrica inexistente?
- ¿Cómo comprobarías si Node Exporter expone una métrica concreta?
- ¿Qué consulta permite mostrar targets caídos?
- ¿Qué factores deben tenerse en cuenta al elegir una ventana para
rate? - ¿Qué pasos seguirías para validar una consulta antes de incorporarla a Grafana?