web-dev-qa-db-ja.com

Prometheusでインスタンスをホスト名に再ラベル付け

Prometheusは、次のような構成を持つ複数のマシンでノードエクスポーターからメトリックをスクレイピングします。

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

Grafanaで表示すると、これらのインスタンスにはかなり意味のないIPアドレスが割り当てられています。代わりに、私は彼らのホスト名を見たいと思います。ノードのホスト名に一致するようにinstanceラベルを再ラベル付けできるはずだと思うので、次のような再ラベル付けルールを使用してみましたが、効果はありません。

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

すべてのターゲットに手動でラベルを付け直すこともできますが、そのためにはすべてのホスト名をPrometheusにハードコーディングする必要がありますが、これは本当にいいことではありません。ノードエクスポーターがメトリックnode_uname_infoホスト名が含まれていますが、そこからホスト名を抽出するにはどうすればよいですか?

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

私はこの問題に遭遇しました。解決策は、この問題を解決するためにgroup_leftを使用することです。リクエストに存在しない値でラベルを付け直すことはできません。プロメテウスに指定したさまざまなパラメーター、またはリクエストで使用するモジュールに存在するパラメーター(gcp、aws ...)に制限されます。

したがって、私が使用したソリューションは、必要なもの(hostnmame)を含む既存の値をノードエクスポーターからのメトリックと結合することです。私たちの答えは、nodename値を含むnode_uname_infoメトリック内に存在します。

私はこの投稿への回答を私のリクエストのモデルとして使用しました https://stackoverflow.com/a/50357418

解決策はこれです:

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

これにより、node_memory_Activeメトリックには、デフォルトで3番目の値nodenameとしてインスタンスとジョブのみが含まれ、grafanaの説明フィールドで使用できます。

これが他の人を助けることを願っています。

6
night-gold

私はハードコードの解決策を見つけました:

 
グローバル:
 scrape_interval:5s 
 scrape_timeout:5s 
 external_labels:
 monitor: 'Prometheus' 
 
 scrape_configs:
 
-ジョブ名: 'shelby' 
 static_configs:
-ターゲット:
-10.100.0.01:9100 
 relabel_configs:
-source_labels:[__address __] 
 regex: '。*' 
 target_label:instance 
 replacement: 'shelby' 
 
-ジョブ名: 'camaro' 
 static_configs:
-ターゲット:
-10.101.0.02:9100
 relabel_configs:
 -source_labels:[__address __] 
 regex: '。*' 
 target_label:instance 
 replacement: 'camaro' 
 
-job_name: 'verona '
 static_configs:
-ターゲット:
-10.101.0.03:9100
 relabel_configs:
-source_labels:[__address__ ] 
正規表現: '。*' 
 target_label:instance 
 replacement: 'verona' 
 

結果:

 
 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

別の答えは、いくつかの/ etc/hostsまたはローカルDNS(多分dnsmasq)またはService Discovery(Consulまたはfile_sd)のようなsthを使用して、次のようにポートを削除することです。

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