web-dev-qa-db-fra.com

Comment regrouper des étiquettes dans une requête Prometheus?

Si j'ai une métrique avec les étiquettes suivantes:

my_metric{group="group a"}  100
my_metric{group="group b"}  100
my_metric{group="group c"}  100
my_metric{group="misc group a"}  1
my_metric{group="misc group b"}  2
my_metric{group="misc group c"}  1
my_metric{group="misc group d"}  1

Est-il possible de faire une requête ou même un label_replace qui combine les groupes "divers"?

(Je me rends compte que la cardinalité métrique doit être améliorée, et j'ai mis à jour l'application pour y remédier. Cependant, cela m'a laissé cette question pour savoir si je voulais corriger les métriques via une requête plus tard)

12
checketts

Oui, vous pouvez utiliser le remplacement d'étiquette pour regrouper tous les divers:

sum by (new_group) (
  label_replace(
    label_replace(my_metric, "new_group", "$1", "group", ".+"),
    "new_group", "misc", "group", "misc group.+"
  )
)

Le label_replace interne copie toutes les valeurs du groupe dans new_group, le externe écrase celles qui correspondent à "misc group. +" Avec "misc", et nous additionnons ensuite par le label "new_group". La raison d'utiliser un nouveau label est que la série ne serait plus unique si nous remplaçions simplement le label "groupe", et la somme ne fonctionnerait pas.

19
tom.wilkie

Vous pouvez utiliser une requête regex:

my_metric{group=~"misc group.+"}

Cela vous donnera tout où group commence par "misc group".

5
Oliver