у меня есть рубиновый фильтр многообещающе сопрягать адрес электронной почты в сообщении журнала, удалите его, и передать его через фильтр анонимизации, что-то вроде этого ...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.
* мне не нужен сумасшедший по-топ регулярное выражение, только один, чтобы поймать 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, и я думаю, что еще много. Зачем публиковать только один вопрос, например: «Дайте мне регулярное выражение по электронной почте»? –
Специфика его включения в фильтр grok или ruby для logstash немного отличается. Кроме того, существует определенная нехватка документации о том, как правильно сделать это онлайн –
Все те, кого я связал, чтобы соответствовать аромату регулярного выражения Oniguruma. –