2016-01-05 42 views
2

我正在嘗試設置Bosun和Graphite來警告錯誤率,這是從兩個不同的來源編譯的:API流量和Web應用流量。這是我現在有:Bosun:如何處理取消組合的空數字集?

$web_rate = avg(graphite("sumSeries(collectd.*.statsd.web.*.rate)", "5m", "", "")) 
$api_rate = avg(graphite("sumSeries(collectd.*.statsd.api.*.rate)", "5m", "", "")) 
$web_error_rate = avg(graphite("sumSeries(collectd.*.statsd.web.*.errorRate)", "5m", "", "")) 
$api_error_rate = avg(graphite("sumSeries(collectd.*.statsd.api.*.errorRate)", "5m", "", "")) 

$total_rate = ungroup($web_rate) + ungroup($api_rate) 
$total_error_rate = ungroup($web_error_rate) + ungroup(api_error_rate) 

$error_ratio = $total_error_rate/$total_rate 

在石墨不存在我們的櫃檯,直到他們不爲零,因此對於我們的預生產環境下,上述失敗,出現以下:

ungroup: requires exactly one group 

當我查看錶達式瀏覽器時,如預期的那樣graphite(...)調用正在返回一個空集,但avg(graphite(...))的結果什麼也不顯示。

有誰知道如何處理?

回答

2

如果Graphite中沒有數據用於度量標準和指定的時間範圍,則它將返回NaN,這不是任何內容。

如果您嘗試取消組合NaN時,您將收到以下錯誤:

ungroup: requires exactly one group 

使用NV功能,以保護自己免受此錯誤。 NV功能將用指定的值替換可能楠:

nv($result, 0) 

現在你可以放心地取消組合:

ungroup(nv($result, 0))