2016-07-25 20 views
0

ich einen Rubin Filter haben hoffentlich eine E-Mail-Adresse übereinstimmen es in einer Log-Nachricht, entfernen und sie durch eine Anonymisierung Filter passieren, so etwas wie dieses ...Logstash Ruby-Filter E-Mail-Adressen entsprechen

ruby { 
    code => 
    " 
    begin 
     if !event['log_message'].nil? 
     if match = event['log_message'].match(/(\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b)/i) 
      event['user_email'] = match[1] 
     end 
     else 
     puts 'Oddity parsing message: log_message is nil' 
     puts event.to_yaml 
     end 
    rescue Exception => e 
     puts 'Exception parsing user email:' 
     puts e.message 
    end 
    " 
} 
if [user_email] { 
    anonymize { 
    algorithm => "SHA1" 
    fields => ["user_email"] 
    key => "mySuperSecretPassword" 
    } 
    ruby { 
    code => 
     " 
     begin 
     event['message'].gsub!(/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i, event['user_email']) 
     event['log_message'].gsub!(/\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.[A-Z]{2,4}\b/i, event['user_email']) 
     rescue Exception => e 
     puts 'Exception replacing user-email in log:' 
     puts e.message 
     end 
     " 
     remove_field => ["user_email"]    
    } 
} 

Ab sofort fängt diese Regex nichts ein. Ich habe versucht, es zu ersetzen, und ich bekam einen Fehler (der der "Kuriositätenanalyse-Nachricht" Zweig meines Codes war).

Weiß jemand ungefähr, wie man das macht? Ich brauche keinen verrückten, übertriebenen Regex, nur einen, um 99% der E-Mail-Adressen zu finden. Die Regex Ich habe versucht, war

if match = event['log_message'].match(/(\b[a-zA-Z0-9_.+=:-][email protected][0-9A-Za-z][0-9A-Za-z-]{0,62}(?:\.(?:[0-9A-Za-z][0-‌​9A-Za-z-]{0,62}))*\b)/i) 

zu verwenden Hier ist eine Protokollzeile Referenz

76817815 11/Jun/2016 00:04:28 +0000 INFO [eventListener-3] messagingsvc logDefault > doSend - Sending email... From: "Test" <[email protected]> 

Hinweis Wenn dies einfacher durchgeführt werden kann/in vernünftiger Weise mit Grok, bin ich völlig offen zum Entfernen des Rubins.

+0

* I eine nicht einen verrückten Over-the-Top-Regex benötigen, nur 99% der E-Mail-Adressen zu fangen * macht diese Frage ein Duplikat von http://stackoverflow.com/questions/14440444/extract-all-email-addresses-from-bulk-text-using-jquery, http://stackoverflow.com/questions/3194407/extract-all- E-Mail-Adressen-aus-einigen-Txt-Dokumente-mit-Ruby, und ich denke, viele mehr. Warum posten Sie einfach eine andere Frage wie "Gib mir eine E-Mail-Regex"? –

+0

Die Besonderheiten, es in einen Grok oder einen Rubinfilter für Logstash zu bringen, sind ein bisschen anders. Außerdem gibt es einen entschiedenen Mangel an Dokumentation darüber, wie man das online richtig macht. –

+0

All die, die ich verlinkt habe, um Oniguruma Regex Geschmack zu passen. –

Antwort

1

Dies ist von html5 spec

[a-zA-Z0-9.!#$%&'*+/=?^_\`{|}~-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)* 

Expanded
[a-zA-Z0-9.!#$%&'*+/=?^_\`{|}~-]+ 
@ 
[a-zA-Z0-9] 
(?: [a-zA-Z0-9-]{0,61} [a-zA-Z0-9])? 
(?: 
     \. [a-zA-Z0-9] 
     (?: [a-zA-Z0-9-]{0,61} [a-zA-Z0-9])? 
)*