Проблемы с настройкой logstash для вывода электронной почты

Я пытаюсь настроить logstash для отправки оповещений по электронной почте и вывода журнала в asticsearch / kibana.

У меня есть журналы, успешно синхронизирующиеся через rsyslog, но я получаю следующую ошибку при запуске

/opt/logstash-1.4.1/bin/logstash agent -f /opt/logstash-1.4.1/logstash.conf --configtest

Ошибка: ожидается один из #, {,,, ] в строке 23, столбце 12 (байт 387) после фильтра {if [program] == "nginx-access" {

grok {match => ["message", "% {IPORHOST: remote_addr} -% {USERNAME: remote_user} [% {HTTPDATE: time_local}]% {QS: request}% {INT: status}% {INT: body_bytes_sent} % {QS: http_referer}% {QS: http_user_agent} ”]}}}

output {stdout {}asticsearch { embedded => false host => "

Вот мой конфигурационный файл logstash

input {
 syslog {
 type => syslog
 port => 5544
}
}


filter {
if [program] == "nginx-access" {

grok {
match => [ "message" , "%{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%  {HTTPDATE:time_local}\] %{QS:request} %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:http_user_agent}” ]
}
}
}


output {
  stdout { }
 elasticsearch {
  embedded => false
  host => "localhost"
  cluster => "cluster01"
 }
email {
from => "[email protected]"
match =>  [
           "Error 504 Gateway Timeout", "status,504",
           "Error 404 Not Found", "status,404"
          ]
subject => "%{matchName}"
to => "[email protected]"
via => "smtp"
body => "Here is the event line that occured: %{@message}"
htmlbody => "<h2>%{matchName}</h2><br/><br/><h3>Full Event</h3><br/><br/><div align='center'>%{@message}</div>"
  }
}

Я проверил строку 23, на которую ссылается ошибка, и она выглядит нормально.... Я попытался удалить фильтр, и все работает... без изменения этой строки.

Пожалуйста помоги

редактировать

Теперь я изменил свой конфиг на этот

input {
 syslog {
 type => syslog
 port => 5544
 }
}

filter {
grok {
type => "syslog"
match => ["syslog_program","nginx-access"]
match => [ "message","%{IPORHOST:remote_addr} - %{USERNAME:remote_user} \[%{HTTPDATE:time_local}\] %{QS:request} %{INT:status} %{INT:body_bytes_sent} %{QS:http_referer} %{QS:http_user_agent}" ]
add_field => [ "nginx_response", "%{NUMBER:response}" ]
}
}

output {
stdout {}
elasticsearch {
embedded => false
host => "localhost"
cluster => "cluster01"
}
email {
match => [ "status", "status,304"]
to => "[email protected]"
from => "[email protected]"
options => [ "smtpIporHost", "",
         "port", "",
         "userName", "",
         "password", "",
         "starttls", "",
         "authenticationType", ""
       ]
via => "smtp" # or pop or sendmail
   subject => "Found %{IP:client} Alert on %{@source_host}"
   body => "Here is the event line %{@message}"
   htmlbody => "<h2>%{matchName}</h2><br/><br/><h3>Full Event</h3><br/><br/><div align='center'>%{@message}</div>"
}
}

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

Спасибо

2 ответа

Вам не нужно разбирать [program] первый? Я не думаю, что поле ввода вообще выполняет какую-либо фильтрацию, поэтому вам может потребоваться начать с %SYSLOGBASE http://logstash.net/docs/1.4.1/filters/grok

Вы можете попробовать вместо этого, возможно:

if [message] =~ /nginx-access/ {

Какое ключевое слово будет соответствовать вашему message поле. Это по крайней мере скажет вам, если это то, что здесь происходит.

Вывод электронной почты не поддерживает функцию соответствия. Вместо этого вы могли бы добавить add_tag к успешному совпадению с grok, а затем поместить условие в вывод своей электронной почты, чтобы отправлять только определенные электронные письма в зависимости от заданного вами тега.

Другие вопросы по тегам