Ce référentiel a été archivé au profit des plugins intégrés disponibles dans les versions Grafana 9+ : status-history et state-timeline. Ces plugins sont utilisés par la communauté en remplacement de flant-statusmap, voir le numéro 302 pour plus d'informations. Si vous pensez que ce plugin répond à vos besoins et que vous souhaitez continuer à le développer, n'hésitez pas à créer un fork. Nous serions ravis de vous voir aller plus loin !
Panneau pour afficher les statuts discrets de plusieurs cibles au fil du temps.
Exécutez
docker compose up
et ouvrez http://localhost:3000 dans le navigateur pour voir une démo simple.
Nous avions désespérément besoin de visualiser un ensemble de statuts de séries temporelles sur une période donnée, afin de pouvoir voir un historique des modifications du statut des objets. Étant donné que nous maintenons de nombreux clusters Kubernetes (et l'infrastructure associée), nos principaux cas sont la visualisation de l'état de santé des serveurs et des pods Kubernetes ainsi que les vérifications de l'état des services HTTP. Nous avons essayé une variété de plugins Grafana disponibles (ils sont répertoriés dans les remerciements ci-dessous), mais aucun d'entre eux n'a pu fournir les fonctionnalités et la visualisation vraiment proches de ce que nous recherchions.
NB : Vous pouvez trouver plus de détails sur notre parcours de création du plugin dans cet article.
Les objets visualisés avec ce plugin peuvent être différents : pas seulement des composants informatiques (par exemple des hôtes de serveur et des modules Kubernetes), mais tout ce que vous pouvez imaginer, comme des cafetières sur l'image ci-dessus. Ces objets doivent avoir des statuts discrets qui sont des ensembles de valeurs prédéfinies, par exemple ok
= 0, off
= 1, fail
= 2, etc.
Pour créer des graphiques soignés, votre source de données doit renvoyer de bonnes données. Le plugin ajuste la variable $__interval
en fonction de la largeur du seau dans les options du panneau. Vos requêtes doivent regrouper les statuts sur $__interval
.
Pour que le mode valeurs multiples fonctionne comme prévu, vous devez définir plusieurs requêtes : une requête pour chaque statut possible.
Le plugin ne regroupe pas les données à temps pour le moment, il restitue uniquement les données d'entrée sous forme de compartiments. En raison de cela, les données doivent contenir des points pour chaque horodatage dans la plage de temps et des horodatages égaux pour chaque cible possible (étiquette de l'axe Y). Cette limitation est résolue par le numéro 53.
Pour travailler avec les données de Prometheus, vous devrez configurer des statuts discrets pour vos objets. Les conditions requises pour stocker ces statuts dans les métriques sont les suivantes :
0
et 1
;Lorsque c'est fait, vous pouvez collecter toutes les données via une requête, par exemple :
(max_over_time(coffee_maker_status{status=""}[$__interval]) == 1) *
S'il n'y avait pas un tel statut (
) pendant l'intervalle de la requête, Prometheus ne renverrait rien. Sinon, la valeur du statut sera renvoyée.
Par exemple, si vous disposez de 5 types de statuts et d'une métrique ( coffee_maker_status
) avec 5 valeurs autorisées ( 0
, 1
, 2
, 3
, 4
), vous devez transformer cette métrique en utilisant la règle suivante :
- record: coffee_maker_status:discrete
expr: |
count_values("status", coffee_maker_status)
C'est ainsi que la métrique coffee_maker_status
avec la valeur 3
sera transformée en une nouvelle métrique :
coffee_maker_status:discrete{status="3"} 1
Désormais, lorsque Prometheus a des valeurs 0
et 1
pour chaque statut, toutes ces métriques peuvent être regroupées, vous obtiendrez ainsi tous les statuts disponibles de vos objets au fil du temps.
Choisissez « Série temporelle » pour « Formater en tant que » et utilisez GROUP BY ($__interval)
dans la requête. $tag_
peut être utilisé dans 'Alias by' pour définir les étiquettes de l'axe y.
Un exemple de requête avec agrégation sur $__interval
ressemble à ceci (vous avez besoin d'une requête pour chaque valeur de statut possible) :
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 colonne metric
est utilisée comme étiquette de l'axe Y.
Tout d'abord, une requête individuelle pour chaque valeur de statut possible doit être créée. Chaque requête doit également avoir une légende similaire pour le regroupement :
Ensuite, le mappage des couleurs pour les valeurs d'état doit être défini en mode couleur discrète :
L'utilisation peut utiliser des préréglages pour définir les couleurs d'un feu de circulation ou 8 couleurs de la palette solarisée :
Remarque : les modes de couleur Spectre et Opacité fonctionnent de la même manière que dans le plugin Heatmap.
La case à cocher Valeurs multiples spécifie comment elles doivent être affichées :
Les valeurs nulles d'affichage peuvent être traitées comme des compartiments vides ou affichées avec la couleur de la valeur 0
.
La largeur et l'espacement minimum sont utilisés pour spécifier la largeur minimale du godet et l'espacement entre les godets. L'arrondi peut être utilisé pour arrondir les bords.
Index des valeurs défini sur un nombre positif pour afficher uniquement les valeurs de la série temporelle spécifiée.
La case à cocher Afficher la légende fait basculer la légende en bas du panneau.
Le tri par lignes peut être utilisé pour trier les étiquettes sur l'axe Y. Métriques : triez les étiquettes telles qu'elles sont définies dans l'onglet Métriques. a → z et z → a trient les étiquettes par ordre décroissant ou ascendant.
Activer la pagination active les contrôles de pagination sur le graphique.
Lignes par page : nombre de lignes à afficher sur le graphique.
Afficher l'info-bulle fait basculer l'affichage de l'info-bulle lorsque la souris survole les compartiments.
Geler au clic fait basculer l'info-bulle "gelée" au clic. L'info-bulle gelée peut être utilisée pour comparer des données avec une info-bulle flottante ou pour suivre des URL.
Afficher les éléments active/désactive l'affichage des éléments supplémentaires dans l'info-bulle.
Items est une liste de définitions pour afficher les URL dans une info-bulle.
Chaque URL possède un modèle, une icône, une étiquette et des options de formatage : format minuscule et date pour les variables.
Dans certains cas, le panneau d'état est utilisé pour passer d'un tableau de bord à un autre plus spécifique, par exemple lors de l'exécution d'une analyse racine/cause. Dans de tels cas, l'utilisateur peut vouloir réduire la portée de la période, tout en gardant l'événement souhaité centré (pour pouvoir analyser les tranches de temps précédentes/postérieures). Ces valeurs sont introduites via __bucket_from
et __bucket_to
.
__bucket_from
: C'est la valeur de bucket.from
moins le bucket en pourcentage. __bucket_to
: C'est la valeur de bucket.to
plus le bucket en pourcentage.
La première version publique de ce plugin a été entièrement réalisée par les ingénieurs de Flant. L'idée est venue de Dmitry Stolyarov (@distol), la version initiale a été écrite par Sergey Gnuskov (@gsmetal) et les modifications finales ont été apportées par Ivan Mikheykin (@diafour).
Ce plugin est basé sur le panneau "Heatmap" de Grafana et inspiré en partie par les idées de Carpet plot, Discrete panel, Status Panel, Status Dot, Status By Group.