理解轉置函式 t()
概述
轉置功能是博森功能更強大的功能之一,但它也需要付出努力才能理解。它功能強大,因為它讓我們在不同級別上發出警報,而不是基礎資料的標記結構。
轉置會更改警報的範圍。這可讓你範圍的事情到更大的集合。因此,例如,如果你的查詢返回 host,cluster
的範圍並且想要基於群集執行狀況而不是單個主機進行警報,則可以使用轉置來執行此操作。
什麼是範圍?
範圍是構成最終結果的標記鍵列表。例如:
- 如果範圍是
host
,則會在警報中獲得每個主機結果。 - 如果你的範圍是空的(沒有標記鍵),那麼你只能獲得一個警報。
- 如果你的範圍是
host,iface
,你可以獲得結果中每個主機上每個介面的警報。
因此,我們得到的警報與資料的標籤相關聯。轉置功能允許我們在公制標籤結構以外的不同範圍內發出警報。因此,我們可以查詢導致 host,cluster
但在 cluster
範圍內發出警報的事情。
打破功能
轉置函式的簽名是:
t(numberSet, group string) seriesSet
因此,它需要一個 numberSet ,一個範圍又稱為結果的組,並返回一個 seriesSet
這些東西是什麼?
Set,numberSets 和 seriesSets
bosun 中的許多函式的結果都是集合,通常是數字 Set 或 seriesSet 。結果中的整個集合共享相同的標記鍵。並且集合中的每個專案對於每個對應金鑰的值是唯一的。如果集合中每個專案的值是一個系列(timestamp:value,timestamp:value),那麼我們有一個 seriesSet 。如果每個項的值只是一個數字,那麼我們有一個數字 Set 。
它的肉
Transpose 使用 numberSet 並返回一個具有更大範圍(更少標記鍵) 的 seriesSet 。產生的 seriesSet 有點奇怪,因為索引不是時間,就像通常情況下的 seriesSet 一樣,因此 timevalue 不再是時間而只是一個索引號。因此應該忽略它。
因此,我們最終將設定項轉換為結果集的值,其中生成的集型別(seriesSet)可以包含多個值:
http://i.stack.imgur.com/4xMNL.jpg
讓我們來看一個例子:
# This returns a seriesSet of a scope of host,cluster
$connByHostCluster = q("sum:rate{counter,,1}:elastic.http.total_opened{cluster=StackExchangeNetwork|LogStash,host=ny-*}", "1h", "")
http://i.stack.imgur.com/ExUnZ.jpg
# Turn each item in the set into a numberSet by reducing it via average
$avgConnByHostCluster = avg($connByHostCluster)
http://i.stack.imgur.com/rhAer.jpg
# Transpose to new scope
$clusterScope = t($avgConnByHostCluster, "cluster")
http://i.stack.imgur.com/Wm7lD.jpg
你現在可以使用代表群集的每個專案做整潔的事情。例如,你可以執行 sum($clusterScope > 5)
(請注意,$clusterScope
是一個 seriesSet )來獲取群集中每個專案的速率高於 5 的專案數。然後,你可以在計數大於某個值時發出警報。例如,你還可以使用 len($clusterScope)
獲取每個群集中的主機數,並提醒相對於群集中主機數量超過閾值的主機數。