2014-06-24 19 views
5

Mam wiersz w moich plikach dziennika, które dosłownie mają po prostu w nich średnik. Zakładam, że jest on dołączony do poprzedniej linii. Logstash nieustannie je drukuje, a ja chcę je upuścić, gdy tylko pojawi się linia zaczynająca się od;.Jak usunąć wydarzenie z logstash?

To co logstash wydruki:

"message" => ";/r" 
"@version" => "1" 
"@timestamp" => 2014-06-24T15:39:00.655Z," 
"type" => "BCM_Core", 
"host => XXXXXXXXXXX", 
"Path => XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 
"tags" => [ 
[0] "_grokparsefailureZ" 
], 
"BCM_UTC_TIME" =>"2014-06-24%{time}Z" 

Mam próbował użyć multilinii do dołączania do poprzedniej linii tak logstash zatrzyma drukowanie:

multiline{ 
    type => "BCM_Core" 
    pattern => "\;" 
    negate => true 
    what => "previous" 
} 

ale logstash nadal drukuje je. Jak sprawić, aby logstash go upuścił?

Odpowiedz

12

Wystarczy użyć filtru kropla spadnie dowolny wiersz rozpoczynający się ;:

filter { 
    if ([message] =~ "^;") { 
     drop {} 
    } 
} 

Choć oparty na wyjściu, to naprawdę ;/r nie ;\r, więc może trzeba dostosować, jeśli wyjście jest nie tylko przykład.

Można też po prostu upuścić niczego, którego nie można grok:

if "_grokparsefailure" in [tags] { drop {} } 
+0

dlaczego jest ono/^; $ /? Czy nie powinno to być po prostu/;? I tak, moje wyjście było "; \ r", więc do czego powinienem użyć filtru? – simhuang

+0

Końcówka $ dopasowuje koniec linii (tak w zasadzie mówi się tylko ignorować linie za pomocą a, aby uniknąć możliwości upuszczenia zbyt wiele). Prawdopodobnie po prostu zrobiłbyś/^;/- więc wszystko zaczynasz od; ... i oops, moja składnia jest błędna dla logstash. Naprawiono – Alcanzar

+0

działa! Dzięki za pomoc! – simhuang