我在 Bosun 中制作特定图表时遇到问题。该图应该包含内存使用率最高的主机,但我找不到任何可用的指标来做到这一点。当然,我有os.mem.used就像os.mem.percent_free一样,但对我来说它不是很有帮助。我想从查询中获取两个系列,就像警报一样:moemry 的总数和使用的一个,除以使用的总数并乘以 100。
问题似乎是我不能划分系列,所以最后的机会是通过grep和awk在 Linux 中的 free 命令编写我自己的指标。
如果你真的想要一个 percent_used 而不是 percent_free 的图表,你应该使用100-q("sum:os.mem.percent_free{host=$hosts}", "1h", "")
. 然后,如果您想过滤图表上的系列,您应该使用过滤器功能。您可以在表达式页面上使用的示例:
$hosts=ny-redis*|ny-devredis*
$limit=5
$avgfree=avg(q("sum:os.mem.percent_free{host=$hosts}", "1h", ""))
$lowest_free=limit(sort($avgfree,"asc"),$limit)
$percent_used=100-q("sum:os.mem.percent_free{host=$hosts}", "1h", "")
filter($percent_used,$lowest_free)
我们有两个 dev 实例和两个 prod 实例,因此限制为 5 我在图中看到所有这些实例:
但是您可以更改要使用的表达式$limit=2
,它只会显示前两个:
但是请注意,比例已被截断。现在我不认为有任何方法可以指定在表达式页面或警报模板中使用什么比例,但您可以获取原始数据并使用不同的图形库对其进行绘图。
如果您愿意使用替代后端,Axibase 时间序列数据库支持将 scollector 作为数据源。
披露:我为 Axibase 工作。我们目前没有 Bosun 本身的存储驱动程序,但 Bosun 看起来很有前途,所以我们正在研究它。
在 ATSD 中,您计算派生的 scollector 指标如下:
value = 100*value('os.mem.used')/value('os.mem.total')
有时您只需要重新计算相同的系列,例如将某些指标转换为负值。在这种情况下,replace-value
效果很好:
replace-value = -value