2017-02-16 6 views
0

Ich verwende den Elasticsearch-Filter in meiner Logstash-Pipeline. Ich finde richtig das Ergebnis mit:mit Elasticsearch Filter in Logstash-Pipeline

filter{ 
    if [class] == "DPAPIINTERNAL" { 
    elasticsearch { 
     hosts => "10.1.10.16" 
     index => "dp_audit-2017.02.16" 
     query_template => "/home/vittorio/Documents/elastic-queries/matching-requestaw.json" 
    } 
    } 
} 

wie Sie sehen können, Im „query_template“ verwendet, die ist:

{ 
    "query": { 
     "query_string": { 
     "query": "class:DPAPI AND request.aw:%{[aw]}" 
     } 
    }, 
    "_source": ["end_point", "vittorio"] 
} 

die elastichsearch nachzuschlagen das Protokoll mit dieser bestimmten Klasse sagt, die „aw "mit dem DPAPIINTERNAL-Protokoll.

Perfekt! Aber jetzt, da ich das Ergebnis gefunden habe, möchte ich ein Feld daraus hinzufügen und sie an mein DPAPIINTERNAL-Protokoll anhängen, zum Beispiel möchte ich "end_point" nehmen und es in den neuen Schlüssel "vittorio" in meinem Protokoll einfügen.

Das passiert nicht und ich verstehe nicht warum.

hier ist das Protokoll, das ich mit der Abfrage der Suche bin:

{ 
    "took": 1, 
    "timed_out": false, 
    "_shards": { 
    "total": 5, 
    "successful": 5, 
    "failed": 0 
    }, 
    "hits": { 
    "total": 1, 
    "max_score": 1, 
    "hits": [ 
     { 
     "_index": "dp_audit-2017.02.16", 
     "_type": "logs", 
     "_id": "AVpHoPHPuEPlW12Qu", 
     "_score": 1, 
     "_source": { 
      "svc": "dp-1.1", 
      "request": { 
      "method": "POST|PATCH|DELETE", 
      "aw": "prova", 
      "end_point": "/bank/6311", 
      "app_instance": "7D1-D233-87E1-913" 
      }, 
      "path": "/home/vittorio/Documents/dpapi1.json", 
      "@timestamp": "2017-02-16T15:53:33.214Z", 
      "@version": "1", 
      "host": "Vito", 
      "event": "bank.add", 
      "class": "DPAPI", 
      "ts": "2017-01-16T19:20:30.125+01:00" 
     } 
     } 
    ] 
    } 
} 

Antwort

0

Ihre Notwendigkeit, die fields parameter in Ihrem elasticsearch Filter zu spezifizieren, wie folgt aus:

elasticsearch { 
    hosts => "10.1.10.16" 
    index => "dp_audit-2017.02.16" 
    query_template => "/home/vittorio/Documents/elastic-queries/matching-requestaw.json" 
    fields => { "[request][end_point]" => "vittorio" } 
} 

Beachten Sie, dass seit end_point ist ein verschachteltes Feld, Sie müssen die _source in Ihrer Abfrage Vorlage wie folgt ändern:

"_source": ["request.end_point"] 
+0

Ich habe die Felder in der Datei query_template angegeben: "_source": ["end_point", "vittorio"] – ennon

+0

In der Vorlage geben Sie die Felder an, die Sie bei Ihrer Suche abrufen möchten, aber in 'fields' Sie ordnen diese Felder Ihrem Ereignis zu. – Val

+0

Ich habe gerade, ich habe null Wert in meinem neuen Feld. :( – ennon

0

Das Problem besteht einfach darin, dass Sie das Feld "new" nicht mit dem query_template angeben müssen.

"_source": ["request"] # here you specify the field you want from the query result. 

und dann

filter{ 
    if [class] == "DPAPIINTERNAL" { 
    elasticsearch { 
     hosts => "10.1.10.16" 
     index => "dp_audit-2017.02.16" 
     query_template => "/home/vittorio/Documents/elastic-queries/matching-requestaw.json" 
     fields => {"request" => "new_key"} # here you add the fields and will tell elastich filter to put request inside new_key 
    } 
    } 
} 

die für mich gearbeitet!

Verwandte Themen