Grafana: Fonctionnalité : traiter null comme zéro pour les seuils de coloration

Créé le 24 juil. 2015  ·  24Commentaires  ·  Source: grafana/grafana

Pour les panneaux Singlestat en particulier, il serait utile de traiter null comme zéro, sinon il n'y a aucun moyen de colorer un panneau avec un résultat nul.

Commentaire le plus utile

Il est possible de retourner 0 pour null dans Prometheus avec l'opérateur OR : exression OR on() vector(0) renverra 0 si l'expression métrique ne retourne rien. @pdf @torkelo

Tous les 24 commentaires

La fonction transformNull fonctionne très bien si vous utilisez Graphite

Il n'y a aucun mécanisme de remplissage que je peux voir en ce moment pour mon backend.

lequel est?

Prométhée

Prometheus a-t-il des fonctions / fonctionnalités de transformation ? Je ne l'ai pas encore essayé (vraiment impatient de le faire, pourrait ajouter Prometheus comme plug-in officiel de source de données)

Une sélection assez décente : http://prometheus.io/docs/querying/functions/

Dans grafana 2.1, il semble que les valeurs 'null' soient traitées comme des valeurs 0, en ce qui concerne la coloration (même si null est mappé sur un texte comme dans #1166).

Pour rendre les choses un peu plus difficiles : si plus bas est meilleur, vous pouvez toutefois définir des seuils pour vert/orange/rouge sur 0/1/3, c'est-à-dire que la valeur >3 est lue (mais peut-être que null devrait également être rouge). Ainsi, une valeur nulle devient verte, mais vous pouvez affirmer qu'elle devrait être rouge.

Lorsque vous abordez ce problème, il vaut la peine de le considérer avec le #1319. Par exemple, ils pourraient être traités simultanément en implémentant des plages pour les mappages de texte et en spécifiant des codages de couleur pour de tels textes (les couleurs des valeurs sont alors spécifiées indirectement, ce qui est plus flexible mais sans doute plus lourd).

@torkelo Je suis d'accord avec @feliksik et j'irais jusqu'à appeler cela un bogue : lorsqu'un de mes nœuds surveillés se déconnecte, l'interrogation de sa moyenne de charge renvoie null. Étant donné que le panneau singlestat remplace null par zéro, le panneau affiche "N/A" en vert, alors qu'il devrait vraiment être rouge ou incolore (de préférence en fonction d'une option de configuration).


Edit : il s'avère que cette fonctionnalité existait avant (#1130), mais a été supprimée dans cc21c66b3a128ea680be2e491cb89f8da90b2677. Je suppose que nous pouvons déplacer la discussion au #1130.

+1 Je suis d'accord avec @n-st et @feliksik : actuellement, notre tableau de bord affiche "rouge" pour N/A alors qu'en fait N/A signifie aucune donnée / aucune activité, donc devrait idéalement être non coloré.

Il est possible de retourner 0 pour null dans Prometheus avec l'opérateur OR : exression OR on() vector(0) renverra 0 si l'expression métrique ne retourne rien. @pdf @torkelo

fermer ceci car la plupart des backends TSDB ont des moyens de gérer les valeurs NULL dans la requête

@grobie

il est vrai que l'opérateur OR corrige cela si l'expression était nulle. Cependant, dans une seule page de statistiques, cela corrige la couleur des valeurs nulles, mais la casse pour les métriques non nulles, car elles seront signalées comme ayant plusieurs valeurs : la valeur réelle et le {} ajouté par votre expression prometheus.

Puis-je suggérer de rouvrir ce problème ?

@boeboe J'ai mis à jour mon expression à partir du commentaire ci-dessus. Celui-ci devrait fonctionner pour vous.

Explication : Prometheus utilise la correspondance d'étiquettes dans les expressions. Si votre expression renvoie quelque chose avec des étiquettes, cela ne correspondra pas à la série temporelle générée par vector(0) . Pour rendre cela possible, il est nécessaire de dire explicitement à Prometheus de ne pas essayer de faire correspondre les étiquettes en ajoutant on() .

@grobie merci pour ton explication. Malheureusement, la documentation Prometheus ne donne pas d'exemple clair sur l'utilisation de l'opérateur on() (https://prometheus.io/docs/querying/operators)

Voici ma requête actuelle :
counter_services_active_sessions_responses_4xx_total{kubernetes_namespace="dev-appservicebase"} OR vector(0)

Comment dois-je réécrire celui-ci afin d'éviter les doublons au cas où les métriques existeraient (dans ce cas, un microservice a renvoyé des réponses HTTP 4xx). À l'heure actuelle, la requête renvoie les 2 résultats suivants :

counter_services_active_sessions_responses_4xx_total{instance="172.24.27.130:8081",job="kubernetes-pods",kubernetes_namespace="dev-appservicebase",kubernetes_pod_name="active-sessions-dp-3210291495-nw9n7",kubernetes_node_node_name="active-sessions-dp-3210291495-nw9n7",kubernetes_node_node_name=" -24-24",pod_template_hash="3210291495",type="active-sessions-type"} 1173
{} 0

@grobie peu importe mon dernier commentaire, je dois vous voir mis à jour la requête. Merci!

Quelqu'un a-t-il une solution de contournement de requête pour MySQL ?

@TheFrogDaddy, vous pouvez utiliser un cas sélectionné lorsque et/ou en combinaison avec la fonction de fusion .

@TheFrogDaddy, vous pouvez utiliser un cas sélectionné lorsque et/ou en combinaison avec la fonction de fusion .

Bonjour, merci d'être revenu vers moi si rapidement. Je n'arrive pas à faire fonctionner ça, est-ce que j'ai raté quelque chose ?

J'ai essayé ça :

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;

Et ça

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;

Merci

@TheFrogDaddy qu'essayez -vous de résumer avec sum(1) ? Cela n'a aucun sens pour moi. Je suggérerais que nous continuions les discussions sur notre site communautaire et plus précisément sur le tag mysql . Veuillez ouvrir un nouveau sujet là-bas et vous pouvez me pinger par @ + mefraimsson

Il est possible de retourner 0 pour null dans Prometheus avec l'opérateur OR : exression OR on() vector(0) renverra 0 si l'expression métrique ne retourne rien. @pdf @torkelo

N'oubliez pas d'activer l'option instantanée !!

C'est bien

Il est possible de retourner 0 pour null dans Prometheus avec l'opérateur OR : exression OR on() vector(0) renverra 0 si l'expression métrique ne retourne rien. @pdf @torkelo

bon. frère

Il est possible de retourner 0 pour null dans Prometheus avec l'opérateur OR : exression OR on() vector(0) renverra 0 si l'expression métrique ne retourne rien. @pdf @torkelo

Cela ne fonctionne pas avec by (label) , alors que cela semble fonctionner :

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

Voici mes 2 centimes

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

Cela peut me donner la différence de l'expression 2 dans l'intervalle ciblé. Si la série temporelle n'est pas présente, le calcul est effectué en considérant que la valeur est 0

Cette page vous a été utile?
0 / 5 - 0 notes