Отправить электронное письмо другому пользователю на основе некоторого шаблона в Logstash

Мы можем отправить уведомление по электронной почте на определенный адрес электронной почты, но я хочу отправить электронное письмо на другой почтовый адрес на основе некоторого шаблона в журналах.

Например, скажем, у меня есть три пользователя с адресом электронной почты

  1. [email protected] получает журнал идентификатора почты, содержащий [userOneModule]
  2. [email protected] получает журнал идентификатора почты, содержащий [userTwoModule]
  3. [email protected] получает журнал идентификатора почты, содержащий [userThreeModule

Используемая версия Logstash: 1.3.3 Любая помощь, если это возможно в logstash или любом обходном пути для достижения чего-то подобного.

Это моя конфигурация. Хотя и «Безопасность», и «Портал» совпадают, электронная почта отправляется только на один из них.

Когда я веду только один тип журналов, скажем, журналы безопасности или журналы портала, он работает, но когда я веду оба журнала, электронная почта отправляется только одному из них.

output { 

if [module] == "Security"{
    email { 
   to => "[email protected]" 
   from => "[email protected]"
    match =>["%{message}","severity,ERROR"]
   subject => "Error Occured" 
   body => "%{message}" 
   via => "smtp" 
   options => { 
     starttls => "true" 
     smtpIporHost => "smtp.gmail.com" 
     port => "587" 
     userName => "[email protected]" 
    password => "*******"  
     authenticationType => "plain" 
   } 
 }
 }
 if [module] == "Portal"{
    email { 
   to => "[email protected]" 
   from => "[email protected]"
    match =>["%{message}","severity,ERROR"]
   subject => "Error Occured" 
   body => "%{message}" 
   via => "smtp" 
   options => { 
     starttls => "true" 
     smtpIporHost => "smtp.gmail.com" 
     port => "587" 
     userName => "dummy2161@somemail 
    password => "*****"  
     authenticationType => "plain" 
   } 
 }
 }

}

Спасибо


person Shahbaz    schedule 03.06.2015    source источник
comment
попробуйте использовать регулярные выражения   -  person Venkata Naidu M    schedule 03.06.2015
comment
Мои журналы содержат [имя модуля], но мой вопрос заключается в том, как я буду отправлять электронную почту разным пользователям. можем ли мы иметь условие if, говорящее, что если (moduleName = 'userOne'), то отправить адрес электронной почты [email protected] в logstashConfigFile   -  person Shahbaz    schedule 03.06.2015
comment
Используйте фильтр grok, соответствующий имени модуля, убедитесь, что имя модуля в файле журнала   -  person Venkata Naidu M    schedule 03.06.2015


Ответы (1)


Вы можете либо сохранить адрес электронной почты получателя в поле (используя условные операторы или фильтры grok для присвоения значения) и ссылаться на это поле в параметре to выходных данных электронной почты, либо вы можете обернуть несколько выходных электронных писем в условные выражения.

Использование поля для хранения адреса:

filter {
  # If the module name is the same as the recipient address's local part
  mutate {
    add_field => { "recipient" => "%{modulename}@example.com" }
  }

  # Otherwise you might have to use conditionals.
  if [modulename] == "something" {
    mutate {
      add_field => { "recipient" => "[email protected]" }
    }
  } else {
    mutate {
      add_field => { "recipient" => "[email protected]" }
    }
  }
}

output {
  email {
    to => "%{recipient}"
    ...
  }
}

Обертывание выходных данных в условных выражениях:

output {
  if [modulename] == "something" {
    email {
      to => "[email protected]"
      ...
    }
  } else {
    email {
      to => "[email protected]"
      ...
    }
  }
}
person Magnus Bäck    schedule 03.06.2015
comment
Привет, Магнус, я попробовал ваше решение, оно работает, но электронное письмо отправляется только одному пользователю, даже если оба шаблона совпадают. Я отредактировал свой вопрос и добавил свой файл конфигурации. Пожалуйста, просмотрите один раз. - person Shahbaz; 03.06.2015