2014-10-07 97 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