2016-12-16 2 views
0

Ich benutze Dateibeat und ich möchte auch metricbeat einführen. Die Dateibeat-Ausgabe wird in logstash- * indiziert. Allerdings benötige ich einen anderen Index mit nur den Daten von metricbeat (z. B. metricbeat-test -% {+ YYYY.MM.dd}). Diese werden zusammen auf einem einzelnen Server ausgeführt.Elasticsearch mehrere Indizes pro Schläge?

Wie kann ich logstash anweisen, die Dateibeats in logstash- * zu indizieren und WENN es metricbeat ist, um weiterzugehen und einen anderen Index zu verwenden?

Mehr oder weniger brauche ich eine IF-Anweisung, aber ich bin mir nicht sicher, was ich dort aufnehmen sollte!

Meine logstash Config wie folgt aussieht:

Ausgang {Elasticsearch { Hosts => "10.0.0.5:9200" manage_template => "true" Index => „logstash-Test -% {+ YYYY.MM.DD}“ document_type => "apache" }}

Antwort

2

Wenn ein Schlag sendet Daten, die es Logstash den Zielindex zum [@metadata][beat] Feld hinzufügen. Standardmäßig setzt der Beat diesen Wert auf seinen eigenen Namen (z. B. Dateibeat). Wenn Sie den Wert anpassen möchten, können Sie die Konfigurationsoption output.logstash.index festlegen.

Um die Vorteile der Metadaten übernehmen, die Sie in allen Ereignissen von Beats kommen vorhanden ist, muss die Elasticsearch Ausgabe in Logstash wie folgt konfigurieren:

output { 
    if [@metadata][beat] { 
    elasticsearch { 
     hosts => "localhost:9200" 
     manage_template => false 
     index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" 
     document_type => "%{[@metadata][type]}" 
    } 
    } 
} 

Dies ist von den Beats documentation, wie sie mit Logstash verwenden. Ich habe die Bedingung hinzugefügt, damit diese Ausgabe nur für Ihre Beats-Daten verwendet wird. Sie würden eine andere Elasticsearch-Ausgabe für die anderen Daten konfigurieren, die durch die Pipeline kommen.

Schließlich, da Sie die filebeat-* und metricbeat-* Indizes verwenden, müssen Sie die bereitgestellten Indexvorlagen manuell installieren. Im Download-Paket ist für jeden Beat eine Indexvorlage enthalten. Es gibt eine Vorlage für Elasticsearch 2.x und 5.x, verwenden Sie die entsprechende Vorlage.

Sie installieren die Vorlage mit Curl (docs). Zum Beispiel

curl -XPUT 'http://localhost:9200/_template/filebeat' [email protected]/etc/filebeat/filebeat.template.json

+0

Ich tat, was Sie vorgeschlagen, aber es funktioniert nicht. Alles funktioniert gut bis zum letzten Schritt, der von logstash -> elasticsearch ist. Nichts wird indiziert und ich bin mir nicht sicher, warum Logstash überhaupt nicht mit elasticsearch spricht. Meine Topologie ist Dateibeat -> logstash -> redis -> logstash -> es .. alle Schritte bis zum letzten Logstash sind in Ordnung und funktionieren, aber elasticsearch erhält nichts – user3124171

+0

Sie haben Redis in Ihrer ursprünglichen Frage nicht erwähnt. Bei Redis dieser Schleife ist es wahrscheinlich, dass die '@ Metadaten' nicht enthalten sind, wenn man von Logstash -> Redis ausgeht, so dass die' [@metadata] [Beat] 'möglicherweise fehlt. Ich empfehle, 'output {stdout {codec => rubydebug}}' im letzten Logstash zu verwenden, um zu debuggen, was von Redis kommt. –

+0

Das Problem ist auf den Schlüsselwert auf der Redis-Eingabe von logstash. Ich weiß nicht, warum das nicht funktioniert, da meine Ausgabekonfig sieht wie folgt aus: 'redis { host => "172.21.0.2" port => "6379" schlüssel => "% {[@metadaten] [beat]}" data_type => "list" 'das ist in Ordnung, aber wenn ich' key => "% {[@ metadata] [beat]}" 'wie in redis-eingabe es funktioniert nicht ... Ich habe keine Ahnung, was los ist hier lol – user3124171

Verwandte Themen