簡體   English   中英

我如何在 Prometheus 中加入兩個指標,其中一個指標的 label 是另一個包含逗號分隔值的指標 label 的一部分?

[英]How can I join two metrics in Prometheus where the label of a metric is part of the other metric label containing comma-separated values?

在挖掘文檔和 web 之后,也許您可以在這個主題上幫助我。

我在 Grafana 中使用 Prometheus 作為數據源。

我們有第一個指標,稱為 module_status。 我正在使用特定的模塊名稱對其進行過濾:

module_status{module_name="MODULE1"}

原始的即時結果是:

module_status{dependencies="SERVICE_1,SERVICE_4,SERVICE_5", module_name="MODULE1"} 4

(4 是狀態的實際值 = OK)

我們有第二個指標,稱為 service_status。 該指標的原始即時結果將是:

service_status{service_name="SERVICE_1"} 4
service_status{service_name="SERVICE_2"} 4
service_status{service_name="SERVICE_3"} 4
service_status{service_name="SERVICE_4"} 4
service_status{service_name="SERVICE_5"} 4

我們只需要顯示service_status,其中service_name包含在module_status的label依賴中。

非常感謝您的幫助 !

我已經嘗試過:我創建了一個變量module_name ,其中包含基於此查詢的 module_name: label_values(module_status, module_name)

然后,我創建了另一個變量module_services ,其中包含基於此查詢的模塊列表: label_values(module_status{module_name="$module_name"}, dependencies)

它工作正常,因為它返回一行 CSV 值,例如SERVICE_1,SERVICE_4,SERVICE_5

但是,我無法為變量中的每個值創建一行...

有一種簡單的方法可以做到這一點。 在 PromQL 中,您可以使用帶有 theon 和 group_left 運算符的連接。 在您的情況下,解決方案是:

service_status * on(service_name) group_left(dependencies) module_status{module_name="MODULE1"}

在 Prometheus 中,無法直接連接兩個指標,其中一個指標的 label 是另一個包含逗號分隔值的指標 label 的一部分。

最好的解決方案是在將數據發送到 Prometheus 之前預處理您的數據,將以逗號分隔的值分隔成不同的標簽。

這將使您更容易使用基本比較運算符對您感興趣的數據執行查詢 select 。

實現此目的的一種方法是使用腳本讀取原始數據,使用正則表達式對其進行處理以將逗號分隔值分隔為不同的標簽,然后將處理后的數據發送到 Prometheus。

您可以使用 Prometheus 重新標記規則或 Grafana 模板來執行預處理並將逗號分隔值拆分為不同的標簽,然后您將能夠使用標簽加入指標。

需要注意的是,這個方案需要額外的處理邏輯來預處理你的數據,然后再發送給 Prometheus,這可能會導致額外的資源使用,所以根據你的需求和環境評估這個方案的優缺點很重要.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM