2014-10-07 94 views
0

我正在尝试使用Logstash进行一些日志分析。Logstash通过唯一IP进行计数

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

类似这样的: 如果在5分钟的时间间隔内从一个唯一的IP访问10次以上,他们需要发送一封带有此IP的电子邮件。

什么是最好的解决方案呢?

回答

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地址。

+0

这是一个很棒的/完整的回复! 因为我需要这个产品的应用程序,你会建议我一个报警系统,由同一个IP的大量访问触发?它也可以是除Logstash以外的其他工具。 – Rafa 2014-10-07 17:02:49