2016-11-11 7 views
0

ich ein benutzerdefiniertes Feld in Logstash Ereignisse habe als Ausdruck definiert:auswerten Feld als Ausdruck in Logstash filtern

{ "customIndex" => "my-service-%{+YYYY.MM}" } 

Und Filter, die Indexnamen für Elasticsearch Ausgabe-Plugin berechnet:

filter { 
    if [customIndex] { 
    mutate { 
     add_field => { "indexName" => "custom-%{customIndex}" } 
    } 
    } else { 
    mutate { 
     add_field => { "indexName" => "common-%{+YYYY.MM.dd}" } 
    } 
    } 
} 

Aber für benutzerdefinierte Index erstellt ungültig Name custom-my-service-%{+YYYY.MM} und bewertet nicht %{+YYYY.MM} Ausdruck.

Ist es möglich, Feld auszuwerten und custom-my-service-2016.11 zu erhalten?

Antwort

1

Wenn Sie Ihr erstelltes Feld diese umformatieren:

{ "customIndex" => "my-service-%Y.%m" } 

Dann ist dieser Ruby-Filter den Trick:

ruby { 
    init => "require 'date'" 
    code => "event['indexName'] = 'custom-' + Date.today.strftime(event['customIndex'])" 
} 

Here ist eine Dokumentation über Platzhalter können Sie verwenden.

+0

Ich habe kein Problem mit anderen Teil. Ich bin daran interessiert, wenn Teil. Auch wenn Ihr Vorschlag für mich nicht funktioniert, weil er ein Hardcode-Zeitmuster in Logstash-Ebene erfordert und es nicht flexibel macht. Mein Punkt ist es, Logstash flexibler zu machen und Datumsmuster als Einkommensteil zu erhalten. So verwendet eine Anwendung Index pro Stunde, ein anderes pro Tag etc. – moleksyuk

+0

@moleksyuk Aktualisierte die Antwort – Fairy

+0

Vielen Dank. Es funktioniert nicht perfekt. – moleksyuk