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.
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
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