问题 如何通过组合输入csv的两个字段/列来在logstash中生成@timestamp


我们在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


5351
2018-03-05 13:37


起源



答案:


用一个 变异过滤器 将OrderDate和BusinessMinute字段合并到一个(临时)字段中,然后使用 日期过滤器 并且如果成功则删除该字段。

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

14
2018-03-05 15:53



工作得很完美 - 非常感谢。 - Gopalakrishna Palem
当我使用此代码时,它会添加一个包含完全字符串“%{OrderDate}%{BusinessMinute}”的新字段;不是实际的领域。有什么建议么? - Antitribu
这表示您没有设置任何此类字段。如果您的日期和时间字段具有不同的名称,您显然必须在答案中调整示例。 - Magnus Bäck


答案:


用一个 变异过滤器 将OrderDate和BusinessMinute字段合并到一个(临时)字段中,然后使用 日期过滤器 并且如果成功则删除该字段。

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

14
2018-03-05 15:53



工作得很完美 - 非常感谢。 - Gopalakrishna Palem
当我使用此代码时,它会添加一个包含完全字符串“%{OrderDate}%{BusinessMinute}”的新字段;不是实际的领域。有什么建议么? - Antitribu
这表示您没有设置任何此类字段。如果您的日期和时间字段具有不同的名称,您显然必须在答案中调整示例。 - Magnus Bäck