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 。

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

  • 相关阅读:
    Java Map遍历方式的选择
    UriMatcher类的addURI()方法
    Java IO流分析整理[转]
    java基础一些注意细节
    java中static变量和方存在内存什么区域
    详细解析Java中抽象类和接口的区别
    mybatis一些记录
    Go语言简介(上)— 语法
    JavaScript相关-深入面向对象
    33个组件5
  • 原文地址:https://www.cnblogs.com/morya/p/4786441.html
Copyright © 2011-2022 走看看