0

Ich habe mehrere Log-Nachrichten in einer Datei, die ich mit Logstash-Filter-Plugins verarbeitet. Dann werden die gefilterten Protokolle an elasticsearch gesendet.Drop-Filter funktioniert nicht Logstash

Es gibt ein Feld namens addID in einer Protokollnachricht. Ich möchte alle Protokollnachrichten löschen, für die eine bestimmte addID vorhanden ist. Diese speziellen addIDS sind in einer ID.yml-Datei vorhanden.

Szenario: Wenn die addID einer Protokollnachricht mit einer der in der ID.yml-Datei vorhandenen addIDs übereinstimmt, sollte diese Protokollnachricht gelöscht werden.

Kann mir jemand dabei helfen?

Unten ist meine Konfigurationsdatei.

input { 


    file { 
    path => "/Users/jshaw/logs/access_logs.logs 
    ignore_older => 0 
    } 
} 

filter { 


    grok { 

     patterns_dir => ["/Users/jshaw/patterns"] 
     match => ["message", "%{TIMESTAMP:Timestamp}+{IP:ClientIP}+{URI:Uri}"] 

    } 


    kv{ 
     field_split => "&?" 
     include_keys => [ "addID" ] 
     allow_duplicate_values => "false" 

    } 

    if [addID] in "/Users/jshaw/addID.yml" { 
     drop{} 
    } 

} 

output { 

    elasticsearch{ 
     hosts => ["localhost:9200"] 

     } 
} 

Antwort

0

Sie verwenden den in-Operator falsch. Es wird verwendet, um zu prüfen, ob sich ein Wert in einem Array befindet und nicht in einer Datei, die normalerweise etwas komplizierter zu verwenden ist.

Eine Lösung wäre, den Ruby-Filter zu verwenden, um die Datei jedes Mal zu öffnen.
oder der ADDID Wert in der Konfigurationsdatei setzen, wie folgt aus:

if [addID] == "addID" { 
    drop{} 
} 
+0

Vielen Dank für die Antwort. Also, wenn ich Ruby-Filter dann wäre ich in der Lage, Log-Nachrichten, die eine bestimmte AddID haben ?? – User24

+0

@ User24 Ja. Cf [Dokumentation] (https://www.elastic.co/guide/en/logstash/current/plugin-filters-ruby.html) – baudsp

Verwandte Themen