我正在尝试使用Logstash进行一些日志分析。
我需要从Apache访问日志中计算唯一的IP,然后我需要将它们与计数过滤器匹配,以确定是否会发送电子邮件。
这样的事情: 如果在5分钟的时间间隔内发现10+来自唯一IP的访问,我需要发送一封包含此IP的电子邮件。
对此最好的解决方案是什么?
答案 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地址。