我尝试设置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(...))
的结果不显示任何内容。
有谁知道如何处理这个问题?
答案 0 :(得分:2)
如果Graphite中没有针对指标和指定时间范围的数据,它将返回NaN,这是什么。
如果您尝试取消组合NaN,则会收到以下错误:
ungroup: requires exactly one group
使用 nv 功能来保护自己免受此错误的影响。 Nv 函数将使用指定值替换可能的NaN:
nv($result, 0)
现在你可以安全地取消组合:
ungroup(nv($result, 0))