2017-06-03 143 views
0

設置

Prometheus節點導出器被註冊爲帶有各種標籤的consul代理的服務。提供給領事劑實施例的服務定義:在Prometheus中重新標記

{ 
    "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的內部標準外還有以下標籤: a=1_meowb=2_woof,c=3_moo並忽略monkey,因爲它只是一個字符串。如果有需要=的解決方案,我可以從我的標籤列表中刪除monkey。上面所寫的relabel配置並沒有導致暴露任何標籤,似乎被忽略。運行日誌級別設置爲調試的Prometheus也不會產生任何結果。

相關的文檔

回答

0

不正確的認識

我覺得在我的普羅米修斯標籤是如何工作的理解是錯誤的。我不正確的理解是:

  1. 應用regex之前,字符串將是第一個分裂的separator(否則?作用是什麼?),
  2. 每個子已經regex評估反對,
  3. 如果匹配組被聲明並找到,它們將作爲索引值在target_labelreplacement字段中使用。
  4. 如果regex不匹配,那麼該子串將被忽略。
  5. 由於regex預計會在分割後應用於每個子字符串,因此會導致來自多個子字符串的多個標籤。

正確認識

然而,從brian-brazil的帖子他answer和普羅米修斯的文檔鏈接,似乎以下情況發生:

  1. 所有__meta標籤被合併成一個長separator分離線。
  2. regex只在該行上應用一次。
  3. 如果regex匹配且包含組,則它們從1開始索引,並可用於target_labelreplacement
  4. separator即使您提到它,在本節中似乎也會被忽略。

從修正後的認識

從這個想法,並在問題的例子如下配置,我可以做如下配置,工程

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中寫道的方法,以及我上面使用的方法)有警告 - 我們或者需要事先知道我們想要的所有標籤,或者有​​一組數字他們中的一員。這意味着,如果開發人員想要將不同的或更多的標籤與他/她的服務相關聯,則他/她需要與ops一起工作,因爲一般流程將無法處理它。我認爲這是一個小問題,應該加以解決。

0

https://www.robustperception.io/extracting-full-labels-from-consul-tags/展示瞭如何做到這一點,尤其是在過去的例子。

+0

該鏈接已包含在我原始問題的相關文檔中。它沒有得到我所希望的。 – motomonger

+0

鏈接完全覆蓋你想要做的事情,你需要以書面形式使用它 - 而不是你發佈的修改版本。 –

+0

是的...我現在看到爲什麼需要做。我已經包括了我的理解以及我在回答中所做的工作。如果我在我的答案的某處出錯,請糾正我。 – motomonger