如何在 grafana 中使用石墨数据源对指标进行不同的计数?
Posted
技术标签:
【中文标题】如何在 grafana 中使用石墨数据源对指标进行不同的计数?【英文标题】:How to do a distinct count of a metric using graphite datasource in grafana? 【发布时间】:2020-01-26 08:55:37 【问题描述】:我有一个显示服务器状态的指标。这些值是整数,如果值为 0(零),则服务器稳定,否则不稳定。我们拥有的图表处于分钟级别。因此,我想显示一个聚合值,以了解服务器在所选时间范围内不稳定的小时数。
比方说,如果我选择“过去 7 天”作为持续时间...我们有 X 小时的服务器不稳定。
还有一件事,我有一个显示服务器状态的折线图(时间序列图)......但是,当我选择“过去 24 小时或 48 小时”时,我得到的图表是分钟级别...当我将持续时间增加到四分之一时,我每 5 分钟或类似的时间获取一次图表....我知道它正在汇总值....但是任何人都知道 grafana 是如何做的聚合??
我已经尝试过“scaleToSeconds”函数和“ConsolidateBy”函数等等,以首先获得非零值分钟的计数,但没有成功。
任何帮助将不胜感激。
提前致谢。
【问题讨论】:
【参考方案1】:当您说该值为零 (0) 时,服务器是健康的 - 当服务器不健康/不稳定时报告了哪些其他值?例如,如果您只报告零(健康)或一(不健康),那么您可以使用 sumSeries 函数来获取跨多个服务器的计数。
这里需要一些关于服务器报告的值类型的更多信息,以便为您提供更好的答案。
Grafana 通常使用平均聚合函数来聚合或整合数据。 You can override this using the 'sum' aggregation in the consolidateBy function.
要获得随时间推移的运行计算,您很可能必须使用summarize function(也与总和聚合)并定义时间段,例如1 小时、1 天、1 周,以此类推。您可以更进一步,将其与 time
模板变量结合使用,以便随着时间段的增长/缩短,汇总时间段将相应地增加/减少。
【讨论】:
那么其他值的范围可以从 1 到 50k(只是对上限的猜测)......但它可以是任何正值......你知道@tony metricfire 【参考方案2】:有几种不同的方法可以解决这个问题,在这种情况下有 2 个地方会发生聚合:
当您查询比原始保留间隔更长的时间范围时,耳语会返回聚合数据。此处使用的聚合方法在您的碳聚合配置中定义。
当 Grafana 向 Graphite 发送查询时,它会传递 maxDataPoints=<width of graph in pixels>
,并且 Graphite 将执行聚合以最多返回那么多点(因为您没有足够的像素来渲染更多点)。用于此合并的方法由consolidateBy
函数控制。
如果您有一个面板可以查询 3 天的数据,并且您以 1 分钟的间隔存储 2 天和以 5 分钟的间隔存储 7 天,那么这两种方法可以在同一个查询中使用你会从 5 分钟的存档中获得 72 * 60 / 5 = 864 点,但如果你的图表只有 500 像素宽,那么在运行时将合并到 10 分钟的间隔并返回 432 点。
因此,如果您想始终访问计数,那么您可以更改您的碳配置以对这些系列使用 sum
聚合(并删除现有的耳语文件,以便使用新的聚合配置创建新文件),并在您的查询中传递consolidateBy('sum')
,您将始终得到每个间隔的总和。
也就是说,您也可以在查询时通过将平均值乘以得出总数来解决此问题(假设您的耳语聚合配置使用average
)。最简单的方法是将summarize
与average
的数据放入与您将要查询的最长聚合间隔匹配的存储桶中,然后scale
将这些值按该间隔计算总分钟数。最后,您需要使用consolidateBy('sum')
,以便任何运行时整合都能正常工作。
consolidateBy(scale(summarize(my.series, '10min', 'avg'), 60), 'sum')
综上所述,您可能需要考虑以百分比而不是原始分钟数的形式报告正常运行时间,在这种情况下,您可以直接使用原始平均值。
【讨论】:
以上是关于如何在 grafana 中使用石墨数据源对指标进行不同的计数?的主要内容,如果未能解决你的问题,请参考以下文章