2013-06-26 22 views
6

Mam nadzieję, że ktoś może mi pomóc!Konwersja daty Logstash na ważny czas joda (@timestamp)

Mam pytanie dotyczące logstash. Grok następującą datę z sukcesem: 26/Jun/2013: 14: 00: 26 +0200

Następnie chcę, aby ta data była używana jako @timestamp zdarzenia. Jak wiesz, logstash automatycznie dodaje znacznik czasu.

Zastąpienie znacznika czasu, który dodaje logstash, można wykonać za pomocą filtru daty. Dodałem następujący filtr daty: dopasowanie => ["data", "dd/MMM/YYYY: HH: mm: ss Z"]

Ale z jakiegoś powodu to nie działa. Kiedy testuję to, widzę, że logstash po prostu dodaje swój własny znacznik czasu.

Kod:

grok { 
    type => "log-date" 
    pattern => "%{HTTPDATE:date}" 
} 

date{ 
    type => "log-date" 
    match => [ "date", "dd/MMM/YYYY:HH:mm:ss Z"] 
} 

muszę to zrobić, więc mogę dodawać wydarzenia do elasticsearch.

Z góry dziękuję!

+0

Próbowałem skontaktować się z ludźmi za pośrednictwem kanału IRC i jak dotąd nikt nie mógł mi pomóc. Myślę, że to błąd. –

Odpowiedz

8

użyłem następujące podejście:

# strip the timestamp and force event timestamp to be the same. 
# the original string is saved in field %{log_timestamp}. 
# the original logstash input timestamp is saved in field %{event_timestamp}. 
grok { 
    patterns_dir => "./patterns" 
    match => [ "message", "%{IRODS_TIMESTAMP:log_timestamp}" ] 
    add_tag => "got_syslog_timestamp" 
    add_field => [ "event_timestamp", "%{@timestamp}" ] 
} 

date { 
    match => [ "log_timestamp", "MMM dd HH:mm:ss" ] 
} 

mutate { 
     replace => [ "@timestamp", "%{log_timestamp}" ] 
} 

Mój problem teraz jest to, że nawet jeśli @timestamp otrzymuje chciałbym ją przekonwertować do formatu ISO8601 zgodny najpierw tak, że inne programy nie robić mają problemy interpretowania go, jak znacznika czasu obecnego w „event_timestamp”:

 "@timestamp" => "Mar 5 14:38:40", 
     "@version" => "1", 
      "type" => "irods.relog", 
      "host" => "ids-dev", 
      "path" => "/root/logstash/reLog.2013.03.01", 
      "pid" => "5229", 
      "level" => "NOTICE", 
    "log_timestamp" => "Mar 5 14:38:40", 
"event_timestamp" => "2013-09-17 12:20:28 UTC", 
      "tags" => [ 
    [0] "got_syslog_timestamp" 
] 

można ją łatwo przekształcić skoro masz informacje letnią ... w moim przypadku będę musiał przeanalizować ją z „ścieżka” Atrybut (filename) ... ale nadal nie ma pliku convert_t o_iso8901 => dyrektywa @timestamp.

Mam nadzieję, że pomoże to w rozwiązaniu Twojego problemu! :)

+0

Właśnie rozwiązałem problem z ścieżką z dodatkowym grokiem: 'grok { match => [" ścieżka ","% {YEAR: log_year} "]}' – brainstorm

+0

Więcej wskazówek na ten konkretny przykład tutaj: https: // gist .github.com/brainstorm/6552989 – brainstorm

+0

Kontynuacja tego tematu na liście dyskusyjnej logstash: https://groups.google.com/forum/#!topic/logstash-users/4GRVY9UJEU4 – brainstorm

5

Powyższa odpowiedź jest po prostu pracą dookoła!, Spróbuj dodać locale => "en" do kodu.
Jeśli nie zostanie dodana, data w dni robocze i miesiące zostanie przeanalizowana z domyślnym językiem lokalizacji platformy (hiszpańskim, francuskim lub czymkolwiek) i dlatego nie zadziałała (ponieważ dziennik jest w języku angielskim).

date{ 
    type => "log-date" 
    match => [ "date", "dd/MMM/YYYY:HH:mm:ss Z"] 
    locale => "en" 
} 
+0

Zgadzam się. Wystąpiły błędy podczas analizowania daty. Moja zmienna środowiskowa 'LANG' została ustawiona na' fr_CA.UTF-8' Dodając 'locale =>" en "' enabled logstash, aby poprawnie analizować logi wysłane z systemu z datą sformatowaną w języku angielskim. – qux

Powiązane problemy