聊聊监控系统(02) 数据的采集

数据采集

先来聊数据的源头,看官可能觉得不就是个agent么,搞好cpu、mem等基础指标的采集,上报上来不就好了,其实不然
首先,作为agent,一个最大的特点就是离中心太远了,远到无法很好的控制它。
尤其前期,不断的更新、迭代、修bug,当你有几十几百台机器时,都不是问题,什么ssh、ansible分分钟就搞定了。
但当你的规模成千上万的时候,就会发现,版本迭代是在是太痛苦了。
而且数量不是唯一的问题,例如你的上报中心地址变了,有网络分区了,有各种各样恶心的场景。

organizing golang projects and dependencies

背景

golang的依赖一直是让人头疼的问题, 大家对其自有的package管理也是褒贬不一
而对于一个公司内部项目来讲, 主要的需求有以下几点

  1. 方便的依赖包版本管理
  2. 方便协同开发
  3. 尽可能不依赖其编译所在环境
  4. 除基础包之外, 第三方包尽可能的自包含

基于此, 有了本文, 打算以最小的环境变更及工具, 打造一个可协同工作的golang projects

动态监控磁盘分区使用ETA

名词解释

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

背景

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