Bosun:如何用ungroup处理空数集?

时间:2016-01-05 21:42:26

标签: bosun

我尝试设置Bosun和Graphite来提醒错误率,从两个不同的来源编译:API流量和网络应用流量。这就是我现在所拥有的:

$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(...))的结果不显示任何内容。

有谁知道如何处理这个问题?

1 个答案:

答案 0 :(得分:2)

如果Graphite中没有针对指标和指定时间范围的数据,它将返回NaN,这是什么。

如果您尝试取消组合NaN,则会收到以下错误:

ungroup: requires exactly one group

使用 nv 功能来保护自己免受此错误的影响。 Nv 函数将使用指定值替换可能的NaN:

nv($result, 0)

现在你可以安全地取消组合:

ungroup(nv($result, 0))