У меня в ELK попадает большое количество логов с windows серверов и некоторые из них пересылаются на почту. Но есть один недостаток, в самих логах нет информации о времени, когда произошло какое-либо событие. Можно конечно на почту отправлять вместе с логом события и поле @timestamp , но оно не очень то удобочитаемое, да еще и в UTC. Само поле @timestamp не изменяемое и информация в нем хранится только в определенном формате (пример 2017-04-13T15:15:32.405Z ). Поэтому воспользуемся языком программирования ruby и добавим в logstash фильтр.
К сожалению, у меня не получилось воспользоваться классами time и date в ruby, logstash выдавал на них _rubyexception, поэтому пришлось использовать «велосипед» =)
Дальше пример фильтра с комментариями:
filter {mutate {add_field => { "log_time" => "date" } #Создаем новое поле с любым текстом}ruby { #Подключаем rubycode => "temp = event.get('@timestamp').to_i; #Присваиваем переменной temp значение поля @timestamp переведенное в UNIX форматt = Time.at(temp).strftime('%e %B %Y at %H:%M'); #Конвертируем UNIX формат даты и времени в формат по маске в скобкахevent.set('log_time', t); #Записываем получившуюся дату и время в поле log_time"}}
Теперь вместе с логом события можно отправлять поле log_time и получать удобочитаемый текст сообщения, с временем в нужном формате и нашим часовым поясом.
И еще хотелось бы сказать пару слов о тестировании конфига для logstash. Во время тестирования, удобно выводить информацию в консоль, а не писать в ES и потом смотреть там. Для этого используется конструкция
stdout { codec => rubydebug }Вот пример config.conf с тестированием поля log_time:
input { generator { count => 1 } }filter {ruby { code => "temp=event.get('@timestamp').to_i;t=Time.at(temp).strftime('%e %B %Y at %H:%M');event.set('log_time',t);" }}output { stdout { codec => rubydebug } }
После запуска этого конфига командой:
# /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/config.conf
В терминале увидим примерно такую картину:



Каким методом пользуетесь для алертов на почту?
В разных проектах использовал разные подходы, но если просто по каким-то конкретным параметрам то самый простой вариант это делать прямо через logstash, используя секцию email в output.
А так можно посмотреть на эти продукты:
https://github.com/Yelp/elastalert
https://opendistro.github.io/for-elasticsearch/