2016-07-25 3 views
0

у меня есть рубиновый фильтр многообещающе сопрягать адрес электронной почты в сообщении журнала, удалите его, и передать его через фильтр анонимизации, что-то вроде этого ...Logstash Рубиновый фильтр для соответствия адресов электронной почты

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"]    
    } 
} 

На данный момент это регулярное выражение не поглощает много чего. Я попытался заменить его, и я получил сообщение об ошибке (которое было ветвью моего разговора по выражению "oddity parsing message").

Кто-нибудь знает, как это сделать? Мне не нужно сумасшедшее избыточное регулярное выражение, просто чтобы поймать 99% адресов электронной почты. Регулярное выражение, я пытался использовать было

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) 

Вот строка лога для справки

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

Примечание Если это можно сделать проще/более разумный способ с использованием ГРОК, я полностью открыт для удаления бита ruby.

+0

* мне не нужен сумасшедший по-топ регулярное выражение, только один, чтобы поймать 99% адресов электронной почты * делает это задайте дубликат http://stackoverflow.com/questions/14440444/extract-all-email-addresses-from-bulk-text-using-jquery, http://stackoverflow.com/questions/3194407/extract-all- email-addresses-from-some-txt-documents-using-ruby, и я думаю, что еще много. Зачем публиковать только один вопрос, например: «Дайте мне регулярное выражение по электронной почте»? –

+0

Специфика его включения в фильтр grok или ruby ​​для logstash немного отличается. Кроме того, существует определенная нехватка документации о том, как правильно сделать это онлайн –

+0

Все те, кого я связал, чтобы соответствовать аромату регулярного выражения Oniguruma. –

ответ

1

Это из html5 спецификации

[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])?)* 

Расширенной

[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])? 
)* 

 Смежные вопросы

  • Нет связанных вопросов^_^