2017-06-03 12 views
0

セットアップ

プロメテウスの輸出者は、様々なタグを持つ領事代理人のサービスとして登録されています。領事エージェントに提供される例サービス定義は:プロメテウスでラベルを貼る

{ 
    "service":{ 
     "id": "server-stats", 
     "name": "server-stats", 
     "tags": [ 
     "a=1_meow", 
     "b=2_woof", 
     "c=3_moo", 
     "monkey" 
     ], 
     "port": 9100, 
     "checks": [ 
     { 
      "name": "Process #1", 
      "script": "/path/to/healthcheck/script.sh", 
      "interval": "5s" 
     } 
     ] 
    } 
} 

プロメテウスは、このserver-statsサービスを探して、サーバからの統計情報をこすり取る際には領事によって提供される構成(ホストアドレスとポート)を使用するように設定されています。上記のタグは、再ラベル付けに使用できる__meta_consul_tagsのコンマ区切りのリストとして利用できます。私たちはラベルに基づいて統計やグラフを得ることができるようにプロメテウスにタグを公開しようとしています

relabel_configs: 
- source_labels: [__meta_consul_tags] 
    separator:  ',' 
    #regex:   '(.+)=(.+)' 
    regex:   '([a-z_]+)=([a-z_]+|\d+)' 
    target_label: ${1} 
    replacement: ${2} 

問題

:設定をリラベル

プロメテウス。上記のサービス設定を念頭に置いて、Prometheusが内部で行うことに加えて、各メトリックに次のラベルを付けることをお勧めします。ただ文字列であるため、無視してmonkeyを無視してください。 =が必要な解決策があれば、私のタグリストからmonkeyを削除できます。上に書かれたrelabelの設定は、全くタグを公開しておらず、無視されているようです。ログレベルをdebugに設定してPrometheusを実行しても何も得られません。

関連ドキュメント

答えて

0

誤った理解

私はプロメテウスで標識がどのように動作するかの私の理解で間違いがあったと思います。マイ間違った理解があった。

  1. regexを適用する前に、文字列はseparator(?そうでなければ、何がその目的である)、
  2. の最初の分割になる各部分は、それに対して評価regex
  3. マッチグループ場合がありますが宣言されて見つかると、target_labelreplacementフィールドで使用できるインデックス値として利用可能になります。
  4. regexが一致しない場合、その部分文字列は無視されます。
  5. 分割後に各部分文字列にregexが適用されると予想されるため、複数の部分文字列から複数のラベルが作成されます。

正しい理解

はしかし、彼のanswerとプロメテウスのマニュアルにリンクされbrian-brazilのポストから、それは以下の出来事と思われる:

  1. すべて__metaのタグを1つの長いseparator分離ラインに統合されています。
  2. regexは、その行に1回だけ適用されます。
  3. regexが一致してグループを含む場合、それらは1からインデックスされ、target_labelおよびreplacementで使用できるようになります。
  4. separatorあなたがそれに言及しても、このセクションでは無視されているようです。修正この考え方から理解

    と問題の例から、次から

Configが、私は両方を信じる

relabel_configs: 
- source_labels: [__meta_consul_tags] 
    regex:   '.*,a=([a-z0-9_]+),.+' 
    target_label: 'a' 
    replacement: ${1} 

- source_labels: [__meta_consul_tags] 
    regex:   '.*,b=([a-z0-9_]+),.+' 
    target_label: 'b' 
    replacement: ${1} 

- source_labels: [__meta_consul_tags] 
    regex:   '.*,c=([a-z0-9_]+),.+' 
    target_label: 'c' 
    replacement: ${1} 

- source_labels: [__meta_consul_tags] 
    regex:   '.*,d=([a-z0-9_]+),.+' 
    target_label: 'd' 
    replacement: ${1} 

警告を働き、次の設定を行うことができましたアプローチ(ブライアンブラジルのアプローチはhis blogpostに書いてあり、私が上で使っていること)には警告があります。私たちは事前にすべてのラベルを知っている必要がありますか、彼らのr。つまり、開発者が異なるサービスやラベルをサービスに関連付ける場合、一般的なフローは処理できないため、opsで作業する必要があります。私はそれが対処されるべき軽微な注意点だと思う。

0

https://www.robustperception.io/extracting-full-labels-from-consul-tags/特に最後の例、これを実行する方法を示しています。

+0

このリンクは、元の質問の関連するドキュメントに既に含まれています。それは私が望んでいたものを得られなかった。 – motomonger

+0

リンクは、あなたがしたいことを正確にカバーしています。あなたが投稿した変更されたバージョンではなく、書面でそれを使用する必要があります。 –

+0

はい...私は今なぜそれを行う必要があるか分かります。私は自分の理解と私の答えに取り組んでいたことを含めました。私の答えのどこかが間違っているなら、私を修正してください。 – motomonger

関連する問題