【问题标题】:Logstash count by unique IP按唯一 IP 计算的 Logstash 计数
【发布时间】:2014-12-02 00:08:27
【问题描述】:

我正在尝试使用 Logstash 进行一些日志分析。

我需要从 Apache 访问日志中计算唯一 IP,然后我需要将它们与计数过滤器进行匹配,以确定是否会发送电子邮件。

类似这样的: 如果在 5 分钟内发现来自唯一 IP 的 10+ 次访问,我需要发送一封带有此 IP 的电子邮件。

什么是最好的解决方案?

【问题讨论】:

    标签: apache logging ip logstash metrics


    【解决方案1】:

    这样做非常困难——要做到这一点,您需要为每个 IP 地址创建一个计量器。一旦每个 IP 地址都有一个仪表,您就需要查看它的 rate_5m 并确定它是否超过了您的阈值(注意 rate_5m 是过去 5 分钟内的每秒速率)。一旦您决定需要发送警报,您可能希望在其中包含 IP 地址(因此我们需要使用 ruby​​ 过滤器提取它)......总而言之,我不确定我会曾经在生产中使用过这样的东西,因为它可能会疯狂地消耗内存(因为每个 ip 地址的仪表)。

    filter {
      metrics {
        meter =>  "%{ip}"
        add_tag =>  ["metric"]
      }
      ruby { code => '
        ip = nil
        if event["tags"].include? "metric"
            event.to_hash.each do |key,value|
                if key.end_with?(".rate_5m") and value > 0.2
                    ip = key[0..-9]
                end
            end
        end
        if ip
          event["ip"] = ip
          event["tags"] = ["alert"]
        end
        '
      }
    }
    
    output {
      if "alert" in [tags] {
        email { ... }
      }
    }
    

    您可能会编写一个更智能的自定义过滤器,使用趋势算法之类的东西来查找计数趋势更高的 IP 地址。

    【讨论】:

    • 这是一个很棒/完整的回复!由于我需要将其用于生产应用程序,对于由同一 IP 的大量访问触发的警报系统,您有什么建议?它也可以是 Logstash 以外的其他工具。
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-24
    相关资源
    最近更新 更多