web-dev-qa-db-ja.com

電子メール出力用にlogstashを構成する際の問題

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内の処理を認識していること、およびそこに電子メールプラグインコマンドがあることを確認できる限り、機能しているようですが、一致は失敗します。

ありがとう

1
user2099762

最初に[program]を解析する必要はありませんか? 'input'フィールドはいかなる種類のフィルタリングも行わないと思うので、%SYSLOGBASEhttp://logstash.net/docs/1.4.1/filters/)から始める必要があるかもしれません。 grok

代わりに、おそらく次のことを試すことができます。

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

messageフィールドに一致するキーワードはどれですか。それは少なくとも、それここで何が起こっているのかを教えてくれます。

1
Sobrique

email 出力はmatch関数をサポートしていません。代わりに、あなたができることは、成功したgrokマッチに add_tag し、定義したタグに応じて特定の電子メールのみを送信するように電子メール出力の周りに条件を設定することです。

0
Rumbles