浅谈基于标准差的的波动监控

 
  电信BOSS系统的一些应用,经常需要做波动的监控,比如每日的某业务的话单量、某业务的受理量、某业务错单量等,一般做法,是做同比和环比,取经验值超过一定百分比来进行波动的监控,这些监控,有一个最大的坏处就是,这些经验值很难调整:
经常会有上百种来源,而每种业务的经验值又各不相同,且业务会有自然的增长或者下降,如果这些百分比的阀值调整太松,有时候问题难以发现,如果调整太紧,则告警又非常频繁,导致误告警的情况增多。这样,就使得告警形同虚设。这种时候,引入标准差来进行监控是一个很好的办法。
首先不要被这个名字吓到,其实这个东西并不复杂,当然可以先去看一下百度百科:
写的相对晦涩一点,其实,我们不需要懂那么多,看如下的图即可:
   
也就是说,取标准差的过程,实际就是一个取“经验值”的过程,你并不需要关心,比如某个业务话单平时都是1000万话单,这个1000万的具体数值,也不需要关心,某些本身波动就很大的业务,比如某些小业务,你需要关系的是,今天发生的业务数量,比平时相差几个标准差即可,一般来说,我们取3个标准差,认为超过3个标准差,就是“异常的”。
实际操作起来,需要根据业务特性,来确定取样的样本:有三点需要考虑:
周期:如每天产生的长话话单数量,这个不会因时间变化而产生较大差异,按“日”来做取样分析即可,比如每月缴费的数量,则按用“月"的累积值比较合理。
对象:比如错单数量,因为跟输入源头有关,有可能随着输入源的增长而增长,此时,取比率是比较合适的。
样本个数:这个需要根据业务的实际情况来定,如果业务整体变化(增长/减少)缓慢,则可以取相邻较长时间,如果增长较快,则取较少,但是一般来说,超过30个取样才有实际意义。
至于计算方法,其实就是简单的四则运算:
假设当前值为X,标准差为S,平均数为A,标准差倍数为N,那么N=(A-X)/S
对于ORACLE ,标准差S可以用stddev函数计算得到,平均数A可以用avg函数计算得到。当然,也可以自己计算得出。
要做的监控,也就是对N进行监控。
其实真的是非常简单,但是也很好用的一个方法。
posted @ 2016-12-26 13:10  笑扯风云蛋  阅读(1827)  评论(2编辑  收藏  举报