Grafana: Característica: tratar nulo como cero para los umbrales de coloración

Creado en 24 jul. 2015  ·  24Comentarios  ·  Fuente: grafana/grafana

Para los paneles Singlestat en particular, sería útil tratar el nulo como cero; de lo contrario, no hay forma de colorear un panel con un resultado nulo.

Comentario más útil

Es posible devolver 0 para null en Prometheus con el operador OR: exression OR on() vector(0) devolverá 0 si la expresión métrica no devuelve nada. @pdf @torkelo

Todos 24 comentarios

La función transformNull funciona muy bien si usas Graphite

No hay ningún mecanismo de relleno que pueda ver en este momento para mi backend.

¿cual es?

Prometeo

¿Prometheus tiene funciones / características de transformación? Todavía tengo que probarlo (tengo muchas ganas de hacerlo, podría agregar Prometheus como complemento oficial de fuente de datos)

Una selección bastante decente: http://prometheus.io/docs/querying/functions/

En grafana 2.1, parece que los valores 'nulos' se tratan como valores 0, en lo que respecta al color (incluso si se asigna nulo a un texto como en # 1166).

Para hacerlo un poco más desafiante: si más bajo es mejor, sin embargo, es posible que desee establecer umbrales para verde / naranja / rojo en 0/1/3, es decir, se lee un valor> 3 (pero tal vez nulo también debería ser rojo). Entonces, un valor nulo se vuelve verde, pero puede argumentar que debería ser rojo.

Al abordar este problema, vale la pena considerarlo junto con el n. ° 1319. Por ejemplo, podrían abordarse simultáneamente implementando rangos para mapeos de texto y especificando codificaciones de colores para dichos textos (los colores para los valores se especifican indirectamente, lo que es más flexible pero posiblemente más engorroso).

@torkelo Estoy de acuerdo con @feliksik e iría tan lejos como llamar a esto un error: cuando uno de mis nodos monitoreados se desconecta, consultar su promedio de carga devuelve nulo. Dado que el panel de estado simple reemplaza nulo por cero, el panel muestra "N / A" en verde, cuando realmente debería ser rojo o incoloro (preferiblemente dependiendo de una opción de configuración).


Editar: resulta que esta característica existía antes (# 1130), pero se eliminó en cc21c66b3a128ea680be2e491cb89f8da90b2677. Supongo que podemos mover la discusión al # 1130.

+1 Estoy de acuerdo con @ n-st y @feliksik : actualmente nuestro panel de control muestra 'rojo' para N / A cuando, de hecho, N / A significa que no hay datos / ninguna actividad, por lo que idealmente debería estar sin colorear.

Es posible devolver 0 para null en Prometheus con el operador OR: exression OR on() vector(0) devolverá 0 si la expresión métrica no devuelve nada. @pdf @torkelo

cerrando esto ya que la mayoría de los backends de TSDB tienen formas de manejar nulos en la consulta

@grobie

es cierto que el operador OR corrige esto si la expresión era nula. Sin embargo, en una sola página de estadísticas, esto corrige el color para los valores nulos, pero lo rompe para las métricas no nulas, ya que se informará que tienen múltiples valores: el valor real y el {} agregado por su expresión de prometheus.

¿Puedo sugerir que se vuelva a abrir este problema?

@boeboe Actualicé mi expresión del comentario anterior. Este debería funcionar para ti.

Explicación: Prometheus utiliza la coincidencia de etiquetas en las expresiones. Si su expression devuelve algo con etiquetas, no coincidirá con la serie de tiempo generada por vector(0) . Para que esto sea posible, es necesario decirle a Prometheus explícitamente que no intente hacer coincidir ninguna etiqueta agregando on() .

@grobie gracias por tu explicación. Desafortunadamente, la documentación de Prometheus no da un ejemplo claro sobre el uso del operador on() (https://prometheus.io/docs/querying/operators)

Aquí está mi consulta actual:
counter_services_active_sessions_responses_4xx_total{kubernetes_namespace="dev-appservicebase"} OR vector(0)

¿Cómo debo reescribir este para evitar duplicados en caso de que las métricas existan (en este caso, un microservicio tiene respuestas HTTP 4xx de retorno). En este momento, la consulta devuelve los siguientes 2 resultados:

counter_services_active_sessions_responses_4xx_total {instancia = "172.24.27.130:8081", trabajo = "kubernetes-pods", kubernetes_namespace = "dev-appservicebase", kubernetes_pod_name = "active-sessions-dp-3210291495-nw9netes_name =" nodo_172-n7-16 ", kubernetes_name_name -24-24 ", pod_template_hash =" 3210291495 ", type =" active-session-type "} 1173
{} 0

@grobie no importa mi último comentario, debo verte actualizar la consulta. ¡Gracias!

¿Alguien tiene una solución de consulta para MySQL?

@TheFrogDaddy puede usar un caso de selección cuando y / o en combinación con la función coalesce .

@TheFrogDaddy puede usar un caso de selección cuando y / o en combinación con la función coalesce .

Hola, gracias por responderme tan rápido. No consigo que esto funcione, ¿me estoy perdiendo algo?

Intenté esto:

SELECT $__timeGroup(updated, '1h', 0) AS time, COALESCE(SUM(1),0) as value, 'Errors' AS metric FROM mytable WHERE $__timeFilter(updated) AND error_message IS NOT NULL GROUP BY 1;

Y esto

SELECT $__timeGroup(updated, '1h', 0) AS time, CASE ISNULL(SUM(1)) WHEN TRUE THEN 0 ELSE SUM(1) END AS value, 'Errors' AS metric FROM myTable WHERE $__timeFilter(updated) AND error_message IS NOT NULL GROUP BY 1;

Gracias

@TheFrogDaddy, ¿qué estás tratando de resumir con sum(1) ? No tiene ningún sentido para mí. Sugeriría que continuemos las discusiones en nuestro sitio de la comunidad y específicamente en la etiqueta mysql . Abra un nuevo tema allí y me puede hacer ping por @ + mefraimsson

Es posible devolver 0 para null en Prometheus con el operador OR: exression OR on() vector(0) devolverá 0 si la expresión métrica no devuelve nada. @pdf @torkelo

¡¡No te olvides de la opción activa instantánea !!

Eso es bueno

Es posible devolver 0 para null en Prometheus con el operador OR: exression OR on() vector(0) devolverá 0 si la expresión métrica no devuelve nada. @pdf @torkelo

bueno. hermano

Es posible devolver 0 para null en Prometheus con el operador OR: exression OR on() vector(0) devolverá 0 si la expresión métrica no devuelve nada. @pdf @torkelo

Esto no funciona con by (label) , mientras que esto parece funcionar:

expression OR up*0
sum by (label) (data_metric) - sum by (label) (nodata_metric or up*0)

Aquí están mis 2 centavos

sum(expression) by (label) -
sum(expression offset $__interval OR expression * 0) by (label)

Esto me puede dar la diferencia de la expresión 2 en el intervalo objetivo. Si la serie temporal no está presente, el cálculo se realiza considerando que el valor es 0

¿Fue útil esta página
0 / 5 - 0 calificaciones