web-dev-qa-db-fra.com

Relancer l'instance en nom d'hôte dans Prometheus

J'ai des mesures de grattage Prometheus des exportateurs de nœuds sur plusieurs machines avec une configuration comme celle-ci:

scrape_configs:
  - job_name: node_exporter
    static_configs:
      - targets:
        - 1.2.3.4:9100
        - 2.3.4.5:9100
        - 3.4.5.6:9100

Lorsqu'elles sont affichées dans Grafana, ces instances se voient attribuer des adresses IP plutôt dénuées de sens; au lieu de cela, je préférerais voir leurs noms d'hôtes. Je pense que vous devriez pouvoir réétiqueter l'étiquette instance pour qu'elle corresponde au nom d'hôte d'un nœud, j'ai donc essayé d'utiliser des règles de réétiquetage comme celle-ci, sans aucun effet:

relabel_configs:
  - source_labels: ['nodename']
    target_label: 'instance'

Je peux renommer manuellement chaque cible, mais cela nécessite de coder en dur chaque nom d'hôte dans Prometheus, ce qui n'est pas vraiment sympa. Je vois que l'exportateur de nœuds fournit la métrique node_uname_info qui contient le nom d'hôte, mais comment puis-je l'extraire de là?

node_uname_info{domainname="(none)",machine="x86_64",nodename="myhostname",release="4.13.0-32-generic",sysname="Linux",version="..."} 1
7
Norrius

Je viens de rencontrer ce problème et la solution est d'utiliser un group_left pour résoudre ce problème. Vous ne pouvez pas réétiqueter avec une valeur inexistante dans la demande, vous êtes limité aux différents paramètres que vous avez donnés à prometheus ou à ceux qui existent dans le module utilisé pour la demande (gcp, aws ...).

Ainsi, la solution que j'ai utilisée est de combiner une valeur existante contenant ce que nous voulons (le hostnmame) avec une métrique de l'exportateur de noeud. Notre réponse existe à l'intérieur des métriques node_uname_info qui contiennent la valeur nodename.

J'ai utilisé la réponse à ce message comme modèle pour ma demande: https://stackoverflow.com/a/50357418 .

La solution est celle-ci:

node_memory_Active * on(instance) group_left(nodename) (node_uname_info)

Avec cela, les métriques node_memory_Active qui ne contiennent que l'instance et le travail par défaut comme troisième nom de nœud de valeur que vous pouvez utiliser dans le champ de description de grafana.

J'espère que cela aidera les autres.

6
night-gold

J'ai trouvé une solution de code dur:

 
 global: 
 scrape_interval: 5s 
 scrape_timeout: 5s 
 external_labels: 
 moniteur: 'Prometheus' 
 
 scrape_configs: 
 
 - nom_travail: 'shelby' 
 static_configs: 
 - cibles: 
 - 10.100.0.01:9100 
 relabel_configs: 
 - source_labels: [__address __] 
 regex: '. *' 
 target_label: instance 
 remplacement: 'shelby' 
 
 - nom_travail: 'camaro' 
 static_configs: 
 - cibles: 
 - 10.101.0.02:9100
 relabel_configs: 
 - source_labels: [__address __] 
 regex: '. *' 
 target_label: instance 
 remplacement: 'camaro' 
 
 - job_name: 'verona '
 static_configs: 
 - cibles: 
 - 10.101.0.03:9100
 relabel_configs: 
 - source_labels: [__address__ ] 
 expression régulière: '. *' 
 target_label: instance 
 remplacement: 'verona' 
 

Résultat:

 
 node_load15 {instance = "camaro", job = "camaro"} 0,16 
 node_load15 {instance = "shelby", job = "shelby"} 0,4 
 node_load15 {instance = "verona", job = "verona"} 0,07 
 
4
vitams

Une autre réponse consiste à utiliser des/etc/hosts ou des dns locaux (peut-être dnsmasq) ou quelque chose comme Service Discovery (par Consul ou file_sd), puis à supprimer des ports comme celui-ci:

relabel_configs:
  - source_labels: ['__address__']
    separator:     ':'
    regex:         '(.*):.*'
    target_label:  'instance'
    replacement:   '${1}'
1
Salehi