在Prometheus / Graphana中从0开始绘制计数器

时间:2019-10-16 00:11:31

标签: grafana prometheus

在普罗米修斯,我有一个单调递增的计数器(在这种情况下,如果是IF-MIB的HCInOctets)。

在Grafana中,我可以使用简单的查询ifHCInOctets{job='snmp',instance='$Device',ifDescr=~'eth0'}创建一个图形,并通过在右上方选择所需的范围来查看在不同时间范围内绘制的计数器。

这正是我想要的几乎。但是,我希望图形始终从零开始并从零开始增加。用例是我想在一个月的时间内可视化我的数据使用情况,以查看达到数据上限的速度。 (我已经使用increase(ifHCInOctets{...}[$__range])函数创建了一个仪表对象,该函数向我显示了在给定时间范围内我总共使用了多少,但我希望能够随时间可视化该用法。)

基本上,我想要ifHCInOctets{...} - X,其中X是范围开头处ifHCInOctets的值。我的第一个念头是:

ifHCInOctets{...} - ifHCInOctets{...} offset $__range

但这似乎向我显示了每个数据点减去之前的数据点$__range(而不仅仅是从所有点中减去起始值)。

然后,我尝试使用查询query_result(ifHCInOctets{...} offset $__range)创建一个查询变量,并将其设置为在时间范围更改时更新。这似乎几乎可以奏效,但是根据选择的时间范围,生成的图形似乎总是开始略微为负,这让我觉得它没有按照我的想象做。

我还尝试了sumsum_over_timeincrease的各种形式,但无济于事。

1 个答案:

答案 0 :(得分:0)

您可能正在寻找类似的东西

ifHCInOctets
  -
min_over_time(
  (ifHCInOctets
    and
  (month(timestamp(ifHCInOctets)) == scalar(month(vector($__to / 1000)))))[31d:]
)

但是它没有考虑到计数器重置。而且丑陋而效率低下。基本上,这是当前值减去min_over_time(在前31天与Grafana的$__to时间戳记同月)中计算得出的样本数。

您可能希望基于this expression(将年份,月份和日期标签添加到度量标准)设置记录规则,然后在任意给定月份(包括当前月份)中计算increase() )。这同时考虑了计数器重置和月初不存在的计数器。