2013-06-26 11 views
6

Spero che qualcuno possa darmi una mano!Data di conversione del logstash in tempo joda valido (@timestamp)

Ho una domanda su logstash. Concludo la seguente data: 26/Giu/2013: 14: 00: 26 +0200

Successivamente, voglio che questa data venga utilizzata come @timestamp dell'evento. Come sai, logstash aggiunge automaticamente un timestamp.

Sostituzione del timestamp che l'aggiunta del logstash può essere eseguita dal filtro della data. Ho aggiunto il seguente filtro data: match => ["date", "gg/mmm/aaaa: HH: mm: ss Z"]

Ma, per qualche ragione, questo non funziona. Quando eseguo il test, vedo che il logstash aggiunge solo il proprio timestamp.

Codice:

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

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

ho bisogno di fare questo, quindi posso aggiungere eventi al elasticsearch.

Grazie in anticipo!

+0

Ho provato a contattare le persone tramite il canale IRC e per ora nessuno mi può aiutare. Penso che sia un bug. –

risposta

8

ho usato il seguente approccio:

# 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}" ] 
} 

Il mio problema ora è che, anche se @timestamp viene sostituito, vorrei convertirlo in un formato ISO8601 compatibile prima in modo che altri programmi non lo fanno hanno problemi di interpretarlo, come il timestamp presente in "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" 
] 

è possibile convertire facilmente dal momento che si dispone delle informazioni anno ... nel mio caso avrei dovuto analizzare fuori dal "percorso" (nome file) attributo ... ma ancora, non sembra essere un convert_t o_iso8901 => direttiva @timestamp.

Spero che questo aiuti con il problema comunque! :)

+0

Ho appena risolto il problema del tracciato con un extra grok: 'grok { match => [" path ","% {YEAR: log_year} "]}' – brainstorm

+0

Altri puntatori su questo particolare esempio qui sopra: https: // gist .github.com/brainstorm/6552989 – brainstorm

+0

Follow-up su questo argomento sulla mailing list logstash: https://groups.google.com/forum/#!topic/logstash-users/4GRVY9UJEU4 – brainstorm

5

La risposta sopra è solo una soluzione!, Prova ad aggiungere locale => "en" al tuo codice.
Se non viene aggiunto, i giorni della settimana e i nomi del mese verranno analizzati con la lingua della piattaforma predefinita (spagnolo, francese o altro) ed è per questo che non ha funzionato (poiché il registro è in inglese).

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

Accetto. Aveva errori di analisi della data. La mia variabile env 'LANG' era impostata su' fr_CA.UTF-8' Aggiungendo 'locale =>" en "' logstash abilitato per analizzare correttamente i log spediti dal sistema con data formattata in inglese. – qux

Problemi correlati