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
私はこの問題に遭遇しました。解決策は、この問題を解決するために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の説明フィールドで使用できます。
これが他の人を助けることを願っています。
私はハードコードの解決策を見つけました:
グローバル: 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
別の答えは、いくつかの/ etc/hostsまたはローカルDNS(多分dnsmasq)またはService Discovery(Consulまたはfile_sd)のようなsthを使用して、次のようにポートを削除することです。
relabel_configs:
- source_labels: ['__address__']
separator: ':'
regex: '(.*):.*'
target_label: 'instance'
replacement: '${1}'