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