Как сгенерировать @timestamp в logstash путем объединения двух полей/столбцов ввода csv

У нас есть данные, поступающие из внешних источников, как показано ниже в файле csv:

orderid,OrderDate,BusinessMinute,Quantity,Price
31874,01-01-2013,00:06,2,17.9

Данные имеют date в одном столбце и time в другом столбце - мне нужно создать метку времени, объединив эти два столбца вместе.

Я использую csv filter для чтения вышеуказанных данных из файла, используя следующую конфигурацию в logstash, которая генерирует собственную метку времени:

input {  
  file {
      path => "/root/data/import/Order.csv"
      start_position => "beginning"
  }
}
filter {
    csv {
        columns => ["orderid","OrderDate","BusinessMinute","Quantity","Price"]
        separator => ","
    } 
}
output {  
    elasticsearch {
        action => "index"
        host => "localhost"
        index => "demo"
        workers => 1
    }
}

Как сделать комбинацию OrderDate + Business Minute как @timestamp?

Ответ 1

Использовать фильтр mutate, чтобы объединить поля OrderDate и BusinessMinute в одно (временное) поле, а затем использовать дату фильтр и удалите поле, если оно выполнено успешно.

filter {
  mutate {
    add_field => {
      "timestamp" => "%{OrderDate} %{BusinessMinute}"
    }
  }
  date {
    match => ["timestamp", "..."]
    remove_field => ["timestamp"]
  }
}