Este repositorio se ha archivado en favor de los complementos integrados disponibles en las versiones Grafana 9+: status-history y state-timeline. La comunidad utiliza estos complementos como reemplazos de flant-statusmap; consulte el número 302 para obtener más información. Si cree que este complemento satisface sus necesidades y le gustaría continuar desarrollándolo, no dude en crear un fork. ¡Nos encantaría verte llegar más lejos!
Panel para mostrar estados discretos de múltiples objetivos a lo largo del tiempo.
Ejecute
docker compose up
y abra http://localhost:3000 en el navegador para ver una demostración sencilla.
Teníamos una necesidad desesperada de visualizar un conjunto de estados de series temporales a lo largo de un período de tiempo, para poder ver un historial de cambios en el estado de los objetos. Dado que mantenemos muchos clústeres de Kubernetes (e infraestructura relacionada), nuestros casos principales son la visualización de los estados de salud de los servidores y pods de Kubernetes, así como las comprobaciones de estado de los servicios HTTP. Hemos probado una variedad de complementos de Grafana disponibles (se enumeran en Agradecimientos a continuación), pero ninguno de ellos pudo proporcionar las funciones y la visualización realmente cercanas a lo que estábamos buscando.
NB: Puede encontrar más detalles sobre nuestro proceso de creación del complemento en esta publicación.
Los objetos que se visualizan con este complemento pueden ser diferentes: no solo componentes de TI (por ejemplo, hosts de servidores y pods de Kubernetes), sino cualquier cosa que puedas imaginar, como las cafeteras en la imagen de arriba. Estos objetos deben tener estados discretos que sean conjuntos de valores predefinidos, por ejemplo, ok
= 0, off
= 1, fail
= 2, etc.
Para crear gráficos claros, su fuente de datos debe devolver buenos datos. El complemento ajusta la variable $__interval
según el ancho del cubo en las opciones del panel. Sus consultas deben agregar estados sobre $__interval
.
Para que el modo de valores múltiples funcione como se espera, debe definir múltiples consultas: una consulta para cada estado posible.
El complemento no agrega datos a tiempo por ahora, solo representa los datos de entrada como depósitos. Debido a esto, los datos deben contener puntos para cada marca de tiempo en el rango de tiempo y marcas de tiempo iguales para cada objetivo posible (etiqueta del eje y). Esta limitación se aborda en el número 53.
Para trabajar con datos de Prometheus, necesitará configurar estados discretos para sus objetos. Los requisitos para almacenar estos estados en métricas son los siguientes:
0
y 1
;Cuando esté hecho, puede recopilar todos los datos mediante una consulta, por ejemplo:
(max_over_time(coffee_maker_status{status=""}[$__interval]) == 1) *
Si no existiera tal estado (
) durante el intervalo de la consulta, Prometheus no devolvería nada. De lo contrario, se devolverá el valor del estado.
Por ejemplo, si tiene 5 tipos de estados y una métrica ( coffee_maker_status
) con 5 valores permitidos ( 0
, 1
, 2
, 3
, 4
), debe transformar esta métrica usando la siguiente regla:
- record: coffee_maker_status:discrete
expr: |
count_values("status", coffee_maker_status)
Así es como la métrica coffee_maker_status
con valor 3
se transformará en una nueva métrica:
coffee_maker_status:discrete{status="3"} 1
Ahora, cuando Prometheus tiene valores 0
y 1
para cada estado, todas estas métricas se pueden agregar, por lo que obtendrá todos los estados disponibles de sus objetos con el tiempo.
Elija 'Serie temporal' para 'Formatear como' y use GROUP BY ($__interval)
en la consulta. $tag_
se puede utilizar en 'Alias por' para definir etiquetas del eje y.
La consulta de ejemplo con agregación sobre $__interval
es así (necesita una consulta para cada valor de estado posible):
SELECT
$__timeGroupAlias(date_insert,$__interval),
name AS metric,
min(statusi) AS "statusi"
FROM coffee_makers
WHERE
$__timeFilter(date_insert) AND statusi=1
GROUP BY 1,2
ORDER BY $__timeGroup(date_insert,$__interval)
La columna metric
se utiliza como etiqueta del eje y.
En primer lugar, se debe crear una consulta individual para cada valor de estado posible. Cada consulta también debe tener una leyenda similar para agrupar:
Luego, la asignación de colores para los valores de estado debe definirse en modo de color discreto :
Puede utilizar ajustes preestablecidos para definir los colores de un semáforo u 8 colores de la paleta solarizada:
Nota: Los modos de color Espectro y Opacidad funcionan de la misma manera que en el complemento Heatmap.
La casilla de verificación de valores múltiples especifica cómo deben mostrarse:
Los valores nulos mostrados pueden tratarse como depósitos vacíos o mostrarse con el color del valor 0
.
El ancho y el espaciado mínimos se utilizan para especificar el ancho mínimo del cucharón y el espaciado entre los cucharones. El redondeo se puede utilizar para redondear los bordes.
El índice de valores se establece en un número positivo para mostrar solo los valores de la serie temporal especificada.
La casilla Mostrar leyenda alterna la leyenda en la parte inferior del panel.
La ordenación de filas se puede utilizar para ordenar etiquetas en el eje Y. Métricas: ordene las etiquetas y tal como se definen en la pestaña Métricas. a→z y z→a clasifican las etiquetas de forma descendente o ascendente en orden natural.
Habilitar paginación alterna los controles de paginación en el gráfico.
Filas por página: una cantidad de filas para mostrar en el gráfico.
Mostrar información sobre herramientas alterna la visualización de información sobre herramientas al pasar el mouse sobre los depósitos.
Congelar al hacer clic alterna la información sobre herramientas "congelada" al hacer clic. La información sobre herramientas congelada se puede utilizar para comparar datos con información sobre herramientas flotante o para seguir URL.
Mostrar elementos alterna la visualización de elementos adicionales en la información sobre herramientas.
Elementos es una lista de definiciones para mostrar las URL en la información sobre herramientas.
Cada URL tiene una plantilla, icono, etiqueta y opciones de formato: minúsculas y formato de fecha para variables.
En algunos casos, el panel de estado se utiliza para pasar de un panel a otro más específico, por ejemplo, al realizar un análisis de raíz/causa. En tales casos, es posible que el usuario desee reducir el alcance del lapso de tiempo, mientras mantiene centrado el evento deseado (para poder analizar los períodos de tiempo anteriores/posteriores). Esos valores se introducen a través de __bucket_from
y __bucket_to
.
__bucket_from
: es el valor de bucket.from
menos el porcentaje del depósito. __bucket_to
: Es el valor de bucket.to
más el porcentaje del depósito.
La primera versión pública de este complemento ha sido realizada íntegramente por ingenieros de Flant. Toda la idea surgió de Dmitry Stolyarov (@distol), la versión inicial fue escrita por Sergey Gnuskov (@gsmetal) y los cambios finales fueron realizados por Ivan Mikheykin (@diafour).
Este complemento se basa en el panel "Mapa de calor" de Grafana y está inspirado en parte en ideas de Diagrama de alfombra, panel discreto, panel de estado, punto de estado y estado por grupo.