Variables y etiquetas¶
Las variables y las etiquetas son elementos fundamentales para trabajar con Prometheus y Grafana.
Las etiquetas permiten describir y diferenciar las series temporales. Las variables permiten que un dashboard sea reutilizable y que el alumno pueda seleccionar dinámicamente una instancia, un trabajo, una interfaz de red o un punto de montaje.
En un entorno de observabilidad, una misma métrica puede existir para muchos equipos, servicios o dispositivos. Las etiquetas indican a qué recurso pertenece cada valor.
Por ejemplo:
La métrica es:
Y las etiquetas son:
Objetivos¶
Al finalizar esta sesión, el alumno podrá:
- Diferenciar entre el nombre de una métrica y sus etiquetas.
- Consultar series mediante selectores de etiquetas.
- Utilizar coincidencias exactas y expresiones regulares.
- Identificar las etiquetas habituales de Node Exporter.
- Utilizar etiquetas para filtrar resultados en PromQL.
- Agrupar series mediante etiquetas.
- Crear variables dinámicas en Grafana.
- Utilizar variables de selección única y múltiple.
- Comprender el impacto de la cardinalidad.
- Identificar etiquetas apropiadas para dashboards y alertas.
- Diagnosticar consultas vacías o excesivamente amplias.
- Diseñar dashboards reutilizables para varias instancias.
Introducción¶
Prometheus almacena cada serie temporal como una combinación de:
- Nombre de métrica.
- Conjunto de etiquetas.
- Valor.
- Marca temporal.
Por ejemplo:
Esta serie representa los segundos acumulados que la CPU 0 ha permanecido en modo idle en la instancia localhost:9100.
Si cambia una de las etiquetas, Prometheus considera que se trata de otra serie temporal.
Estas dos series son diferentes:
Aunque utilizan el mismo nombre de métrica, pertenecen a instancias distintas.
Métricas y etiquetas¶
Nombre de métrica¶
El nombre identifica el tipo de información almacenada.
Ejemplos:
Etiquetas¶
Las etiquetas aportan contexto a la métrica.
Ejemplo:
En este caso:
| Elemento | Valor |
|---|---|
| Métrica | node_load1 |
| Etiqueta | instance |
| Valor | localhost:9100 |
| Etiqueta | job |
| Valor | node_exporter |
Serie temporal completa¶
Una serie temporal puede representarse así:
Ejemplo:
Sus valores podrían ser:
Diferenciar series¶
Estas series tienen el mismo nombre, pero representan información diferente:
La primera corresponde a la interfaz ens33 y la segunda a la interfaz de loopback lo.
Etiquetas habituales¶
Etiqueta job¶
Identifica el trabajo o grupo de scraping configurado en Prometheus.
Ejemplo:
Valores habituales:
El valor depende de la configuración de Prometheus.
Etiqueta instance¶
Identifica normalmente la dirección del target consultado.
Ejemplo:
Otros ejemplos:
Etiqueta instance y puerto¶
La etiqueta instance suele incluir el puerto:
Por eso estas dos consultas no son equivalentes:
La segunda coincide con el formato habitual de Node Exporter.
Etiqueta job frente a instance¶
| Etiqueta | Describe |
|---|---|
job |
Tipo o grupo de servicio supervisado |
instance |
Dirección concreta del target |
Ejemplo:
Etiqueta device¶
Identifica una interfaz de red o un dispositivo.
Ejemplo:
Valores habituales:
Etiqueta mode¶
Aparece en métricas de CPU y representa el modo de ejecución.
Ejemplo:
Valores habituales:
Etiqueta cpu¶
Identifica el núcleo o procesador lógico.
Ejemplo:
Etiqueta mountpoint¶
Identifica el punto de montaje de un sistema de archivos.
Ejemplo:
Otros valores:
Etiqueta fstype¶
Identifica el tipo de sistema de archivos.
Ejemplo:
Valores habituales:
Etiqueta device¶
En métricas de sistemas de archivos puede identificar el dispositivo:
El significado exacto de una etiqueta depende de la métrica consultada.
Consultar etiquetas existentes¶
Consultar una métrica¶
La interfaz de Prometheus mostrará las etiquetas asociadas a cada serie.
Consultar todas las series de una métrica¶
Consultar las etiquetas de una métrica¶
curl -sG http://localhost:9090/api/v1/series \
--data-urlencode 'match[]=node_cpu_seconds_total' \
| jq
Consultar todos los nombres de etiquetas¶
Consultar todos los valores de una etiqueta¶
Para consultar los valores de job:
Para consultar los valores de instance:
Para consultar los valores de device:
Consultar todos los nombres de métricas¶
Esta consulta puede devolver muchos resultados en un entorno grande.
Selectores de etiquetas en PromQL¶
Los selectores permiten elegir únicamente las series que cumplen determinadas condiciones.
Coincidencia exacta¶
El operador = selecciona un valor concreto:
Coincidencia distinta¶
El operador != excluye un valor:
Excluir la interfaz de loopback:
Coincidencia mediante expresión regular¶
El operador =~ selecciona valores que coinciden con una expresión regular:
Seleccionar varias interfaces:
Seleccionar todas las interfaces cuyo nombre empiece por en:
Exclusión mediante expresión regular¶
El operador !~ excluye valores que coinciden con una expresión regular:
Excluir sistemas de archivos virtuales:
Combinar etiquetas¶
Todas las condiciones deben cumplirse.
Consultas con etiquetas¶
Consultar un trabajo concreto¶
Consultar una instancia concreta¶
Consultar CPU de una instancia¶
Consultar CPU en modo idle¶
Consultar la interfaz principal¶
Sustituye ens33 por el nombre real de la interfaz.
Consultar el sistema de archivos raíz¶
Consultar una combinación de trabajo e instancia¶
Agregaciones por etiquetas¶
Las agregaciones permiten resumir varias series conservando las etiquetas necesarias.
sum by¶
Sumar tráfico por instancia:
Sumar tráfico por interfaz:
avg by¶
Calcular la carga media por instancia:
Calcular el uso de CPU por instancia:
max by¶
Obtener la carga máxima por instancia:
Obtener el uso máximo de almacenamiento por instancia:
count by¶
Contar targets por trabajo:
Contar interfaces por instancia:
sum without¶
Excluir etiquetas de la agrupación:
Elegir las etiquetas de agrupación¶
Antes de utilizar una agregación, decide qué contexto debe conservarse.
Ejemplo:
El resultado conserva instance, pero ya no diferencia las interfaces.
Si necesitas conservar la interfaz:
Etiquetas y métricas de CPU¶
Consultar todos los núcleos¶
Filtrar una instancia¶
Filtrar un núcleo¶
Filtrar el modo idle¶
CPU utilizada por instancia¶
CPU utilizada por núcleo¶
Este resultado conserva etiquetas como:
CPU utilizada por instancia y modo¶
Etiquetas y métricas de red¶
Consultar las interfaces¶
Consultar una interfaz concreta¶
Excluir loopback¶
Excluir interfaces virtuales¶
Tráfico recibido por interfaz¶
Tráfico recibido agregado por instancia¶
sum by (instance) (
rate(
node_network_receive_bytes_total{
device!~"lo|docker.*|veth.*|br-.*"
}[5m]
)
)
Tráfico recibido por instancia e interfaz¶
sum by (instance, device) (
rate(
node_network_receive_bytes_total{
device!~"lo|docker.*|veth.*|br-.*"
}[5m]
)
)
Etiquetas y sistemas de archivos¶
Consultar todos los puntos de montaje¶
Consultar la raíz¶
Filtrar por tipo de sistema de archivos¶
Excluir sistemas virtuales¶
Consultar un dispositivo concreto¶
El nombre real del dispositivo puede variar. Consulta primero las series disponibles.
Porcentaje utilizado por punto de montaje¶
Porcentaje utilizado únicamente en /¶
100 * (
1 -
node_filesystem_avail_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
mountpoint="/",
fstype!~"tmpfs|overlay|squashfs"
}
)
Porcentaje utilizado por instancia y punto de montaje¶
100 * (
1 -
node_filesystem_avail_bytes{
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
fstype!~"tmpfs|overlay|squashfs"
}
)
El resultado conserva etiquetas como:
Variables en Grafana¶
Las variables de Grafana permiten seleccionar dinámicamente valores utilizados en las consultas.
Un dashboard con una variable puede funcionar para:
- Varias instancias.
- Varios trabajos.
- Varias interfaces.
- Varios puntos de montaje.
- Varios dispositivos.
- Diferentes entornos.
Sin variables, una consulta puede quedar fijada a una única instancia:
Con una variable llamada instance:
El dashboard podrá cambiar de instancia sin modificar manualmente cada panel.
Crear una variable de instancia¶
Paso 1: abrir la configuración del dashboard¶
En Grafana:
- Abre el dashboard.
- Accede a Dashboard settings.
- Selecciona Variables.
- Pulsa Add variable.
Paso 2: configurar la variable¶
Utiliza valores similares a:
Paso 3: consultar los valores¶
Una consulta habitual es:
En algunas versiones de Grafana, el editor de variables ofrece directamente el selector de etiqueta. En versiones recientes, la sintaxis disponible puede variar según el tipo de consulta y la versión instalada.
Paso 4: guardar la variable¶
Guarda la variable y comprueba que aparece en la parte superior del dashboard.
Crear una variable de trabajo¶
Consulta¶
Configuración recomendada:
Utilizarla en una consulta¶
Si se permite seleccionar varios trabajos:
Crear una variable de interfaz¶
Consulta¶
Configuración recomendada:
Utilizarla en un panel¶
Crear una variable de punto de montaje¶
Consulta¶
Utilizarla en un panel¶
100 * (
1 -
node_filesystem_avail_bytes{
instance=~"$instance",
mountpoint=~"$mountpoint"
}
/
node_filesystem_size_bytes{
instance=~"$instance",
mountpoint=~"$mountpoint"
}
)
Puede ser necesario filtrar sistemas de archivos virtuales:
100 * (
1 -
node_filesystem_avail_bytes{
instance=~"$instance",
mountpoint=~"$mountpoint",
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
instance=~"$instance",
mountpoint=~"$mountpoint",
fstype!~"tmpfs|overlay|squashfs"
}
)
Selección única y múltiple¶
Selección única¶
La variable permite seleccionar un único valor:
La consulta puede utilizar:
Selección múltiple¶
La variable permite seleccionar varios valores:
La consulta debe utilizar una expresión regular:
No utilices:
para una variable múltiple, porque puede no coincidir con varios valores.
Opción All¶
La opción Include All option permite seleccionar todas las instancias.
En ese caso, utiliza:
La expresión regular generada por Grafana puede ser similar a:
Variables encadenadas¶
Una variable puede depender del valor seleccionado en otra.
Variable de instancia¶
Variable de interfaz dependiente de la instancia¶
Variable de punto de montaje dependiente de la instancia¶
El flujo será:
Variables constantes¶
No todas las variables tienen que consultar Prometheus.
Una variable de tipo custom puede contener valores definidos manualmente:
Ejemplo:
Utilización:
Esta consulta solo funcionará si la etiqueta environment existe en las series.
Variables de intervalo temporal¶
Grafana puede utilizar una variable de intervalo para modificar la ventana de consulta.
Ejemplo:
Consulta:
También puede utilizarse:
$__rate_interval es útil porque Grafana adapta el intervalo a la resolución temporal del panel.
Variables integradas de Grafana¶
Grafana proporciona variables integradas para el intervalo y el tiempo.
Ejemplos:
Utilizar $__rate_interval¶
Utilizar $__interval¶
Utilizar el rango temporal del dashboard¶
La disponibilidad concreta de las variables depende del contexto del panel y de la fuente de datos.
Dashboards reutilizables¶
Panel de CPU con instancia seleccionable¶
100 * (
1 -
avg by (instance) (
rate(
node_cpu_seconds_total{
instance=~"$instance",
mode="idle"
}[$__rate_interval]
)
)
)
Panel de memoria con instancia seleccionable¶
100 * (
1 -
node_memory_MemAvailable_bytes{
instance=~"$instance"
}
/
node_memory_MemTotal_bytes{
instance=~"$instance"
}
)
Panel de almacenamiento con instancia y punto de montaje¶
100 * (
1 -
node_filesystem_avail_bytes{
instance=~"$instance",
mountpoint=~"$mountpoint",
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
instance=~"$instance",
mountpoint=~"$mountpoint",
fstype!~"tmpfs|overlay|squashfs"
}
)
Panel de red con instancia e interfaz¶
sum by (instance, device) (
rate(
node_network_receive_bytes_total{
instance=~"$instance",
device=~"$device"
}[$__rate_interval]
)
)
Panel de disponibilidad¶
Etiquetas en Grafana¶
Mostrar una etiqueta en la leyenda¶
En un panel de Grafana, puedes utilizar una leyenda como:
Para identificar también la interfaz:
Para CPU por núcleo:
Ejemplo de nombres de series¶
Consulta:
rate(
node_network_receive_bytes_total{
instance=~"$instance",
device=~"$device"
}[$__rate_interval]
)
Leyenda:
Ocultar etiquetas no necesarias¶
Si el panel muestra demasiadas series:
- Revisa las etiquetas de la consulta.
- Utiliza una agregación.
- Conserva únicamente las etiquetas necesarias.
- Configura una leyenda clara.
Ejemplo:
Esta consulta oculta la separación por interfaz y muestra el total por instancia.
Cardinalidad¶
La cardinalidad es el número de series temporales generadas por una métrica y sus combinaciones de etiquetas.
Ejemplo de cardinalidad baja¶
Si existen diez instancias, se generan aproximadamente diez series para esa métrica.
Ejemplo de cardinalidad mayor¶
La cantidad de series aumenta por la combinación de:
- Instancias.
- CPUs.
- Modos.
- Trabajos.
Etiquetas controladas¶
Son ejemplos de etiquetas normalmente adecuadas:
Etiquetas peligrosas¶
No conviene utilizar como etiquetas valores con una cantidad enorme de posibilidades o que cambien continuamente.
Ejemplos potencialmente peligrosos:
Cada valor diferente puede crear una serie nueva.
Consecuencias de una cardinalidad elevada¶
Una cardinalidad excesiva puede producir:
- Mayor consumo de memoria.
- Mayor uso de almacenamiento.
- Consultas más lentas.
- Dashboards más pesados.
- Mayor tiempo de evaluación de reglas.
- Dificultades de mantenimiento.
Comprobar la cardinalidad conceptual¶
Cuando diseñes una métrica, responde:
- ¿Cuántos valores puede tener cada etiqueta?
- ¿Cuántas combinaciones pueden generarse?
- ¿Los valores son estables?
- ¿La etiqueta será necesaria en las consultas?
- ¿Puede sustituirse por otra información menos variable?
Etiquetas en reglas de alertas¶
Las etiquetas de una métrica y las etiquetas de una alerta cumplen funciones distintas.
Etiquetas de una métrica¶
Identifican una serie:
Etiquetas de una alerta¶
Clasifican una alerta:
Ejemplo conceptual¶
groups:
- name: sistema
rules:
- alert: NodeExporterDown
expr: up{job="node_exporter"} == 0
for: 5m
labels:
severity: critical
servicio: node_exporter
annotations:
summary: Node Exporter no está disponible
description: El target {{ $labels.instance }} no responde
En este ejemplo:
jobeinstanceproceden de la métrica.severityyserviciose añaden a la alerta.{{ $labels.instance }}utiliza una etiqueta de la serie que activó la alerta.
Etiquetas externas¶
Prometheus puede añadir etiquetas externas a las métricas o alertas enviadas a otros sistemas.
Ejemplo conceptual:
Estas etiquetas pueden ayudar a distinguir datos procedentes de diferentes Prometheus.
Relabeling¶
El relabeling permite modificar etiquetas durante el proceso de descubrimiento o scraping.
Puede utilizarse para:
- Cambiar nombres de etiquetas.
- Añadir etiquetas.
- Eliminar etiquetas.
- Filtrar targets.
- Reescribir direcciones.
- Normalizar valores.
Ejemplo de añadir una etiqueta al target¶
scrape_configs:
- job_name: node_exporter
static_configs:
- targets:
- localhost:9100
labels:
entorno: laboratorio
servicio: sistema
Después, las consultas pueden filtrar por:
Ejemplo de conservar solo determinados targets¶
Ejemplo de eliminar una etiqueta¶
El relabeling debe utilizarse con cuidado porque puede modificar la identidad de las series.
Relabeling de métricas¶
metric_relabel_configs se aplica a las muestras después del scraping y antes de almacenarlas.
Ejemplo conceptual:
Esta configuración puede reducir series que no sean necesarias para el dashboard.
Antes de aplicarla:
- Identifica las métricas afectadas.
- Comprueba que no se utilizan en alertas.
- Valida la configuración.
- Realiza una copia de seguridad.
- Reinicia Prometheus.
- Comprueba las consultas posteriores.
Diagnóstico de etiquetas¶
La consulta no devuelve resultados¶
Consulta original:
Posible problema: el valor real incluye el puerto.
Consulta de diagnóstico:
Después revisa la etiqueta instance y utiliza el valor real:
No se conoce el nombre de una etiqueta¶
Consulta todas las etiquetas:
No se conocen los valores de una etiqueta¶
La variable de Grafana aparece vacía¶
Comprueba:
- La fuente de datos seleccionada.
- El nombre exacto de la etiqueta.
- Que la métrica exista.
- Que Prometheus tenga series recientes.
- Que la consulta no contenga un filtro incorrecto.
- Que el dashboard tenga acceso a la fuente de datos.
Prueba primero:
Después:
La consulta devuelve demasiadas series¶
Comprueba las etiquetas incluidas:
Después filtra:
O agrega:
La selección múltiple no funciona¶
Incorrecto:
Correcto:
Cuando una variable permite varios valores, normalmente debe utilizarse =~.
Sesión práctica 1: descubrir etiquetas¶
En esta sesión se identificarán las etiquetas disponibles en el entorno.
Objetivo¶
Consultar los nombres y valores de las etiquetas utilizadas por Node Exporter.
Consultar una métrica básica¶
Anota las etiquetas que aparecen.
Consultar las etiquetas de CPU¶
Identifica:
Consultar las etiquetas de red¶
Identifica:
Consultar las etiquetas de almacenamiento¶
Identifica:
Utilizar la API¶
Consultar valores de instance¶
Consultar valores de device¶
Evidencia¶
Crea un fichero con los resultados:
{
echo "Etiquetas disponibles:"
curl -s http://localhost:9090/api/v1/labels
echo
echo "Valores de instance:"
curl -s http://localhost:9090/api/v1/label/instance/values
echo
echo "Valores de device:"
curl -s http://localhost:9090/api/v1/label/device/values
} | tee inventario-etiquetas.txt
Preguntas de análisis¶
- ¿Qué etiquetas aparecen en
up? - ¿Qué etiquetas aparecen en las métricas de CPU?
- ¿Qué etiquetas aparecen en las métricas de red?
- ¿Qué valores tiene
instance? - ¿Qué interfaces aparecen en
device? - ¿Qué sistemas de archivos aparecen en
mountpoint?
Sesión práctica 2: filtrar mediante etiquetas¶
Objetivo¶
Practicar los operadores =, !=, =~ y !~.
Coincidencia exacta¶
Excluir un trabajo¶
Seleccionar varias opciones¶
Excluir interfaces virtuales¶
Filtrar la raíz¶
Combinar filtros¶
Actividad¶
Para cada consulta, anota:
Sesión práctica 3: construir variables en Grafana¶
Objetivo¶
Crear un dashboard que permita seleccionar una instancia y una interfaz.
Crear la variable instance¶
Utiliza:
Name: instance
Label: Instancia
Type: Query
Data source: Prometheus
Query: label_values(up, instance)
Activa, si procede:
Crear la variable device¶
Utiliza:
Name: device
Label: Interfaz
Type: Query
Data source: Prometheus
Query: label_values(
node_network_receive_bytes_total{
instance=~"$instance"
},
device
)
Activa:
Crear un panel de tráfico recibido¶
Utiliza:
sum by (instance, device) (
rate(
node_network_receive_bytes_total{
instance=~"$instance",
device=~"$device"
}[$__rate_interval]
)
)
Configura la leyenda como:
Validación¶
- Selecciona una instancia.
- Comprueba la lista de interfaces.
- Selecciona una interfaz.
- Comprueba el gráfico.
- Activa la opción All.
- Comprueba que aparecen varias interfaces.
- Revisa que la leyenda identifique cada serie.
Sesión práctica 4: CPU parametrizada¶
Objetivo¶
Crear un panel de CPU reutilizable para varias instancias.
Crear la variable¶
Variable:
Crear la consulta¶
100 * (
1 -
avg by (instance) (
rate(
node_cpu_seconds_total{
instance=~"$instance",
mode="idle"
}[$__rate_interval]
)
)
)
Configurar el panel¶
Utiliza:
Actividad de carga¶
En una terminal, ejecuta:
Observa el panel y después detén el proceso:
Preguntas de análisis¶
- ¿La variable cambia correctamente la instancia?
- ¿Qué ocurre al seleccionar All?
- ¿La consulta devuelve una serie o varias?
- ¿Qué etiqueta se conserva después de
avg by (instance)? - ¿Qué ocurre con el panel al generar carga?
Sesión práctica 5: almacenamiento por punto de montaje¶
Objetivo¶
Crear un panel que permita elegir un punto de montaje.
Crear la variable mountpoint¶
Consulta:
label_values(
node_filesystem_size_bytes{
instance=~"$instance",
fstype!~"tmpfs|overlay|squashfs"
},
mountpoint
)
Configuración:
Name: mountpoint
Label: Punto de montaje
Type: Query
Multi-value: activado
Include All option: activado
Crear la consulta¶
100 * (
1 -
node_filesystem_avail_bytes{
instance=~"$instance",
mountpoint=~"$mountpoint",
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
instance=~"$instance",
mountpoint=~"$mountpoint",
fstype!~"tmpfs|overlay|squashfs"
}
)
Configurar la leyenda¶
Validación¶
Comprueba:
- El valor de
/. - El valor de otros puntos de montaje.
- La selección múltiple.
- La opción All.
- La exclusión de sistemas virtuales.
- La unidad en porcentaje.
Sesión práctica 6: etiquetas y agregaciones¶
Objetivo¶
Observar cómo cambia el resultado al conservar o eliminar etiquetas.
Tráfico por interfaz¶
Tráfico por instancia e interfaz¶
Tráfico total por instancia¶
Tráfico total del entorno¶
Comparación¶
Completa esta tabla:
| Consulta | Número de series | Etiquetas conservadas |
|---|---|---|
rate(node_network_receive_bytes_total[5m]) |
||
sum by (instance, device) (...) |
||
sum by (instance) (...) |
||
sum(...) |
Preguntas de análisis¶
- ¿Qué información se pierde al eliminar
device? - ¿Qué consulta es adecuada para un panel por interfaz?
- ¿Qué consulta es adecuada para un panel global?
- ¿Qué consulta tiene menor cardinalidad?
- ¿Qué consulta sería más sencilla de representar?
Sesión práctica 7: diagnosticar una variable vacía¶
Objetivo¶
Resolver una variable de Grafana que no muestra valores.
Situación inicial¶
La variable utiliza:
Pero no devuelve resultados.
Paso 1: comprobar la métrica¶
Paso 2: revisar el nombre real de la etiqueta¶
Paso 3: consultar valores de instance¶
Paso 4: corregir la consulta¶
El problema era que la etiqueta correcta se llama instance, no instancia.
Paso 5: comprobar filtros¶
Una consulta demasiado restrictiva también puede devolver cero resultados:
Prueba con:
Registro de diagnóstico¶
Variable:
Consulta inicial:
Resultado inicial:
Comprobación realizada:
Nombre correcto de la etiqueta:
Consulta corregida:
Resultado final:
Causa del problema:
Sesión práctica 8: diseñar un dashboard reutilizable¶
Objetivo¶
Crear un dashboard con variables y paneles reutilizables.
Variables¶
Crea estas variables:
Panel de disponibilidad¶
Leyenda:
Panel de CPU¶
100 * (
1 -
avg by (instance) (
rate(
node_cpu_seconds_total{
instance=~"$instance",
mode="idle"
}[$__rate_interval]
)
)
)
Panel de memoria¶
100 * (
1 -
node_memory_MemAvailable_bytes{
instance=~"$instance"
}
/
node_memory_MemTotal_bytes{
instance=~"$instance"
}
)
Panel de almacenamiento¶
100 * (
1 -
node_filesystem_avail_bytes{
instance=~"$instance",
mountpoint=~"$mountpoint",
fstype!~"tmpfs|overlay|squashfs"
}
/
node_filesystem_size_bytes{
instance=~"$instance",
mountpoint=~"$mountpoint",
fstype!~"tmpfs|overlay|squashfs"
}
)
Panel de red¶
sum by (instance, device) (
rate(
node_network_receive_bytes_total{
instance=~"$instance",
device=~"$device"
}[$__rate_interval]
)
)
Lista de comprobación¶
Comprueba que:
- Las variables muestran valores.
- La selección de instancia funciona.
- La selección múltiple funciona.
- La opción All funciona.
- Los paneles actualizan sus datos.
- Las leyendas son comprensibles.
- Las unidades son correctas.
- No aparecen interfaces virtuales innecesarias.
- Los puntos de montaje son reconocibles.
- El dashboard funciona con más de una instancia.
Buenas prácticas¶
- Utiliza nombres de etiquetas coherentes.
- Filtra por
instanceyjobcuando existan varias fuentes. - Utiliza
=~para variables múltiples. - Utiliza
=para variables de selección única. - Comprueba los valores reales de las etiquetas antes de crear una variable.
- No confundas
instancecon el nombre DNS del equipo. - Recuerda que
instancesuele incluir el puerto. - Conserva únicamente las etiquetas necesarias en las agregaciones.
- Evita crear etiquetas con valores que cambien continuamente.
- Controla la cardinalidad.
- Utiliza nombres descriptivos para las variables.
- Añade una etiqueta visible a cada variable.
- Define valores por defecto razonables.
- Comprueba el comportamiento de la opción All.
- Utiliza
$__rate_intervalpara consultasrateen Grafana. - Revisa las leyendas de los paneles.
- Documenta el significado de cada etiqueta.
- Valida las consultas directamente en Prometheus antes de utilizarlas en Grafana.
Errores frecuentes¶
Utilizar un nombre de etiqueta incorrecto¶
Incorrecto:
Correcto:
Omitir el puerto de instance¶
Incorrecto:
Correcto, si ese es el valor real:
Utilizar = con una variable múltiple¶
Incorrecto:
Correcto:
Agregar eliminando demasiado contexto¶
Esta consulta muestra únicamente un valor global:
Si necesitas distinguir instancias:
Si necesitas distinguir instancias e interfaces:
No filtrar interfaces virtuales¶
Una consulta de red puede incluir:
Utiliza:
No filtrar sistemas de archivos virtuales¶
Utiliza:
Crear etiquetas de alta cardinalidad¶
Evita utilizar como etiquetas:
Estas etiquetas pueden generar una cantidad excesiva de series.
Tabla rápida de operadores de etiquetas¶
| Operador | Función | Ejemplo |
|---|---|---|
= |
Coincidencia exacta | {job="node_exporter"} |
!= |
Excluir valor exacto | {device!="lo"} |
=~ |
Coincidencia regular | {device=~"en.*"} |
!~ |
Excluir expresión regular | {fstype!~"tmpfs|overlay"} |
Tabla rápida de etiquetas¶
| Etiqueta | Uso habitual | Ejemplo |
|---|---|---|
job |
Trabajo de scraping | job="node_exporter" |
instance |
Target concreto | instance="localhost:9100" |
device |
Interfaz o dispositivo | device="ens33" |
cpu |
Núcleo lógico | cpu="0" |
mode |
Modo de CPU | mode="idle" |
mountpoint |
Punto de montaje | mountpoint="/" |
fstype |
Tipo de sistema de archivos | fstype="ext4" |
Tabla rápida de variables de Grafana¶
| Variable | Consulta habitual | Uso |
|---|---|---|
instance |
label_values(up, instance) |
Seleccionar equipo |
job |
label_values(up, job) |
Seleccionar trabajo |
device |
label_values(node_network_receive_bytes_total, device) |
Seleccionar interfaz |
mountpoint |
label_values(node_filesystem_size_bytes, mountpoint) |
Seleccionar punto de montaje |
Puntos clave¶
- Una serie temporal está definida por una métrica y un conjunto de etiquetas.
- El nombre de la métrica identifica el tipo de información.
- Las etiquetas proporcionan contexto.
jobidentifica el trabajo de scraping.instanceidentifica normalmente el target y su puerto.devicesuele identificar una interfaz o dispositivo.modeidentifica el modo de CPU.mountpointidentifica un punto de montaje.fstypeidentifica el tipo de sistema de archivos.=realiza coincidencias exactas.=~permite expresiones regulares.- Las variables múltiples de Grafana suelen requerir
=~. bypermite conservar determinadas etiquetas al agregar.- Una cardinalidad elevada puede afectar al rendimiento.
- Las etiquetas deben ser estables, útiles y controladas.
- Las variables hacen que los dashboards sean reutilizables.
$__rate_intervalresulta útil en consultasratedentro de Grafana.- Antes de crear una variable, comprueba que la etiqueta y sus valores existan.
- Una consulta vacía puede deberse a un nombre incorrecto, un filtro demasiado restrictivo o la ausencia de datos.
- Las etiquetas de una métrica y las etiquetas de una alerta no son exactamente lo mismo.
Preguntas de comprobación¶
- ¿Qué diferencia existe entre el nombre de una métrica y una etiqueta?
- ¿Qué información suele representar la etiqueta
job? - ¿Qué información suele representar la etiqueta
instance? - ¿Por qué
localhostylocalhost:9100pueden ser valores diferentes deinstance? - ¿Qué función cumple la etiqueta
device? - ¿Qué función cumple la etiqueta
mode? - ¿Qué diferencia existe entre
=y=~? - ¿Qué operador utilizarías para excluir las interfaces
loydocker0? - ¿Qué operador debes utilizar normalmente con una variable múltiple de Grafana?
- ¿Qué función cumple
sum by (instance)? - ¿Qué información se pierde al utilizar
sum(...)sinby? - ¿Qué es la cardinalidad?
- ¿Por qué
request_idpuede ser una etiqueta problemática? - ¿Qué consulta utilizarías para conocer las instancias disponibles?
- ¿Qué consulta utilizarías para conocer las interfaces de red?
- ¿Por qué una variable de Grafana puede aparecer vacía?
- ¿Qué diferencia existe entre una variable de selección única y una variable múltiple?
- ¿Qué etiquetas conviene conservar en un panel de tráfico por interfaz?
- ¿Qué etiquetas conviene conservar en un panel de tráfico total por instancia?
- ¿Qué pasos seguirías para diagnosticar una consulta que no devuelve datos?