Monitoring

Promethius、group_left 和“on”與“ignoring”

  • September 5, 2020

Issue #2204中,Prometheus 開發人員之一說:

…原則上,您應該傾向於ignoring生成on通用的可共享規則…

我很困惑如何使用ignoring會導致更通用的規則。例如,考慮一種情況,我們有一個設備的“資訊”指標和幾個統計資訊,如下所示:

device_info{id="1", owner="coyote", project="acme"}
device_rx_bytes{id="1"}
device_tx_bytes{id="1"}
device_rx_errors{id="1"}
device_tx_errors{id="1"}

如果我想按項目獲得接收率,我需要將device_rx_bytes指標與相應的device_info指標相關聯。對我來說,這聞起來像一個 SQL 連接,我會寫:

rate(device_rx_bytes[5m]) * on(id) group_left(project) device_info

這似乎是“通用的”,因為它只對用於分組id的標籤 ( ) 和我們想要傳播到結果的標籤( ) 做出假設project。如果我正確理解了ignoring運算符,則相應的表達式會更複雜,因為我需要從右側列出左側不存在的所有標籤。就像是:

rate(device_rx_bytes[5m]) * ignoring(owner, project) group_left(project) device_info

那是對的嗎?如果是,為什麼ignoring優先於on(不僅在上面的引用中,而且在各種文件和範例中)?

我認為該評論中的關鍵字是shareable或換句話說可重用規則。這意味著您(通常)在使用時保留更多標籤,結果ignoringon(通常)成為一個規則,其中更多的原始標籤保持不變,因此可以在更多場景中重複使用。

想像一下這些時間序列:

instance_cpu_time_ns{app="lion", proc="web", rev="34d0f99", env="prod", job="cluster-manager"}
instance_cpu_time_ns{app="elephant", proc="worker", rev="34d0f99", env="prod", job="cluster-manager"}
instance_cpu_time_ns{app="turtle", proc="api", rev="4d3a513", env="prod", job="cluster-manager"}
instance_cpu_time_ns{app="fox", proc="widget", rev="4d3a513", env="prod", job="cluster-manager"}
...

ignoring(rev)與具有 的相同查詢相比,具有 的查詢在結果中省略了所有其他標籤on(app)

但是,如果您將它們與互斥的標籤集一起使用,則onand的結果將是相同的,就像您提到的範例一樣。ignoring

引用自:https://serverfault.com/questions/1005690