zoukankan      html  css  js  c++  java
  • elastalert SpikeRule异常告警问题

    公司里面用了ELK,所以也就顺其自然的玩起了elastalert,

    发现SpikeRule比较符合自己的需求。

    但配置后,死活不停的虚假告警,看实际曲线明明没有相差太多,1.4的倍率却总是被打破。

    憋了好久,实在没辙,只好自己想办法理解源码,

    class SpikeRule(RuleType):
        """ A rule that uses two sliding windows to compare relative event frequency. """
        required_options = frozenset(['timeframe', 'spike_height', 'spike_type'])
    
        def __init__(self, *args):
            super(SpikeRule, self).__init__(*args)
            self.timeframe = self.rules['timeframe']
    
            self.ref_windows = {}
            self.cur_windows = {}

    SpikeRule中用到了ref_windows cur_windows,当启动Rule的时候,会首先等到ref_windows里面的数据都填充满,

    才开始考虑和cur_windows做比对,并开始产生告警。

    诡异的是,当timeframe和run_every的时间区间非常接近的时候,比如,都是1分钟,

    偶尔在时间非常紧凑的时候,cur和ref两个窗口的实际数据长度会不一致,导致统计函数def find_matches(self, ref, cur):计算出的值不准。

    并最终产生虚假告警。

    简单处理办法,时间区间拉长些,比如当前我的timeframe设置1分钟,但是run_every: seconds: 10 。

    实际更详细的原因和代码有待以后继续追踪。。

  • 相关阅读:
    IT教育课程考评系统开发-07
    2020091201-1
    ip
    输入框枚举
    语言枚举
    《岁月神偷》弹唱和弦吉他谱_六线谱
    string 转化成 string数组
    获取类的字段值
    获取类的字段
    最全的省份递归
  • 原文地址:https://www.cnblogs.com/morya/p/4786441.html
Copyright © 2011-2022 走看看