Condiciones y expresiones¶
Las condiciones y expresiones permiten transformar los datos obtenidos de una consulta en una decisión evaluable por Grafana.
Una consulta puede devolver una serie temporal, varias series o una tabla de valores. Para utilizar esos datos en una regla de alerta, normalmente es necesario:
- Ejecutar una consulta.
- Reducir los resultados a un valor evaluable.
- Aplicar una condición.
- Comparar el resultado con un umbral.
- Determinar el estado de la alerta.
El flujo habitual es:
Consulta A
|
v
Datos temporales
|
v
Expresión de reducción
|
v
Valor único
|
v
Condición o umbral
|
v
Estado de alerta
Ejemplo:
Consulta A:
Uso de CPU
Reducción:
Último valor
Condición:
Mayor que 90
Duración:
5 minutos
Resultado:
Alerta de CPU elevada
Las opciones exactas pueden cambiar según la versión de Grafana y el tipo de regla utilizado. Sin embargo, los conceptos de consulta, reducción, expresión, condición y umbral son aplicables de forma general.
Objetivos¶
Al finalizar esta sección, el alumno podrá:
- Explicar la diferencia entre una consulta, una expresión y una condición.
- Comprender por qué una serie temporal debe reducirse antes de evaluarse.
- Utilizar expresiones matemáticas en reglas de alerta.
- Utilizar expresiones de reducción como
Last,Mean,Min,MaxySum. - Configurar condiciones basadas en umbrales.
- Comparar valores con operadores como
>,<,>=,<=e=. - Crear alertas a partir de una sola consulta.
- Crear alertas que utilicen varias consultas.
- Combinar consultas mediante expresiones matemáticas.
- Calcular porcentajes con expresiones.
- Utilizar expresiones para comparar dos métricas.
- Comprender la diferencia entre valor actual, promedio, mínimo y máximo.
- Detectar ausencia de datos mediante expresiones.
- Identificar errores frecuentes de unidades.
- Probar condiciones en Grafana Explore.
- Diagnosticar una regla que no se activa debido a una expresión incorrecta.
- Documentar consultas, expresiones, umbrales y resultados.
Introducción¶
Una consulta PromQL suele devolver datos a lo largo del tiempo.
Por ejemplo:
El resultado puede contener muchos valores:
Una regla de alerta necesita saber cómo interpretar esos datos.
Puede utilizar:
- El último valor.
- El promedio.
- El valor máximo.
- El valor mínimo.
- La suma.
- Una expresión matemática.
- Una comparación con otra consulta.
Por ejemplo:
o:
o:
Cada opción responde a una pregunta diferente.
Diferencia entre consulta, expresión y condición¶
Consulta¶
Obtiene datos desde una fuente como Prometheus.
Ejemplo:
Expresión¶
Transforma uno o varios resultados.
Ejemplo conceptual:
Otro ejemplo:
Condición¶
Determina si el resultado debe considerarse problemático.
Ejemplo:
Regla completa¶
Consulta:
Uso de CPU
Expresión:
Obtener el último valor
Condición:
Mayor que 90
Duración:
Durante 5 minutos
La consulta proporciona los datos.
La expresión prepara o transforma los datos.
La condición decide si se activa la alerta.
Componentes de una evaluación¶
Una regla puede representarse así:
Consulta A
|
v
Expresión B: reducción
|
v
Expresión C: comparación
|
v
Resultado verdadero o falso
|
v
Estado de la alerta
En algunas versiones de Grafana, las consultas y expresiones aparecen identificadas con letras:
Ejemplo:
Cuando existen varias consultas:
La nomenclatura exacta puede variar, pero la lógica es la misma.
Series temporales y valores únicos¶
Serie temporal¶
Una serie temporal contiene valores asociados a instantes.
Valor único¶
Una condición suele necesitar un valor representativo.
Ejemplos:
La expresión de reducción transforma la serie temporal en un resultado evaluable.
Ejemplo¶
La elección de la reducción cambia el comportamiento de la alerta.
Expresiones de reducción¶
Una reducción resume varios valores en uno solo.
Last¶
Utiliza el último valor disponible.
Es útil cuando interesa conocer el estado actual.
Ejemplos:
- Disponibilidad actual.
- Uso actual de memoria.
- Estado actual de un servicio.
- Temperatura actual.
Mean¶
Calcula el promedio.
Es útil cuando interesa conocer el comportamiento medio.
Ejemplos:
- Uso medio de CPU.
- Latencia media.
- Carga media.
- Tasa media de errores.
Max¶
Selecciona el valor máximo.
Es útil para detectar picos.
Ejemplos:
- Pico de latencia.
- Pico de consumo.
- Máximo número de errores.
- Máxima utilización de una capacidad.
Min¶
Selecciona el valor mínimo.
Es útil para detectar valores demasiado bajos.
Ejemplos:
- Memoria disponible.
- Espacio libre.
- Tasa de peticiones.
- Nivel de batería.
Sum¶
Suma los valores.
Debe utilizarse con cuidado. La suma de valores temporales puede no tener un significado operativo.
Es más útil cuando los valores representan cantidades acumulables o series separadas.
Elegir la reducción adecuada¶
La pregunta operativa determina la reducción.
| Pregunta | Reducción habitual |
|---|---|
| ¿Cuál es el valor actual? | Last |
| ¿Cuál ha sido el promedio? | Mean |
| ¿Se produjo algún pico? | Max |
| ¿Cuál fue el valor mínimo? | Min |
| ¿Cuál es el total acumulado? | Sum |
Ejemplo: CPU¶
Detecta el estado actual.
Detecta un uso elevado sostenido en el rango evaluado.
Detecta incluso un pico breve.
No existe una reducción universalmente correcta. Debe elegirse según el problema que se pretende detectar.
Condiciones y operadores¶
Una condición compara un valor con otro.
Mayor que¶
Se activa cuando el valor es superior a 90.
Mayor o igual que¶
Se activa cuando el valor es 90 o superior.
Menor que¶
Se activa cuando el valor es inferior a 10.
Menor o igual que¶
Se activa cuando el valor es 10 o inferior.
Igual a¶
Se activa cuando el valor es exactamente cero.
Diferente de¶
Puede utilizarse para detectar cualquier estado distinto del esperado.
La disponibilidad exacta de algunos operadores depende de la interfaz y del tipo de expresión.
Umbrales y unidades¶
Uno de los errores más frecuentes consiste en utilizar un umbral con una unidad incorrecta.
Ejemplo de porcentaje¶
Consulta:
Resultado:
Umbral correcto:
Ejemplo de proporción¶
Consulta:
Resultado:
Umbral equivalente:
Estas dos consultas pueden representar lo mismo, pero utilizan escalas diferentes.
Ejemplo de segundos¶
Consulta:
Resultado:
Umbral:
No debe configurarse como 1000 salvo que la consulta se convierta explícitamente a milisegundos.
Consulta A y reducción B¶
Una configuración frecuente puede expresarse así:
Ejemplo¶
Consulta A¶
Expresión B¶
Condición C¶
Resultado¶
Ejemplo con Mean¶
Consulta A¶
Expresión B¶
Condición C¶
Interpretación¶
La alerta se activa cuando el promedio de la CPU evaluada supera el 80 %.
Esta configuración es menos sensible a un único pico, pero puede ocultar picos importantes.
Ejemplo con Max¶
Consulta A¶
Expresión B¶
Condición C¶
Interpretación¶
La alerta se activa si en el rango evaluado se alcanza un pico superior al 95 %.
Esta configuración puede generar más alertas si la métrica presenta picos breves.
Expresiones matemáticas¶
Las expresiones matemáticas permiten combinar consultas.
Estructura general¶
Ejemplo: porcentaje de errores¶
Consulta A: errores HTTP 5xx.
Consulta B: peticiones totales.
Expresión matemática:
Condición:
Interpretación:
La consulta debe protegerse contra divisiones por cero cuando sea necesario.
Ejemplo: porcentaje de errores directamente en PromQL¶
El cálculo también puede realizarse en una única consulta:
La alternativa de separar las consultas puede resultar más clara cuando:
- Se desea visualizar cada componente.
- Se reutilizan las consultas.
- Se necesita depurar el cálculo.
- Se quiere explicar el proceso durante una clase.
La alternativa de una sola consulta puede ser más compacta.
Comparar dos métricas¶
Las expresiones permiten comparar dos valores.
Ejemplo: memoria disponible¶
Consulta A:
Consulta B:
Expresión:
Condición:
Interpretación:
Ejemplo: espacio libre¶
Consulta A:
Consulta B:
Expresión:
Condición:
Interpretación:
Correspondencia entre series¶
Cuando se combinan consultas, las series deben poder relacionarse.
Por ejemplo:
Grafana y Prometheus deben poder identificar que ambas series pertenecen a la misma instancia.
Problema frecuente¶
Las etiquetas no coinciden completamente. La operación puede producir resultados inesperados o no devolver datos.
Recomendación¶
Antes de combinar consultas:
- Revisar las etiquetas.
- Utilizar agregaciones coherentes.
- Mantener la misma dimensión.
- Comprobar el resultado en Explore.
- Evitar combinar series incompatibles.
Agregaciones y etiquetas¶
Las agregaciones modifican las etiquetas de las series.
Ejemplo¶
Conserva:
Otra agregación¶
Elimina las dimensiones y produce un valor global.
Consecuencia¶
Si la alerta necesita identificar el servicio o la instancia, no se deben eliminar esas etiquetas sin necesidad.
Ejemplo recomendado¶
Resultado:
Esto permite mostrar mensajes como:
Expresiones lógicas¶
Las condiciones pueden combinar varios criterios.
Ejemplos conceptuales:
El soporte exacto de operadores lógicos depende de la versión, la fuente de datos y el editor utilizado.
Cuando la lógica es compleja, puede ser más sencillo expresar la condición directamente en PromQL.
Ejemplo conceptual en PromQL¶
La sintaxis y la correspondencia entre series deben validarse en Prometheus antes de utilizarla en una regla.
Expresiones de ausencia¶
A veces no se desea evaluar el valor de una métrica, sino comprobar si existe.
Ejemplo conceptual con absent¶
Interpretación aproximada:
También puede utilizarse una regla basada en:
La elección depende de si se desea detectar:
- Un objetivo conocido que devuelve
0. - La ausencia completa de una serie.
- La pérdida de la fuente de datos.
- Una consulta que no devuelve resultados.
Es importante distinguir entre:
Expresiones de tiempo¶
Las consultas pueden incluir rangos temporales.
Ejemplo:
El rango [5m] indica la ventana utilizada para calcular la tasa.
Esto no es necesariamente lo mismo que la duración de la alerta.
Diferencia¶
[5m] en PromQL:
Ventana de datos utilizada por la función.
Duración de la alerta:
Tiempo durante el cual la condición debe mantenerse.
Ejemplo:
La consulta utiliza cinco minutos de datos y la regla exige que el resultado supere el umbral durante cinco minutos.
Son dos configuraciones diferentes.
Condiciones instantáneas y sostenidas¶
Condición instantánea¶
Se evalúa el valor actual.
Puede activarse rápidamente ante un pico.
Condición media¶
Se evalúa el promedio.
Es más estable, pero puede ocultar valores extremos.
Condición sostenida¶
Se utiliza una condición instantánea junto con una duración:
Suele ser una alternativa equilibrada para muchos recursos.
Ejemplo completo: alerta de CPU con reducción¶
Objetivo¶
Activar una alerta si la CPU supera el 90 % durante cinco minutos.
Consulta A¶
Expresión B¶
Condición C¶
Configuración temporal¶
Etiquetas¶
Anotaciones¶
summary = CPU elevada en {{ $labels.instance }}
description = La CPU de {{ $labels.instance }}
supera el 90 % durante cinco minutos.
Interpretación¶
A obtiene la serie de CPU.
B selecciona el último valor.
C comprueba si B es superior a 90.
La duración evita alertar por un pico aislado.
Ejemplo completo: porcentaje de errores¶
Objetivo¶
Activar una alerta si el porcentaje de respuestas HTTP 5xx supera el 5 %.
Consulta A: errores¶
Consulta B: total de peticiones¶
Expresión C¶
Condición D¶
Configuración temporal¶
Etiquetas¶
Anotaciones¶
summary = Tasa de errores elevada en {{ $labels.service }}
description = El servicio {{ $labels.service }}
supera el 5 % de respuestas HTTP 5xx.
Precaución¶
Si B es cero, la división puede producir un resultado no válido. Debe comprobarse el comportamiento de la consulta y de la fuente de datos.
Ejemplo completo: memoria disponible¶
Objetivo¶
Activar una alerta si queda menos del 10 % de memoria disponible.
Consulta A¶
Consulta B¶
Expresión C¶
Condición D¶
Configuración¶
Interpretación¶
A = memoria disponible
B = memoria total
C = porcentaje disponible
D = condición de memoria insuficiente
Etiquetas¶
Ejemplo completo: almacenamiento libre¶
Objetivo¶
Activar una alerta si queda menos del 20 % de espacio libre.
Consulta A¶
Consulta B¶
Expresión C¶
Condición D¶
Anotaciones¶
summary = Poco espacio libre en {{ $labels.instance }}
description = El punto de montaje {{ $labels.mountpoint }}
tiene menos del 20 % de espacio disponible.
La misma situación también puede expresarse como porcentaje utilizado:
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay"
}
)
En ese caso, la condición equivalente sería:
Ejemplo de sesión 1: comparar reducciones¶
Objetivo¶
Observar cómo cambia una alerta según la reducción seleccionada.
Consulta¶
Configuraciones¶
Crear tres reglas de laboratorio o tres expresiones de prueba:
Configuración A:
Reducción = Last
Umbral = 90
Configuración B:
Reducción = Mean
Umbral = 80
Configuración C:
Reducción = Max
Umbral = 95
Pasos¶
- Ejecutar la consulta en Explore.
- Revisar la serie temporal.
- Identificar los valores máximo, mínimo y medio.
- Crear la expresión con
Last. - Crear la expresión con
Mean. - Crear la expresión con
Max. - Generar una carga controlada.
- Observar las diferencias.
- Registrar qué regla se activa primero.
- Explicar el motivo.
Registro¶
Valor máximo observado:
Valor mínimo observado:
Valor medio observado:
Último valor observado:
Regla que se activó primero:
Regla que no se activó:
Explicación:
Ejemplo de sesión 2: calcular un porcentaje con dos consultas¶
Objetivo¶
Crear una condición basada en la relación entre errores y peticiones totales.
Consulta A¶
Consulta B¶
Expresión C¶
Condición¶
Pasos¶
- Validar la consulta de errores.
- Validar la consulta total.
- Comprobar que ambas conservan la etiqueta
service. - Crear la expresión matemática.
- Revisar la unidad resultante.
- Configurar el umbral.
- Añadir una duración de cinco minutos.
- Crear la regla.
- Probar con tráfico de laboratorio.
- Revisar el resultado.
Preguntas de análisis¶
¿Qué valor devuelve A?
¿Qué valor devuelve B?
¿Qué unidad tiene C?
¿Qué ocurre si B es cero?
¿Qué etiquetas se conservan?
¿La condición representa un porcentaje o una proporción?
Ejemplo de sesión 3: investigar un error de unidad¶
Objetivo¶
Diagnosticar una alerta que se activa con demasiada frecuencia.
Situación¶
Consulta utilizada¶
Umbral configurado¶
Problema¶
La consulta devuelve una proporción entre 0 y 1, pero el umbral se ha configurado como si el resultado fuese un porcentaje entre 0 y 100.
Correcciones posibles¶
Opción A: cambiar la consulta¶
Mantener:
Opción B: cambiar el umbral¶
Mantener la consulta original y utilizar:
Actividades¶
- Ejecutar la consulta.
- Observar su rango de valores.
- Identificar la unidad.
- Corregir la consulta o el umbral.
- Comprobar que la alerta se comporta correctamente.
- Documentar la solución aplicada.
Ejemplo de sesión 4: comparar Last, Mean y Max¶
Objetivo¶
Comprender qué pregunta responde cada reducción.
Datos de ejemplo¶
Resultados¶
Actividades¶
- Calcular manualmente cada reducción.
- Configurar una condición
> 90. - Determinar qué reducción activa la alerta.
- Explicar por qué.
- Relacionar cada reducción con un caso operativo.
Resultado esperado¶
Last:
No activa, porque el último valor es 45.
Mean:
No activa, porque el promedio es 53,2.
Max:
Activa, porque el máximo es 95.
Debate técnico¶
¿Es correcto alertar por un único pico?
¿Debería utilizarse una duración?
¿Es mejor `Max` o `Last` para este caso?
¿Qué tipo de servicio justificaría cada opción?
Ejemplo de sesión 5: detectar ausencia de datos¶
Objetivo¶
Diferenciar un valor cero de la ausencia de una serie.
Consulta¶
Casos¶
Actividades¶
- Ejecutar la consulta con el objetivo funcionando.
- Detener Node Exporter.
- Observar si aparece
up = 0. - Eliminar o modificar temporalmente la coincidencia de la consulta.
- Observar el comportamiento cuando no existen series.
- Comparar:
- Valor normal.
- Valor cero.
- Ausencia de datos.
- Documentar qué política corresponde a cada caso.
Registro¶
Estado del servicio:
Resultado de la consulta:
Estado de Grafana:
Interpretación:
Acción recomendada:
Ejemplo de sesión 6: combinar series por instancia¶
Objetivo¶
Comprobar que dos consultas pueden combinarse correctamente.
Consulta A¶
Consulta B¶
Expresión C¶
Pasos¶
- Ejecutar A.
- Revisar sus etiquetas.
- Ejecutar B.
- Revisar sus etiquetas.
- Confirmar que ambas contienen
instance. - Crear la expresión.
- Comprobar el porcentaje por instancia.
- Añadir la condición
< 10. - Verificar que la alerta identifica la instancia correcta.
Error inducido¶
Modificar una de las consultas para agregar por una etiqueta diferente:
Observar qué ocurre al combinarla con una consulta agrupada por instance.
Conclusión¶
Las consultas que se combinan deben tener una estructura compatible y conservar dimensiones comunes.
Ejemplo de sesión 7: crear una expresión de carga relativa¶
Objetivo¶
Comparar la carga del sistema con el número de CPUs.
Consulta A¶
Consulta B¶
Expresión C¶
Condición¶
Interpretación¶
La carga de un minuto supera aproximadamente la capacidad equivalente a una CPU por unidad disponible.
La consulta puede necesitar ajustes según las etiquetas del entorno.
Actividades¶
- Ejecutar A.
- Ejecutar B.
- Comprobar las etiquetas.
- Crear la expresión.
- Revisar la unidad.
- Generar carga controlada.
- Observar el valor normalizado.
- Documentar las limitaciones de la métrica.
Ejemplo de sesión 8: combinar una condición con una duración¶
Objetivo¶
Diferenciar la expresión que evalúa el valor de la duración de la regla.
Configuración¶
Consulta:
Uso de CPU
Reducción:
Last
Condición:
Mayor que 90
Intervalo:
1 minuto
Duración:
5 minutos
Secuencia¶
Actividades¶
- Crear la regla.
- Generar un pico breve.
- Comprobar que no llega a
Alerting. - Mantener el valor elevado.
- Comprobar la activación.
- Explicar por qué la expresión y la duración son mecanismos diferentes.
Ejemplo de sesión 9: diagnosticar una expresión incorrecta¶
Objetivo¶
Corregir una expresión que produce un resultado inesperado.
Situación¶
Se desea calcular el porcentaje de errores:
Expresión incorrecta¶
Problema¶
El resultado es una proporción entre 0 y 1, pero el umbral está configurado como:
Correcciones posibles¶
Opción A¶
Umbral:
Opción B¶
Umbral:
Actividades¶
- Ejecutar ambas expresiones.
- Comparar los valores.
- Identificar las unidades.
- Elegir una representación.
- Documentar la decisión.
Evaluación ante valores nulos o ausentes¶
Una expresión puede encontrarse con:
- Series vacías.
- Valores nulos.
- Cero como divisor.
- Etiquetas incompatibles.
- Series con distinta frecuencia.
- Datos retrasados.
- Valores no numéricos.
Recomendaciones¶
- Validar cada consulta por separado.
- Comprobar el resultado de cada expresión.
- Evitar divisiones por cero.
- Utilizar filtros adecuados.
- Revisar las etiquetas.
- Probar periodos con y sin datos.
- Documentar el comportamiento esperado.
Ejemplo de riesgo¶
El resultado puede ser indefinido o no evaluable.
La expresión debe diseñarse teniendo en cuenta este escenario.
Condiciones con varias series¶
Una consulta puede devolver una serie por:
- Instancia.
- Servicio.
- Método.
- Código de respuesta.
- Punto de montaje.
- Región.
- Entorno.
Ejemplo¶
Resultado:
Una expresión debe conservar la dimensión necesaria para identificar el resultado.
Preguntas¶
¿La alerta debe generarse por instancia?
¿Debe generarse por servicio?
¿Debe existir una alerta global?
¿Se deben agrupar las series?
¿Qué etiquetas aparecerán en la notificación?
Alerta global frente a alerta por instancia¶
Alerta global¶
Detecta un problema agregado.
Ventaja:
- Menos alertas.
Desventaja:
- Puede ocultar qué servicio o instancia origina el problema.
Alerta por instancia¶
Detecta el problema por instancia.
Ventaja:
- Mayor precisión.
Desventaja:
- Puede generar más alertas.
La elección depende del objetivo operativo.
Buenas prácticas¶
Validar cada paso por separado¶
Probar:
No intentar diagnosticar toda la cadena al mismo tiempo.
Documentar las unidades¶
Ejemplo:
Conservar etiquetas necesarias¶
No agregar todas las series si la alerta necesita identificar una instancia.
Elegir la reducción según el objetivo¶
Evitar expresiones innecesariamente complejas¶
Una expresión difícil de entender también será difícil de mantener.
Proteger las divisiones¶
Comprobar qué ocurre cuando el denominador vale cero.
Probar escenarios anómalos¶
Probar:
- Valores normales.
- Valores altos.
- Valores bajos.
- Ausencia de datos.
- Datos retrasados.
- Varias series.
- Etiquetas incompatibles.
Separar la consulta de la duración¶
La ventana de PromQL y la duración de la alerta responden a preguntas diferentes.
Utilizar nombres claros¶
Ejemplo:
Cuando la interfaz permite asignar nombres descriptivos, utilizarlos.
Revisar los resultados en Explore¶
Explore es útil para comprobar el comportamiento de las consultas antes de convertirlas en reglas.
Errores frecuentes¶
El umbral utiliza una unidad incorrecta¶
Problema:
Solución:
- Multiplicar por 100, o
- Cambiar el umbral a
0.90.
La expresión devuelve un resultado vacío¶
Posibles causas:
- Consultas sin series.
- Etiquetas incompatibles.
- Rango temporal incorrecto.
- Filtros demasiado restrictivos.
- Fuente de datos sin información.
Se pierde la instancia afectada¶
Causa habitual:
La agregación elimina la etiqueta instance.
Solución:
La consulta exacta debe adaptarse al caso de uso.
La alerta se activa por un pico breve¶
Posibles soluciones:
- Cambiar
MaxporLast. - Utilizar
Mean. - Añadir una duración.
- Revisar el umbral.
- Suavizar la consulta.
La alerta no se activa aunque el valor parece elevado¶
Comprobar:
- Reducción elegida.
- Rango temporal.
- Unidad.
- Umbral.
- Series evaluadas.
- Duración.
- Estado de la regla.
Se combinan series incompatibles¶
Comprobar:
- Etiquetas comunes.
- Agregaciones.
- Dimensiones.
- Cardinalidad.
- Correspondencia entre instancias.
Se confunde [5m] con la duración de la alerta¶
[5m] es una ventana utilizada por PromQL.
La duración indica cuánto tiempo debe cumplirse la condición.
Se utiliza Max sin evaluar el ruido¶
Max detecta picos, pero puede generar alertas por eventos breves y normales.
Se utiliza Mean para detectar situaciones críticas¶
Un promedio puede ocultar un pico grave.
Evidencias de la práctica¶
Crear el directorio:
Crear una plantilla de documentación:
cat > ~/laboratorio-grafana/evidencias/condiciones-expresiones/registro.txt <<'EOF'
Nombre de la práctica:
Objetivo:
Consulta A:
Consulta B:
Expresión utilizada:
Reducción:
Condición:
Umbral:
Unidad:
Intervalo de evaluación:
Duración:
Etiquetas conservadas:
Comportamiento con ausencia de datos:
Resultado esperado:
Resultado observado:
Problemas encontrados:
Corrección aplicada:
Conclusión:
EOF
Guardar ejemplos de consultas:
cat > ~/laboratorio-grafana/evidencias/condiciones-expresiones/consultas.txt <<'EOF'
CPU:
100 - (
avg by (instance) (
rate(node_cpu_seconds_total{mode="idle"}[5m])
) * 100
)
Memoria disponible:
node_memory_MemAvailable_bytes
Memoria total:
node_memory_MemTotal_bytes
Errores HTTP:
sum by (service) (
rate(http_requests_total{status=~"5.."}[5m])
)
Peticiones totales:
sum by (service) (
rate(http_requests_total[5m])
)
EOF
Capturas recomendadas:
01-consulta-a-validada.png
02-consulta-b-validada.png
03-expresion-matematica.png
04-reduccion-last.png
05-reduccion-mean.png
06-reduccion-max.png
07-condicion-configurada.png
08-resultado-normal.png
09-resultado-pending.png
10-resultado-alerting.png
11-error-de-unidades.png
12-expresion-corregida.png
Práctica integradora¶
Objetivo¶
Crear una regla de alerta utilizando dos consultas, una expresión matemática, una reducción y una condición.
El escenario será el cálculo del porcentaje de errores HTTP.
Requisitos¶
- Grafana funcionando.
- Prometheus configurado.
- Una aplicación que exponga
http_requests_total. - Etiquetas
serviceystatus. - Permisos para crear reglas.
- Entorno de laboratorio.
Tarea 1: crear la consulta de errores¶
Validar:
¿Devuelve datos?
¿Qué servicios aparecen?
¿Qué unidad tiene el resultado?
¿Se conserva la etiqueta service?
Tarea 2: crear la consulta total¶
Validar:
¿Devuelve datos?
¿Coincide la etiqueta service con la consulta anterior?
¿El resultado es mayor o igual que la tasa de errores?
Tarea 3: crear la expresión matemática¶
Donde:
Validar:
¿El resultado está expresado como porcentaje?
¿El valor está entre 0 y 100?
¿Qué ocurre cuando no hay peticiones?
¿Qué ocurre si A es cero?
Tarea 4: configurar la condición¶
Configuración temporal:
Tarea 5: añadir etiquetas¶
Tarea 6: añadir anotaciones¶
summary = Tasa de errores elevada en {{ $labels.service }}
description = El servicio {{ $labels.service }}
supera el 5 % de respuestas HTTP 5xx durante cinco minutos.
runbook_url = https://example.com/runbooks/http-error-rate
Tarea 7: probar la regla¶
- Validar las consultas.
- Crear la expresión.
- Configurar la reducción si es necesaria.
- Configurar el umbral.
- Guardar la regla.
- Generar errores controlados en laboratorio.
- Observar el estado
Pending. - Mantener la condición durante cinco minutos.
- Observar el estado
Alerting. - Detener los errores.
- Comprobar la recuperación.
- Guardar las evidencias.
Práctica adicional: comparación de memoria disponible¶
Objetivo¶
Crear una alerta calculando el porcentaje de memoria disponible mediante dos consultas.
Consulta A¶
Consulta B¶
Expresión C¶
Condición¶
Actividades¶
- Validar A.
- Validar B.
- Comprobar las etiquetas.
- Crear C.
- Comprobar la unidad.
- Configurar el umbral.
- Añadir una duración de cinco minutos.
- Probar una situación de laboratorio autorizada.
- Comprobar la recuperación.
- Documentar el resultado.
Tabla de resultados¶
| Comprobación | Resultado | Observaciones |
|---|---|---|
| Consulta A validada | ||
| Consulta B validada | ||
| Etiquetas comparadas | ||
| Expresión creada | ||
| Unidad confirmada | ||
| Reducción configurada | ||
| Condición configurada | ||
| Umbral configurado | ||
| Intervalo configurado | ||
| Duración configurada | ||
Estado Normal observado |
||
Estado Pending observado |
||
Estado Alerting observado |
||
| Recuperación observada | ||
| Ausencia de datos probada | ||
| Error de unidad identificado | ||
| Expresión corregida | ||
| Evidencias guardadas | ||
| Documentación completada |
Puntos clave¶
- Una consulta obtiene datos.
- Una expresión transforma uno o varios resultados.
- Una condición determina si el resultado representa un problema.
- Una serie temporal puede necesitar una reducción antes de evaluarse.
Lastrepresenta el último valor.Meanrepresenta el promedio.Maxdetecta el valor máximo.Mindetecta el valor mínimo.Sumcalcula una suma y debe utilizarse con un significado claro.- La elección de la reducción modifica el comportamiento de la alerta.
- Un umbral debe utilizar la misma unidad que el resultado evaluado.
- Una proporción entre
0y1no es igual que un porcentaje entre0y100. - Las consultas combinadas deben tener etiquetas compatibles.
- Las agregaciones pueden eliminar etiquetas necesarias.
[5m]en PromQL es una ventana de consulta, no la duración de una alerta.- La duración determina cuánto tiempo debe mantenerse una condición.
- Las expresiones matemáticas permiten calcular porcentajes y relaciones.
- Las divisiones deben protegerse frente a denominadores iguales a cero.
- Las expresiones deben probarse con datos normales y anómalos.
- Las consultas deben validarse individualmente antes de combinarlas.
- Las alertas deben conservar las etiquetas necesarias para identificar el recurso.
- Una expresión clara es más fácil de mantener y diagnosticar.
- La ausencia de datos debe tratarse de forma explícita.
- Una regla compleja debe documentar cada paso de su evaluación.
Preguntas de comprobación¶
- ¿Qué diferencia existe entre una consulta y una expresión?
- ¿Qué función cumple una condición?
- ¿Por qué es necesario reducir una serie temporal en algunos casos?
- ¿Qué diferencia existe entre
Last,Mean,MinyMax? - ¿Cuándo utilizarías
Maxen lugar deLast? - ¿Qué significa que una consulta devuelva una proporción entre
0y1? - ¿Cómo convertirías una proporción en un porcentaje?
- ¿Qué diferencia existe entre
[5m]y una duración de alerta de cinco minutos? - ¿Por qué deben ser compatibles las etiquetas de dos consultas combinadas?
- ¿Qué problema puede causar una división entre cero?
- ¿Cómo calcularías un porcentaje de errores HTTP?
- ¿Cómo calcularías el porcentaje de memoria disponible?
- ¿Qué ocurre si una agregación elimina la etiqueta
instance? - ¿Qué diferencia existe entre una alerta global y una alerta por instancia?
- ¿Qué revisarías si una expresión devuelve datos vacíos?
- ¿Qué revisarías si una alerta utiliza un umbral incorrecto?
- ¿Cómo detectarías una ausencia completa de series?
- ¿Qué reducción utilizarías para detectar un pico breve?
- ¿Qué reducción utilizarías para detectar un valor medio sostenido?
- ¿Cómo probarías una condición con varias consultas?
- ¿Qué información debe documentarse para una expresión?
- ¿Qué ocurre si las consultas combinadas tienen dimensiones diferentes?
- ¿Por qué es importante validar cada consulta por separado?
- ¿Cómo diferenciarías un valor cero de la ausencia de datos?
- ¿Qué características debe tener una expresión mantenible?
Resultado esperado¶
Al finalizar esta sección, el alumno debe ser capaz de construir una evaluación completa utilizando consultas, expresiones, reducciones y condiciones.
El flujo final será:
Crear la consulta A
|
v
Crear la consulta B, si es necesaria
|
v
Validar cada consulta
|
v
Comprobar etiquetas y unidades
|
v
Crear una expresión matemática o de reducción
|
v
Obtener un valor evaluable
|
v
Aplicar la condición
|
v
Configurar el umbral
|
v
Configurar el intervalo
|
v
Configurar la duración
|
v
Probar valores normales
|
v
Probar valores anómalos
|
v
Probar ausencia de datos
|
v
Documentar el resultado
Una regla basada en expresiones está correctamente configurada cuando:
- Cada consulta devuelve los datos esperados.
- Las series tienen etiquetas compatibles.
- Las unidades están documentadas.
- La reducción responde al objetivo operativo.
- La expresión produce un resultado comprensible.
- El umbral utiliza la escala correcta.
- La condición se activa cuando corresponde.
- La duración evita falsos positivos.
- La recuperación funciona.
- Los casos de ausencia de datos y errores están contemplados.
Las expresiones no son únicamente operaciones matemáticas. Son la forma de convertir datos de monitorización en decisiones operativas claras y verificables.