2015-04-01 16 views
6

Sto riempiendo i miei registri in Elasticsearch. Così, per la creazione di un indice in base alla data di registro nel suo timestamp, io uso date filtro come questo:Timestamp Syslog senza anno?

date { 
       "locale" => "en" 
       match => ["timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss", "ISO8601"] 
       target => "@timestamp" 
     } 

Sto usando i log di syslog, e il formato syslog timestamp non fai avere l'anno:

# Syslog Dates: Month Day HH:MM:SS 
SYSLOGTIMESTAMP %{MONTH} +%{MONTHDAY} %{TIME} 

Così dopo aver usato il filtro data, l'indice creato è come logstash-2015.12.26 se sto leggendo un log del 26 dicembre 2014. Quindi dal momento che il timestamp non è disponibile nel log, sta selezionando l'anno corrente per impostazione predefinita.

Qualche idea su come creare l'indice corretto?

risposta

7

Assenza di un anno nella stringa analizzata da Joda Time, Logstash al momento è impostato per l'anno in cui è stato avviato il processo Logstash. Vedi github.com/logstash-plugins/logstash-filter-date bug #3. Come soluzione temporanea, aggiungi un filtro temporaneo per aggiungere l'anno corretto (2014) alla fine del campo data/ora e regola il tuo modello date filter per includere YYYY.

filter { 
    mutate { 
    replace => ["timestamp", "%{timestamp} 2014"] 
    } 
    date { 
    locale => "en" 
    match => ["timestamp", 
       "MMM d HH:mm:ss YYYY", 
       "MMM dd HH:mm:ss YYYY", 
       "ISO8601"] 
    } 
} 
+1

Quindi, tranne il codice difficile temporanea, ci non c'è qualche soluzione? –

+0

Non credo che ci sia, no. Bene, tranne il reset del tempo sulla macchina su cui si esegue Logstash, ma sarebbe una pessima idea. –

0

Se i file di log che si sta caricando avere l'anno nel nome del file, è possibile estrarre utilizzando un filtro di Grok, creare un nuovo campo che ha la data che hai tirato dal syslog più l'anno dalla nome del file.

Un esempio di come estrarre la data/ora dal nome del file può essere trovato qui: Logstash: How to use date/time in a filename as an imported field

1

È possibile convertire la stringa di data per un formato di data per mezzo del filtro data. Per impostazione predefinita, quando si utilizza il filtro data, la data (o data/ora) del log sovrascriverà @timestamp. Quindi, nel tuo filtro non hai bisogno di destinazione. Lo usi solo se vuoi convertire una stringa variabile fino ad oggi.

Esempio: match => [ "timestamp", "MMM d hh: mm: ss", "MMM GG HH: mm: ss", "ISO8601"]