2015-02-27 1 views
0

У меня есть файл, содержащий серию таких сообщений:logstash генерировать @timestamp из разобранного сообщения

component+branch.job         2014-09-04_21:24:46 2014-09-04_21:24:49 

Это строка, некоторые пробелы, первая дата и время, некоторые пробелы и второй даты и времени. В настоящее время я использую такой фильтр:

filter { 
    grok { 
    match => [ "message", "%{WORD:componentName}\+%{WORD:branchName}\.%{WORD:jobType}\s+20%{DATE:dateStart}_%{TIME:timeStart}\s+20%{DATE:dateStop}_%{TIME:timeStop}" ] 
    } 
} 

Я хотел бы преобразовать dateStart и timeStart в @timestamp для этого сообщения.

Я нашел, что есть фильтр date, но я не знаю, как его использовать на двух отдельных полях.

Я также пытался что-то вроде этого, как фильтр:

date { 
    match => [ "message", "YYYY-MM-dd_HH:mm:ss" ] 
    } 

, но он не работал, как ожидалось.

+0

дубликата http://stackoverflow.com/questions/28879131/how-to-generate-timestamp-in-logstash-by-combining-two-fields -columns-оф-inpu. –

ответ

1

На основе дубликата, предложенного Магнусом Бэком, я создал решение для своей проблемы. Решение было мутировать проанализированные данные в одно поле:

mutate { 
    add_field => {"tmp_start_timestamp" => "20%{dateStart}_%{timeStart}"} 
} 

, а затем разобрать его, как я предложил в моем вопросе.

Так окончательное решение выглядит следующим образом:

filter { 
    grok { 
    match => [ "message", "%{WORD:componentName}\+%{WORD:branchName}\.%{DATA:jobType}\s+20%{DATE:dateStart}_%{TIME:timeStart}\s+20%{DATE:dateStop}_%{TIME:timeStop}" ] 
    } 
    mutate { 
    add_field => {"tmp_start_timestamp" => "20%{dateStart}_%{timeStart}"} 
    } 
    date { 
    match => [ "tmp_start_timestamp", "YYYY-MM-dd_HH:mm:ss" ] 
    } 
}