2013-12-17 9 views
12

Szukasz małej pomocy w rozpoczęciu pracy ... Mam zainstalowany Logstash (tak samo jak ElasticSearch), ale zmagam się z moim pierwszym filtrem.Pierwsze kroki z filtrami Logstash

Jako test mam go skonfigurować do odczytu z przybraniem pliku dziennika, który zawiera 6 linii, każda linia zaczyna się znacznik czasu, takich jak [05.11.13 4: 09: 21: 327 PST] następnie przez kilka innych danych.

Na razie mam plik conf ustawiony na czytanie tego pliku i próbuję zrobić bardzo prosty filtr grok, aby dopasować linie, może pobrać znacznik czasu, a następnie resztę danych (skąd mogę zacznij dzielić go).

Oto co mam:

input { 
    file { 
    type => "chris" 
    path => "/home/chris/Documents/test.log" 
    } 
} 
filter { 
    grok { 
    type => "chris" 
    pattern => "%{GREEDYDATA:logline}" 
    } 
} 
output { 
    stdout {debug => true debug_format => "json"} 
} 

Miałam oczekując (nadzieję), że kiedy wpadłem Logstash że to pasuje do każdego wiersza i wyjście, a potem mogę zacząć łamanie linii w dół i filtrowanie moje dostosowanie schematu, ale ponieważ nie mogę uzyskać tego pierwszego podstawowego kawałka do pracy, jestem trochę zakłopotany.

Czy ktoś ma podobny plik conf, który może być udostępniony? Większość przykładów, które mogę znaleźć, jest bardziej zaawansowana i wydaje mi się, że utknąłem próbując wydostać się z bramy.

Dzięki,

Chris.

+0

Którą wersję programu Logstash już masz? [Grok] (http://logstash.net/docs/1.3.1/filters/grok) nie ma parametru "wzorca" od wersji 1.2. – rutter

Odpowiedz

12

Rozpocznij usuwanie zawartości filtra.

Docs dla aktualnej wersji (1.3.2) z logstash wtyczki filtra grok tutaj http://logstash.net/docs/1.3.2/filters/grok

Zapewnienie szukasz w poprawnej wersji docs dla wersji logstash pobrałeś.

An przykład filtr Grok byłoby:

filter { 
    grok { 
    match => [ "message", "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" ] 
    } 
} 

Ale to jest mało prawdopodobne, aby dopasować swoje dane.

"wiadomość" to domyślne pole, w którym znajduje się cały twój dziennik, więc jest to prawdopodobnie dobry wybór również dla Ciebie.

Następna część tworzy 5 nowych pól, klienta, metodę, żądanie, bajty i czas trwania, czytając loglinę i pasujące części z predefiniowanymi wzorami Grok, takimi jak IP, WORD itp. To trzeba zmienić.

Zacznij od

filter { 
    grok { 
    match => [ "message", "%{GREEDYDATA:logline}" ] 
    } 
} 

które faktycznie tylko powielać pola wiadomości w oddzielnym polu logline, ale jest gdzieś zacząć. W miarę dodawania do filtra kolejnych wzorców Grok, pole logline będzie zawierało tylko cokolwiek, co nie jest grokowane.

można przetestować swoje wzorce Grok tutaj http://grokdebug.herokuapp.com/

Najprawdopodobniej chcesz użyć filtru Grok grok się znacznik czasu w jego własnym polu, a następnie użyć filtru daty, aby faktycznie użyć go jako timestamp logs .

filter { 
    grok { 
    match => [ "message", "%{TIMESTAMP_ISO8601:syslog_timestamp} %{GREEDYDATA:syslog5424_msg}" ] 
    } 
    date { 
    match => [ "syslog_timestamp", "ISO8601" ] 
    } 
} 

TIMESTAMP_ISO8601 dopasowuje znaczniki czasu w formacie bardzo gadatliwym (http://grokdebug.herokuapp.com/patterns#), to nie może pracować dla Ciebie.

ISO8601 to ten sam format, który został wcześniej zdefiniowany dla filtru daty. Zamiast tego konieczne może być ręczne określenie formatu daty. Zobacz dokumenty: http://logstash.net/docs/1.3.2/filters/date