數據對比¶
原文: 数据对比
有的時候我們可能需要去訪問過去的數據,並和當前數據進行對比。例如,我們可能想比較今天的請求率和一周前的請求率之間的差異。我們可以在任何區間向量或瞬時向量選擇器上附加一個偏移量 offset<duration>
的修飾符(比如 my_metric offset 5m
或者 my_metric[1m] offset 7d
)。
讓我們來看一個示例,在我們的 demo 服務中暴露了一個 Counter
指標 demo_items_shipped_total
,該指標追踪物品的運輸情況,用 5 分鐘來模擬"每日"流量週期,所以我們不必等待一整天才能查看該時段的數據。
我們只使用第一個演示服務實例來測試即可,首先我們來看看它的速率:
該服務還暴露了一個 0 或 1 的布爾指標,告訴我們現在是否是假期:
將假期與發貨商品率進行比較,注意到節假日時它會減少!我們可以嘗試將當前的發貨速度與 7"天"(7 * 5 分鐘)前的速度進行比較,看看是否有什麼不正常的情況。
rate(demo_items_shipped_total{instance="demo-service-0:10000"}[1m])
/
rate(demo_items_shipped_total{instance="demo-service-0:10000"}[1m] offset 35m)
通常情況下,該比率約為 1,但若當天或前一天是假期時,我們得到的比率比正常情況下要略低或高。
但是,如果原因只是假期,我們想忽略這個較低或較高的比率。我們可以在過去或現在是假期的時候過濾掉這個比率,方法是附加一個 unless
集合操作符。
(
rate(demo_items_shipped_total{instance="demo-service-0:10000"}[1m])
/
rate(demo_items_shipped_total{instance="demo-service-0:10000"}[1m] offset 35m)
)
unless
(
demo_is_holiday == 1 # Is it currently a holiday?
or
demo_is_holiday offset 35m == 1 # Was it a holiday 7 "days" ago?
)
或者另外一種方法,我們只需要比較今天和一周前是否有相同的節日:
(
rate(demo_items_shipped_total{instance="demo-service-0:10000"}[1m])
/
rate(demo_items_shipped_total{instance="demo-service-0:10000"}[1m] offset 35m)
)
unless
(
demo_is_holiday
!=
demo_is_holiday offset 35m
)
這樣我們就可以過濾掉當前時間有假期或過去有假期的結果。