grafana - 在 prometheus/grafana 中从零开始绘制计数器
问题描述
在普罗米修斯中,我有一个单调递增的计数器(在这种情况下,来自 IF-MIB 的 ifHCInOctets)。
在 Grafana 中,我可以使用简单的查询创建一个图表,ifHCInOctets{job='snmp',instance='$Device',ifDescr=~'eth0'}
并通过在右上角选择所需的范围来查看在不同时间范围内绘制的计数器。
这几乎正是我想要的。但是,我希望图表始终从零开始并从那里增加。用例是我想可视化我在一个月内的数据使用情况,以了解我接近数据上限的速度。(我已经使用函数创建了一个仪表对象,该increase(ifHCInOctets{...}[$__range])
函数向我显示了在给定时间范围内我总共使用了多少,但我希望能够随着时间的推移可视化该使用情况。)
基本上,我想要ifHCInOctets 在范围开始时的值在哪里ifHCInOctets{...} - X
。X
我的第一个想法是:
ifHCInOctets{...} - ifHCInOctets{...} offset $__range
但这似乎向我展示了每个数据点减去$__range
它之前的数据点时间(而不是仅仅从所有点中减去起始值)。
然后我尝试使用查询创建一个查询变量并将其query_result(ifHCInOctets{...} offset $__range)
设置为在时间范围更改时更新。这几乎似乎有效,但结果图似乎总是开始有点负面,这取决于选择的时间范围,这让我觉得它没有做我认为的那样。
我也尝试过各种形式的sum
,sum_over_time
和increase
, 都无济于事。
解决方案
你可能正在寻找这样的东西
ifHCInOctets
-
min_over_time(
(ifHCInOctets
and
(month(timestamp(ifHCInOctets)) == scalar(month(vector($__to / 1000)))))[31d:]
)
但它没有考虑计数器重置。而且是丑陋和低效的地狱。它基本上是当前值减去与min_over_time
Grafana$__to
时间戳同月的前 31 天计算的样本数。
您可能希望基于此表达式设置记录规则(将年、月和日标签添加到度量标准),然后计算increase()
任何给定月份(包括当前月份)的时间。这考虑了计数器重置和月初不存在的计数器。
推荐阅读
- android - 展开时如何使BottomSheetDialog全屏并在其底部附加按钮?
- r - R curl fetch连接问题:超时
- firebase - 为什么 Leak Canary 会将 Google Firebase API 检测为泄漏?
- python-3.x - pandas first_valid_index() 作为整数键
- python - RandomForestClassifier 抛出错误:一个字段包含逗号分隔值
- java - 获得 250 多个项目,但自定义列表视图不显示任何内容
- batch-file - 为什么 set 命令会抛出错误?
- python - 列表中数对之间的数学运算
- mysql - 每个月如何获取 SUM 和 COUNT 数据?
- marklogic - MarkLogic 数据中心流升级