动态监控磁盘分区使用ETA

名词解释

eta,是estimated time of arrival的缩写,通常指灰机、轮船等的预计到达时间。
拿到运维系统中,含义即为某个分区预计还有多长时间被打满。(暂定为此名字,还没想到其他贴切的词)

背景

为什么搞这个监控,我们不是有现成的剩余空间监控(vfs.fs.size[/,free]和剩余空间百分比监控(vfs.fs.size[/,pfree])么?
原因在于,上述两项监控,都是死的,例如我们设置某个分区剩余空间百分比小于10%时报警,那么在该分区剩余空间百分比大于10%时,我们不会收到任何报警。
而这种情况,不能基于磁盘最近的增长量来判断磁盘打满的eta。
数学上有很多求平均数的方法[1],此处磁盘eta的算法更倾向于使用指数平均法,即“各数值的加权影响力随时间而指数式递减,越近期的数据加权影响力越重”,但我们只取最近N个值的平均数,直接砍掉N之前的历史数。所以只是形式上相像而已。

实现

  • 如上图,增加item,description和key随便填
  • Type选择calculated,因为是calculated类型,所以key不是zabbix预定义的,可以自定义
  • formula解析如下
1
2
3
4
5
last("vfs.fs.size[/test,free]") / ### @1
(
( last("vfs.fs.size[/test,free]", #4) - last("vfs.fs.size[/test,free]") ) / 3 ### @2
+ 0.0001 ### @3
) * 2 ### @4

@1 代表某个分区的最后检测到的剩余空间
@2 / 3的原因是,last(#4) ~ last(#1),一共是3个周期,求平均数
@3 + 0.0001的目的是为了规避除0错误
@4 * 2的目的是xfs.fs.size的上报周期是2分钟,这里没找到能替代的变量或宏。

  • 选择float类型;加个单位。
  • 报警,因为磁盘可能出现释放空间的情况,所以报警需考虑value一定要大于0才行。

参考

  1. 移动平均

-EOF-