Logstash 使用 CSV 文件输入解析日期错误

问题描述 投票:0回答:1

希望有人可以帮助我解决以下问题:

我有 Logstash conf 设置来使用 csv 输入插件。数据输入一个日期字段,其值如下......

2024-01-09 22:21:04

然后我在过滤器插件中使用这个逻辑来处理日期......

  date {
    match => ["cart_received_timestamp", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]
    target => "@timestamp"
  }

我收到以下错误(我在索引中使用 strict 来拒绝无效数据)。输入日期-

2024-01-09 22:21:04

...以及指数预期-

yyyy-MM-dd HH:mm:ss||yyyy-MM-dd'T'HH:mm:ss.SSS'Z'

…是一样的。

logstash 似乎将我的日期转换为以下格式:

'2024-01-09T22:21:04.567414642Z'

…导致错误,因为它与该字段所需格式的索引映射不匹配。

{"update"=>{"status"=>400, "error"=>{"type"=>"document_parsing_exception", "reason"=>"[1:539] failed to parse field [@timestamp] of type [date] in document with id 'punchout_cart_item_182439'. Preview of field's value: '2024-01-09T22:21:04.567414642Z'", "caused_by"=>{"type"=>"illegal_argument_exception", "reason"=>"failed to parse date field [2024-01-09T22:21:04.567414642Z] with format [yyyy-MM-dd HH:mm:ss||yyyy-MM-dd'T'HH:mm:ss.SSS'Z']", "caused_by"=>{"type"=>"date_time_parse_exception", "reason"=>"Failed to parse with all enclosed parsers"}

我尝试了对conf文件中的格式进行各种更改(例如ISO8601,添加转换选项以将字段更改为date_time,ChatGPT推荐了一些带有代码的ruby选项来更改日期格式......没有改变错误条件。

elasticsearch logstash
1个回答
0
投票

您的格式

yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
正在等待具有3毫秒字符的日期。

秒的小数部分 最大精度为毫秒 (SSS)。除此之外,还会附加零。

S:十分之一秒。示例:0 表示亚秒值 012 SS: 百分之一秒。示例:01 表示亚秒值 01 SSS: 千分之一秒。示例:012 表示亚秒值 012 https://www.elastic.co/guide/en/logstash/current/plugins-filters-date.html#plugins-filters-date-locale

您可以使用

strict_date_optional_time_nanos
作为时间戳格式。

严格日期可选时间纳米 通用 ISO 日期时间解析器是可选的,其中日期必须至少包含年份和时间(用 T 分隔)。第二部分的分数具有纳秒分辨率。

Examples: yyyy-MM-dd'T'HH:mm:ss.SSSSSSZ or yyyy-MM-dd.

您可以在此处查看logstash日期过滤器插件详细信息。

PUT test_date4
{
  "mappings": {
    "properties": {
      "@timestamp": {
        "type": "date",
        "format": "strict_date_optional_time_nanos"
      }
    }
  }
}

PUT test_date4/_doc/1
{
  "@timestamp": "2024-01-09T22:21:04.567414642"
}

GET test_date4/_search
© www.soinside.com 2019 - 2024. All rights reserved.