Elasticsearch/kibanaでメールアラートとログ出力を送信するようにlogstashを構成しようとしています。
Rsyslogを介してログを正常に同期していますが、実行すると次のエラーが発生します
/opt/logstash-1.4.1/bin/logstashエージェント-f/opt/logstash-1.4.1/logstash.conf --configtest
エラー:フィルター{if [program] == "nginx-access" {の後に23行12列(バイト387)に#、{、、、]のいずれかが必要です
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 => "
これが私の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内の処理を認識していること、およびそこに電子メールプラグインコマンドがあることを確認できる限り、機能しているようですが、一致は失敗します。
ありがとう
最初に[program]
を解析する必要はありませんか? 'input'フィールドはいかなる種類のフィルタリングも行わないと思うので、%SYSLOGBASE
http://logstash.net/docs/1.4.1/filters/)から始める必要があるかもしれません。 grok
代わりに、おそらく次のことを試すことができます。
if [message] =~ /nginx-access/ {
message
フィールドに一致するキーワードはどれですか。それは少なくとも、それがここで何が起こっているのかを教えてくれます。