Logstash按唯一IP计数

时间:2014-10-07 14:16:07

标签: apache logging ip logstash metrics

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

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

这样的事情: 如果在5分钟的时间间隔内发现10+来自唯一IP的访问,我需要发送一封包含此IP的电子邮件。

对此最好的解决方案是什么?

1 个答案:

答案 0 :(得分:1)

这样做非常困难 - 要做到这一点,您需要为每个IP地址创建一个仪表。一旦你有一个每个IP地址的仪表,你需要查看它的rate_5m并确定它是否超过你的threashold(注意rate_5m是过去5分钟内的每秒速率)。一旦您确定需要发送警报,您可能希望在其中包含IP地址(因此我们需要使用红宝石过滤器提取它)...总而言之,不是我确实会在制作中使用这样的东西,因为它可能像疯了一样咀嚼内存(因为每个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地址。