2017-01-24 10 views
0

Ich verwende Logstash mit Eingabe-Elasticsearch und Ausgabe-Elasticsearch.Both Elastic Search haben eine andere Instanz. Bevor die Daten zum Ausgabeblock gelangen, möchte ich einige Dokumente aggregieren, einen Hash des neuen Dokuments erstellen und das verschachtelte Dokument in die elastische Suche einfügen. Also im Grunde möchte ich etwas verarbeiten, bevor verschachteltes Dokument in die Elasticsearch eingefügt wird. Ist das möglich?Aggregation in Logstash-ElasticSearch

input{ 
    # something here to get a value of variable stored in a different file 
    elasticsearch{ 
    hosts=>"abc.de.fg.hi:jklm" 
    query=>'{--some query---}' 
    } 
    } 
    output{ 

    elasticsearch{ 
    hosts=>"xxx.xx.xx.xx:yyyy" 

    } 
+0

Leider gibt es derzeit keine Möglichkeit, Aggregationen innerhalb von Logstash auszuführen. Für das, was es wert ist, gibt es ein Plugin, an dem ich gearbeitet habe, das tut das, aber ich habe es noch nicht veröffentlicht. Ich werde diesen Thread aktualisieren, wenn etwas läuft. Vielleicht möchten Sie in der Zwischenzeit in den [aggregate' Filter] (https://www.elastic.co/guide/en/logstash/current/plugin-filters-aggregate.html) schauen, der den Trick machen könnte. – Val

+0

keine Nachrichten wie Aggregation zu verwenden – hudi

Antwort

2

ich das „Aggregat“ Plug in bin mit.

In meinem Fall ist die Eingabe von UDP und ich es Filter mit „grok“ aber ich glaube, man kann erreichen, was Sie tun wollen, indem den Code etwas optimieren.

Ohne eine Probe Sie versuchen, genau das zu erreichen, die am besten das ich Ihnen zeigen, tun können, um eine Probe von meinem Code ist:

aggregate { 
    task_id => “%{action}_%{progress}” 
    code => 
    “ 
    map[‘avg’] || = 0; 
    map[‘avg’] += event.get(‘elapsed’); 
    map[‘my_count’] || = 0; 
    map[‘my_count’] += 1; 

    if (map[‘my_count’] == ${LogstashAggregationCount})#Environment variable 
     event.set(‘elapsedAvg’, (map[‘avg’]/map[‘my_count’])) 
     event.set(‘Aggregetion’, true) 
     map[‘avg’] = 0 
     map[‘my_count’] = 0 
    end 
    “ 
}  
if (![Aggregetion]) { 
    drop {} 
} 

Fluch Sie es zu Ihrem speziellen Fall anpassen müssen. Weitere Informationen zu meinem Code finden Sie hier: How to Use Logstash Aggregations