理解轉置函式 t()

概述

轉置功能是博森功能更強大的功能之一,但它也需要付出努力才能理解。它功能強大,因為它讓我們在不同級別上發出警報,而不是基礎資料的標記結構。

轉置會更改警報的範圍。這可讓你範圍的事情到更大的集合。因此,例如,如果你的查詢返回 host,cluster 的範圍並且想要基於群集執行狀況而不是單個主機進行警報,則可以使用轉置來執行此操作。

什麼是範圍
範圍是構成最終結果的標記鍵列表。例如:

  • 如果範圍是 host,則會在警報中獲得每個主機結果。
  • 如果你的範圍是空的(沒有標記鍵),那麼你只能獲得一個警報。
  • 如果你的範圍是 host,iface,你可以獲得結果中每個主機上每個介面的警報。

因此,我們得到的警報與資料的標籤相關聯。轉置功能允許我們在公制標籤結構以外的不同範圍內發出警報。因此,我們可以查詢導致 host,cluster 但在 cluster 範圍內發出警報的事情。

打破功能

轉置函式的簽名是:

t(numberSet, group string) seriesSet

因此,它需要一個 numberSet ,一個範圍又稱為結果的組,並返回一個 seriesSet

這些東西是什麼?

Set,numberSets 和 seriesSets

bosun 中的許多函式的結果都是集合,通常是數字 SetseriesSet 。結果中的整個集合共享相同的標記。並且集合中的每個專案對於每個對應金鑰的值是唯一的。如果集合中每個專案的值是一個系列(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) 獲取每個群集中的主機數,並提醒相對於群集中主機數量超過閾值的主機數。