Problemas ao configurar logstash para saída de email

1

Estou tentando configurar o logstash para enviar alertas de email e saída de log em elasticsearch / kibana.

Eu tenho os logs sincronizados com sucesso via rsyslog, mas recebo o seguinte erro quando executo

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

Erro: esperado um de #, {, ,] na linha 23, coluna 12 (byte 387) após o filtro { if [program] == "nginx-access" {

grok { correspondência = > ["message", "% {IPORHOST: remote_addr} -% {USERNAME: remote_user} [% {HTTPDATE: time_local}]% {QS: solicitação}% {INT: status}% {INT: body_bytes_sent}% {QS: http_referer }% {QS: http_user_agent} ”] } } }

output {   stdout {} elasticsearch {   incorporado = > falso   host = > "

Aqui está o meu arquivo de configuração do 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>"
  }
}

Eu chequei a linha 23 que é referenciada no erro e parece bem .... Eu tentei remover o filtro e tudo funciona ... sem mudar essa linha.

Por favor ajude

Editar

Agora mudei minha configuração para esta

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

Isto parece funcionar, tanto quanto eu posso ver que agora está reconhecendo coisas no logstash, e que há um comando de plugin de email lá, mas o jogo falha ..... alguma idéia?

Obrigado

    
por user2099762 12.06.2014 / 15:56

2 respostas

1

Você não precisa analisar [program] primeiro? Eu não acho que o campo 'input' faça algum tipo de filtragem, então você pode precisar começar com %SYSLOGBASE link

Você pode tentar, talvez:

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

Qual palavra-chave corresponderá ao seu campo message . Isso pelo menos vai te dizer se isso é o que está acontecendo aqui.

    
por 12.06.2014 / 16:08
0

A saída email não suporta a função de correspondência. Em vez disso, o que você poderia fazer seria add_tag para uma partida de grok bem-sucedida, em seguida, colocar um condicional ao redor sua saída de e-mail para enviar apenas alguns e-mails, dependendo da tag que você definiu.

    
por 30.04.2015 / 13:58