Grafana: Gráfico: Límites en la escala automática Y (mínimo máximo)

Creado en 24 oct. 2014  ·  46Comentarios  ·  Fuente: grafana/grafana

Tengo un gráfico que muestra las tasas de error y establecí el eje máximo en auto . El problema es que en días tranquilos, con una tasa de error baja, el eje se contrae para mostrar pequeños puntos como grandes montañas. Podría establecer el máximo a un valor particular. Pero no quiero apuntar hacia abajo y experimentar un gráfico que se sale del gráfico. Y no quiero establecer el máximo tan alto como para no obtener gráficos "medios" legibles. (No quiero usar umbrales, ya que tengo gráficos en el otro eje y no quiero causar confusión con esos rangos).

Una solución ideal sería tener un ajuste "mínimo-máximo". Podría establecer el mínimo-máximo en 100, y el eje nunca sería más pequeño que eso. Pero, crecería si fuera necesario.

arepanegraph help wanted prioritnice-to-have typfeature-request

Comentario más útil

Desde hace casi 2 años:

revirtió la función en espera de tiempo para descubrir la interfaz de usuario

Por favor traiga > y < mientras se considera una mejor interfaz de usuario.

Todos 46 comentarios

Gracias, idea interesante. Parece un pequeño caso de borde. Pero estoy de acuerdo, podría ser útil en ocasiones.

Sí, solo quería plasmar mis pensamientos en papel. :cerveza:

No creo que este sea un caso marginal.
Configure AutoScale hacia arriba. Establezca 0-100 como la rabia mínima, pero permita que el gráfico se amplíe tanto como desee. Esto ha causado pánico varias veces entre los directores y vicepresidentes hasta que les pedí que miraran la escala en la que estaba.

+1 Muchos de los datos de series de tiempo que visualizo en grafana se encuentran en cero + ruido, y esto hace que los gráficos parezcan confusos y poco claros.

+1 de un usuario de Grafana.net.

La escala mínima ayudaría para cosas como interfaces de red, donde algunos de nuestros enlaces privados / vpn están inactivos (~ 20kb / s) pero cuando están en uso son 50-100Mb / s. Si configuro la escala en 100 Mb / sy se termina, no lo sé y si la configuro en 200 Mb / s, entonces no puedo ver los datos con claridad cuando son solo 5-10 Mb / s.

Entiendo que esta función probablemente solo sea útil para muy pocas personas. Pero he estado pirateando esto un poco. Y se me ocurrió algo que me funciona. La confirmación en mi bifurcación agrega un cuadro Y-Span a la pestaña Ejes.

Donde X es un número entero o flotante:

~X Span X around average
=X Span X around current value
>X Span is atleast X
<X Span is clamped to X

https://github.com/thoj/grafana/commit/7dcdccbd42e9f63b7388e439f7194fe7ead8039a

Ejemplo de por qué lo necesito:
y-span

¿Interesado en un PR?

@thoj Eso sería una gran adición. Usamos umbrales para algunos gráficos y nos gustaría mostrarlos siempre, pero aún escalando el gráfico para mostrar puntos mucho más altos que el umbral. "> X" funcionaría bien aquí (y

@lpalm ¡Sí! Agregaré una solicitud de extracción para intentar que la discusión continúe,

¿Está esto en el tren de lanzamiento 4.0.x? Estoy tratando de usar "<" y ">" en la configuración del eje Y, pero fue en vano.

no teníamos que revertirlo, queríamos una entrada / interfaz de usuario más fácil de usar que solo una característica oculta, ya que el campo de entrada admite expresiones como > y < por lo que revertimos la función en espera de tiempo para descubrir la interfaz de usuario

¿Podríamos tener esto en un dropbox además de Y-min e Y-max?

Hola,

Creé esta función para el proyecto de grafito hace un tiempo y llegué a la siguiente conclusión de que nunca querría usar yMax , ya que siempre quiero saber los valores del gráfico, lo que no haré con yMax .
¿Hay alguien que piense que yMax es una función útil o debería rediseñarse yMax para que funcione como minYMax ?

Quiero decir, si configuro yMax ax y el contador excede x, ¿alguien no querría ver cuánto excedió el límite?

Utilizo yMax cuando tengo porcentajes para asegurarme de que el 100% esté siempre exactamente en la parte superior del gráfico (incluso si hay una pequeña señal)

También necesito yMax. Esto se debe a algunas señales ruidosas que tienen picos muy altos que distorsionan los gráficos.

@iksaif sí, pero eso no debería requerir que se arregle yMax. Dado que su gráfico nunca excederá 100% y su yMax dinámico sería 100% su gráfico se vería exactamente igual que con la implementación actual de yMax ?

@thoj que no suena como una métrica confiable? ¿No querría en cambio que esos picos se excluyan del gráfico o si se preocupa por ellos realmente conocer el valor?

@Kvistian lo harían, sucede, por razones, que muestra 100.02%, y me gusta el hecho de que puedo limitar eso.

También hay ocasiones en las que solo quiero ver cuándo quiero "acercar" y puedo usar yMax para hacerlo.

Ok, pero ¿está de acuerdo en que la mayoría de los casos requerirían un yMax dinámico? En ese caso, ¿tendría sentido hacer que yMax sea dinámico y una nueva función como staticYMax o fixedYMax para esos casos yMax dinámico como predeterminado ya que es el caso de uso general.

Parece que establecer el límite inferior de la parte superior del gráfico podría ser útil, pero no cambiaría la semántica del yMax existente (que, en realidad, es el y máximo que se puede mostrar).

Sería interesante saber cómo se nombra esto en otro software similar

@Kvistian No todo el mundo quiere usar grafana solo para mostrar métricas limpias y agradables de los servidores. Quiero mostrar métricas de procesos físicos que son ruidosos y pueden devolver datos extraños a veces. Mira mis ejemplos y explicaciones aquí: https://github.com/grafana/grafana/pull/5720

@thoj No yMax dinámico. Cuando me topé con el problema con el grafito, asumí que yMax resolvería mi problema (ya que no pude ver ningún caso útil para un yMax estático real). En última instancia, es solo un problema de nombres en este momento.

Realmente no me importa si se llama yMax o minYMax , solo pensé que yMax se siente más como una función default que debería resolver el caso de uso más común.

Estoy mostrando un valor de estado de carga de la batería (SOC) y realmente me encantaría la función de poder establecer un límite superior e inferior mientras se conserva el escalado automático dentro de estos límites.

Aquí hay algunas imágenes del problema al que me enfrento al establecer o no establecer el valor Y-Max.

Si _no_ configuro el valor Y-Max, entonces el gráfico muestra valores SOC en la escala Y> 100%, lo que nunca ocurrirá. En otras palabras, en el caso del estado de carga de la batería:

0% <= y_scale_values <= 100%

screen shot 2017-02-07 at 21 31 01

Si _do_ establecer el valor de Y-Max, a continuación, cuando tenga bajos valores de SOC durante mucho tiempo el gráfico no auto-escala, como se muestra en la imagen de abajo.
screen shot 2017-02-07 at 21 29 35

Lo que me gustaría es poder establecer un límite superior (100%) e inferior (0%) pero aún tener la escala automática de la trama dentro de estos límites como lo hace en el momento en que los límites Y no están establecidos.

Simplemente agregando nuestro caso de uso. Estamos monitoreando un sitio web y tenemos un nivel de referencia de tráfico de verificación de estado para instancias 'en funcionamiento', que me gustaría mostrar como una línea gráfica 'baja' gráficamente (por ejemplo, 0.1 solicitud / seg, pero el eje sería como mínimo 1, mientras que aún habilitando el eje del gráfico para escalar hacia arriba cuando llega el tráfico 'real'.

Hay un truco para tener un valor máximo mínimo del eje Y.

Cree una métrica Baseline para la escala mínima que desee. Aquí elegí 1 para el tiempo de CPU:

image

Agregue anulaciones para la métrica de línea de base para hacerla desaparecer del gráfico:

image

Eso es.

El único inconveniente es que puede ver la línea de base cuando lo desplaza:

image

También necesito esto para la pantalla IO.

por ejemplo, la velocidad de lectura puede ser 50 kb / min o 500 MB / min, estableciendo una escala mínima; por ejemplo, 100 MB / min por defecto haría que mis gráficos fueran mucho más consistentes.

+1
¿Por favor?

@dstensnes Por favor, no deje comentarios de este formulario sobre problemas de GitHub. Puede agregar una reacción a la publicación inicial para mostrar que le gustaría esta función. Cuando comentas los +1, todos los que siguen este problema reciben un correo electrónico de notificación sin información relevante. Es simplemente de mala forma.

Bien, puedo vivir con eso :) ¿Alguien alguna vez ha visto las reacciones? Me di cuenta de que ahora puedes ordenar la cantidad de reacciones, así que eso es al menos algo. Gracias

Creo que la mayoría de los casos de uso de personas se cubrirían agregando una casilla de verificación de "límite flexible" junto a los campos Y-Min e Y-Max. Si mueve Y-Max a la siguiente fila, debería haber suficiente espacio tanto para la casilla de verificación como para la etiqueta, y la funcionalidad debería ser bastante autoexplicativa :)

No estoy seguro de cómo se puede considerar esto como un caso extremo, la aplicación principal que tenemos es el tráfico de red, pero en la mayoría de los gráficos no desea que los valores pequeños se muestren como "montañas".

¿Existe actualmente una solución alternativa para hacer eso?

¿Alguna actualización de esto? Esto dificulta mucho la configuración de buenos cuadros de mando.

Una idea de la interfaz de usuario sería tener:

  • YMax (suave): la parte superior del gráfico siempre se extiende hasta al menos aquí
  • YMax (difícil): la parte superior del gráfico nunca se extiende más allá de aquí
  • YMin (suave): la parte inferior del gráfico siempre se extiende al menos aquí
  • YMin (difícil): la parte inferior del gráfico nunca se extiende más allá de aquí

Otra versión de este podría ser un intervalo mínimo para el eje Y que define que el intervalo desde el nivel Y-bajo actual al Y-alto nunca debe ser menor que el valor dado. De esa manera, el render es libre de establecer dónde debe comenzar y terminar el eje y, y al mismo tiempo evitar cambios menores en los valores para que se representen como montañas.

Yo también encuentro que este es un problema muy común con datos ruidosos y la mayoría de los datos son ruidosos.

Creo que el problema real es que los valores atípicos sesgan la escala del eje Y haciendo que todo lo demás desaparezca. La forma en que veo la solución correcta es permitir que el rango del eje Y sea dinámico en función de los datos mostrados mientras se recortan los valores atípicos extremos. La mejor manera de hacerlo sería basar el rango en las desviaciones estándar del promedio de los datos mostrados. Por ejemplo, si establece 1 desviación estándar, cualquier valor que sea más de 1 desviación estándar por encima del promedio se recortará en el gráfico. Esto es fácil de configurar, se puede calcular fácilmente en el lado del cliente, por lo que no depende de la fuente de datos y sería razonablemente fácil de entender para la gente.

Desde hace casi 2 años:

revirtió la función en espera de tiempo para descubrir la interfaz de usuario

Por favor traiga > y < mientras se considera una mejor interfaz de usuario.

¡Estoy esperando desesperadamente una característica como la que se eliminó hace 2 años!

Incluso los gráficos con plantilla que monitorean la misma métrica en diferentes sistemas, uno al lado del otro, brindan imágenes inexactas, ya que las escalas se ajustan automáticamente de forma independiente basándose únicamente en los datos actuales en el gráfico.

Hay un truco para tener un valor máximo mínimo del eje Y.

Cree una métrica Baseline para la escala mínima que desee. Aquí elegí 1 para el tiempo de CPU:

image

Agregue anulaciones para la métrica de línea de base para hacerla desaparecer del gráfico:

image

Eso es.

El único inconveniente es que puede ver la línea de base cuando lo desplaza:

image

Para aquellos que leen la útil solución alternativa de baseline de la información sobre herramientas en la anulación.
image

@bobrik @ sb3tcs Hola, me gustaría usar su solución alternativa, pero Grafana termina con un error de sintaxis de consulta si todo lo que pongo en la consulta es solo 20 o algún otro número. ¿Cómo crear la métrica de línea de base? ¿O mi Grafana 5.1 es demasiado antiguo para admitir este tipo de consulta?

Usé algunas funciones encadenadas en una segunda consulta para evitar que los gráficos se acercaran demasiado al eje y.
En este ejemplo grafica los usuarios registrados de múltiples servidores en un gráfico.

Agregué una consulta adicional con los mismos puntos de datos:
offset (-20) aggregateBy (1m, min) removeBelowValue (0) setAlias ​​(hidden_min)

Esto cambia el zoom dinámico de
min hasta max
a
min-20 (sin entrar en negativos) hasta un máximo

Para ocultar el gráfico falso:
anulación de visualización con regex "/hidden_.*/"
Líneas: falso
Leyenda: falso
Ocultar en la información sobre

Probablemente incluso podría sincronizar el eje y entre varios gráficos. Como un panel por servidor y recopile min / max de los puntos de datos de todos los servidores en cada panel.

Encontré otra solución. Acabo de agregar una serie de tiempo mínima y máxima con la etiqueta mínima y máxima. La línea era así
weather,sensorID=min temperature=0
weather,sensorID=max temperature=20
Estos se agregan al gráfico y se ocultan como se mencionó anteriormente. El único problema es que debe inyectarlo de forma regular.
Así es como se ve, es posible que deba establecer la temperatura máxima en 19 para que ajuste automáticamente el eje a 20.

Unbenannt

Editar: inserte un máximo como 19 y funcionó.

Me encontré con este hilo en busca de una solución para establecer un y-max flexible en Grafana. Para mi caso de uso, estoy graficando la latencia y el volumen de la solicitud para una API. Quiero establecer un y-max flexible en aproximadamente 500 ms (.5 segundos), para poder ver mejor el matiz de las llamadas de latencia más baja al excluir valores atípicos puntiagudos y ajustar automáticamente el y-max cuando la latencia máxima está por debajo ese umbral.

Intenté configurar: y-min en 0 e y-max en <.5, pero luego mi eje y desaparece por completo o ignora el y-min. Este problema ocurrió independientemente de graficar la latencia y las consultas de volumen de solicitudes juntas / por separado. ¿Ha habido algún progreso nuevo en este tema? Sería muy beneficioso para mi equipo.

Incluyo algunas capturas de pantalla de mi gráfico con y-max configurado de manera diferente (cada caso etiquetado por el título del gráfico)
Screen Shot 2020-05-27 at 2 44 03 PM
Screen Shot 2020-05-27 at 2 42 56 PM
Screen Shot 2020-05-27 at 2 42 19 PM
Screen Shot 2020-05-27 at 2 41 39 PM

si no desea graficar valores superiores a 500 ms, puede intentar usar removeAboveValue (0.5)
luego dígale al gráfico cómo se deben manejar los valores nulos

no tengo ni idea de si hay una manera de utilizar los parámetros calculados para esta función

Una solución alternativa de referencia un poco más actualizada es la siguiente:

image

Esto evita que la consulta de línea de base aparezca en el gráfico, la leyenda y la información sobre herramientas flotante, y también evita que cause problemas con el apilamiento.

Este no es un caso realmente extremo, sino más bien un caso muy común. De hecho, creo que es muy frecuente que uno quiera un eje y con valores mínimos / máximos "suaves". La razón principal para establecer la escala del eje y es que se desea alinearla con el rango de datos esperado, y también tener varios gráficos con el eje y alineado para poder comparar valores fácilmente.

Sería interesante saber cómo se nombra esto en otro software similar

Highchartjs lo llama softMin / softMax.
https://api.highcharts.com/highcharts/yAxis

AnyChart lo llama mínimo / máximo suave.
https://docs.anychart.com/Axes_and_Grids/Scales#soft

Chartjs tiene la opción "sugeridoMin / Max" para manejar este caso de uso.
https://www.chartjs.org/docs/latest/axes/cartesian/linear.html#axis -range-settings

amCharts los llama min / max y estrictoMin / Max.
https://www.amcharts.com/docs/v4/reference/valueaxis/#strictMinMax_property

RRDtool, por ejemplo, tiene límites "suaves" por defecto cuando se usa la escala automática, pero tiene una opción llamada rigid que fuerza límites "estrictos" en la escala.

[-u | --valor de límite superior] [-l | --valor de límite inferior] [-r | --rígido] [--allow-shrink]

De forma predeterminada, el gráfico se ajustará automáticamente a la escala para que ajuste el eje y al rango de los datos. Puede cambiar este comportamiento estableciendo explícitamente los límites. El eje Y mostrado entonces variará al menos desde el límite inferior al límite superior. El ajuste de escala automático permitirá que esos límites se amplíen a menos que se establezca la opción rígida. allow-shrink altera el comportamiento de rígido al permitir la reducción automática de escala, el gráfico no sobrepasará los límites especificados por el usuario.
https://oss.oetiker.ch/rrdtool/doc/rrdgraph.en.html

Tableau tiene una función para permitir un rango de eje uniforme para todas las filas o columnas, y puede elegir hacerlo solo para el eje y, por ejemplo. Esto resuelve el problema de una manera ligeramente diferente, pero sigue siendo el mismo caso de uso en el que se desea que varios gráficos tengan el mismo rango / escala de eje.

Si bien gran parte de la discusión en torno a esto se ha centrado en implementar valores mínimos y máximos suaves separados para el escalado, creo que hay mucho valor en implementar una función de "rango mínimo del eje y" como parte de esto, distinta de la " "min / max, como sugería el póster original. Los mínimos y máximos suaves se utilizarían para especificar posiciones fijas en el eje y que siempre deben estar visibles durante el autoescalado. Esto se puede usar cuando tiene un rango conocido de valores del eje y que siempre desea tener visibles, lo cual es útil para evitar que pequeñas variaciones aparezcan como picos y valles exagerados debido al efecto de zoom del autoescalado. Sin embargo, esto solo funciona si sabe cuáles serán esos valores del eje y en el momento del diseño, lo que no siempre es el caso, especialmente para las personas que crean plantillas para que las usen usuarios finales que pueden tener diferentes patrones de hardware y carga.

Una opción de rango mínimo del eje y para el escalado automático eliminaría este requisito. Cuando se usa en un conjunto de valores donde el rango de los datos (es decir, abs(max(Y)-min(Y)) ) no excede el rango mínimo configurado del eje y, los valores mínimo y máximo en el eje y se establecerían de manera que los datos está centrado verticalmente. Esto evita el problema de exagerar las pequeñas variaciones, sin que el diseñador gráfico necesite conocer los valores exactos del eje y antes de tiempo.

Bit rápido de pseudocódigo para demostrar el cálculo:

minRange = 25
dataRange = abs(max(Y)-min(Y))
if dataRange < minRange:
    yAxisExtension = (minRange - dataRange) / 2
    yAxisMin = min(Y) - yAxisExtension
    yAxisMax = max(Y) + yAxisExtension

Este enfoque no eliminará los valores atípicos de la escala, como lo haría centrarse en la media.

Como ejemplo de caso de uso, imagine que está diseñando un panel para monitorear datos de NUT / upsd y está armando el gráfico de uso de energía. Si bien mi UPS puede promediar 400W, el de otra persona puede promediar 100W o 1000W, dependiendo de cómo se vea su configuración de hardware. No es posible saber esto de antemano. Sin embargo, la cantidad de energía consumida suele ser bastante constante en una escala de tiempo corta, lo que significa que es propensa a la exageración del eje y cuando se realiza el ajuste de escala automático. Este es un caso de uso perfecto para un rango mínimo del eje y, donde puede hacer suposiciones razonables sobre la escala de la varianza durante un período de tiempo determinado, pero no la magnitud del valor absoluto.

Si un sensor tiene una resolución limitada, todo lo que ve es el ruido de cuantificación cuando la cantidad varía muy poco en el intervalo de tiempo seleccionado. Me gustaría ver un intervalo y mínimo, por ejemplo, para no amplificar demasiado este ruido de cuantificación en el gráfico.
En el caso de un intervalo de valor de y pequeño en los ejes y izquierdo y derecho, sería bueno 'empujar' el centro de un eje y hacia la mitad superior y el centro del otro eje y hacia la parte inferior medio. Suprimirá las intersecciones de valores Y izquierda / derecha innecesarias. Por supuesto, si ambos ejes Y muestran la misma cantidad, los ejes no deben moverse así, pero ya existe la opción 'sincronizar ejes y'.

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