希望有人可以帮助我解决以下问题:
我有 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选项来更改日期格式......没有改变错误条件。
您的格式
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