web-dev-qa-db-fra.com

Prometheus: regroupement des métriques par noms de métriques

Existe-t-il un moyen de regrouper toutes les métriques d'une application par noms de métriques? Une partie d'une requête répertoriant toutes les métriques d'une application (c'est-à-dire {app="bar"}):

ch_qos_logback_core_Appender_all_total{affiliation="foo",app="bar", instance="baz-3-dasp",job="kubernetes-service-endpoints",kubernetes_name="bar",kubernetes_namespace="foobarz",kubernetes_node="mypaas-dev-node3.fud.com",updatedBy="janedoe"}   44
ch_qos_logback_core_Appender_debug_total{affiliation="foo",app="bar", instance="baz-3-dasp",job="kubernetes-service-endpoints",kubernetes_name="bar",kubernetes_namespace="foobarz",kubernetes_node="mypaas-dev-node23.fud.com",updatedBy="deppba"} 32

J'ai également essayé d'utiliser un caractère générique dans le nom de la métrique, Prometheus se plaint de cela. En regardant les métriques, je peux voir que certains d'entre eux ont des noms dynamiques, probablement fournis par des métriques dropwizard. Ce que je veux en définitive, c’est une liste de toutes les mesures disponibles.

5
naimdjon

J'ai eu un indice d'une réponse de @ brian-brazil et je suis arrivé à une solution. La requête suivante répertorie toutes les métriques disponibles:

sum by(__name__)({app="bar"})

bar est le nom de l'application, comme vous pouvez le voir dans les entrées du journal postées dans la question.

6
naimdjon

{__name__=~".+"} renverra toutes les séries chronologiques non périmées, mais la requête est coûteuse et doit généralement être évitée.

3
brian-brazil

En utilisant directement 

{__name__=~".+"}

retournera success mais rien d’autre (trop grand). 

ou 

{__name__=~".*"}

tandis que va nous donner error à la place comme prévu:

parse error at char 17: vector selector must contain at least one non-empty matcher

Mon astuce consiste donc à combiner les solutions de brian-brazil et de naimdjon à l'aide d'éléments tels que

sum({__name__=~"c.*|e.*|n.*|p.*|r.*|k.*|z.*|r.*"}) by (__name__)
  1. comme je connais la possibilité prefixes, je les ajoute donc à query pour être sûr de ne pas renvoyer quelque chose; et plus loin, 

  2. pour éviter les champs inutiles retournés (soulignant le Prométhée), je demanderai seulement à __name__ de cette manière by(__name__), tous les noms des métriques dont j'ai besoin sont renvoyés comme prévu. 

En fait, il existe une API pour obtenir tous les noms de métriques disponibles sous la forme:

/api/v1/label/__name__/values
1
Hearen