2017-07-17 8 views
1

ImはELK Stack + Filebeatに問題があります。Elasticsearch Logstash Filebeatマッピング

FilebeatはApacheのようなログをLogstashに送信しています。Logstashは、その行を解析する必要があります。 Elasticsearchは分割されたデータをフィールドに格納する必要があるので、私はKibanaを使用してそれらを視覚化できます。

問題: Elasticsearchはログを受信しますが、1つの「メッセージ」フィールドに格納します。

所望の解:

入力:

10.0.0.1 some.hostname.at - [27/6月/ 2017:23:59:59 +0200]

ES:

"IP": "10.0.0.1"

"ホスト名": "some.hostname.at"

"タイムスタンプ": "2/6月/ 2017年7:23:59:59 0200"

マイlogstash構成:

input { 

    beats { 
    port => 5044 
    } 



} 

filter { 


    if [type] == "web-apache" { 
     grok { 
      patterns_dir => ["./patterns"] 
      match => { "message" => "IP: %{IPV4:client_ip}, Hostname: %{HOSTNAME:hostname}, - \[timestamp: %{HTTPDATE:timestamp}\]" } 
      break_on_match => false 
      remove_field => [ "message" ] 
     } 

     date { 
      locale => "en" 
      timezone => "Europe/Vienna" 
      match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ] 
     } 

     useragent { 
      source => "agent" 
      prefix => "browser_" 
     } 
    } 

    } 

output { 

    stdout { 
     codec => rubydebug 
    } 

    elasticsearch { 
      hosts => ["localhost:9200"] 
     index => "test1" 
      document_type => "accessAPI" 
      } 
} 

マイElasticsearch発見出力:

The "message" field contains my whole log file私はどんなELKの専門家があります願っています

その周りに私を助けることができます。 ありがとうございました Matthias

答えて

1

あなたが言ったgrokフィルターはここでは機能しません。

は使用してみてください:フィールド名の前に別々に希望の名前を指定する必要は(あなたがここにメッセージをフォーマットしようとしていないが、別々のフィールドを抽出すること)はありません

%{IPV4:client_ip} %{HOSTNAME:hostname} - \[%{HTTPDATE:timestamp}\] 


、ちょうど':'の後に括弧で囲んでフィールド名を指定すると、必要な結果が得られます。

また、メッセージにはremove_fieldの代わりにoverwrite-functionを使用してください。ここ 詳細情報:
https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html#plugins-filters-grok-options

は、それが最後のものに似ています。ここ

filter { 
    grok { 
    match => { "message" => "%{IPV4:client_ip} %{HOSTNAME:hostname} - \[%{HTTPDATE:timestamp}\]" } 
    overwrite => [ "message" ] 
    } 
} 

あなたがテストすることができGROKフィルタ:
http://grokconstructor.appspot.com/do/match

関連する問題