2

我正在尝试设置 Bosun 和 Graphite 以警告错误率,这些错误率是从两个不同的来源编译的:API 流量和 Web 应用程序流量。这是我现在拥有的:

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

有谁知道如何处理这个?

4

1 回答 1

2

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

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

ungroup: requires exactly one group

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

nv($result, 0)

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

ungroup(nv($result, 0))
于 2016-11-04T14:49:33.943 回答