"从字段解析-6ren">
gpt4 book ai didi

elasticsearch - logstash/elasticsearch 无法解析日期字段尝试了日期格式 [dateOptionalTime] 和带有语言环境的时间戳编号

转载 作者:行者123 更新时间:2023-12-03 01:55:49 25 4
gpt4 key购买 nike

由于某种原因,logstash(1.5 版)无法处理带有此异常的日志:

{:timestamp=>"2016-04-26T09:20:12.141000-0400", :message=>"从字段解析日期失败", :field=>"时间", :value=>"2016-04-26T09: 20:03.520-04:00", :exception=>java.lang.IllegalArgumentException: 无效格式: "2016-04-26T09:20:03.520-04:00"在 "T09:20:03.520-04:00"格式错误", :level=>:warn}

我在 json 中的时间字段是:

"time":"25-04-2016 04:21:06.786"

我的logstash配置是:
filter {

if [type] == "json" {
json {
source => "message"
}
date {
match => [ "time", "dd-MM-yyyy HH:mm:ss", "dd-MM-yyyy HH:mm:ss:SSS", "dd-MM-yyyy HH:mm:ss.SSS", "yyyy-MM-dd HH:mm:ss,SSS" ]
}
}
}

在 Elasticsearch 方面,我看到了这个异常:

无法解析日期字段 [25-04-2016 04:48:14.305],尝试了日期格式 [dateOptionalTime] 和带语言环境的时间戳编号 []
java.lang.IllegalArgumentException:无效格式:“25-04-2016 04:48:14.305”在“16 04:48:14.305”处格式错误

我该如何解决?

最佳答案

我有同样的问题; Logstash 会很高兴地完成它的工作,但是 Elasticsearch 会提示同样的错误。您可以看到使用正确的变量生成了“@timestamp”。关键是要理解这种错误是它说如下内容的地方:

[2020-07-22 12:27:40,814][DEBUG][action.bulk              ] [logs-p03] [logstash-2020.07.22][0] failed to execute bulk item (index) index {[logstash-2020.07.22][logs] ... org.elasticsearch.index.mapper.MapperParsingException: failed to parse [shibidp_timestamp]
...
Caused by: org.elasticsearch.index.mapper.MapperParsingException: failed to parse date field [20200722T002739Z], tried both date format [dateOptionalTime], and timestamp number with locale []
...
Caused by: java.lang.IllegalArgumentException: Invalid format: "20200722T002739Z" is malformed at "2739Z"
这表明映射很困惑......让我们看看:
GET http://127.0.0.1:9200/logstash-2020.07.22/_mapping
...
"shibidp_severity" : {
"type" : "string",
"index" : "not_analyzed",
"fields" : {
"raw" : {
"type" : "string",
"index" : "not_analyzed",
"ignore_above" : 256
}
}
},
"shibidp_timestamp" : {
"type" : "date",
"format" : "dateOptionalTime"
},
...
我包括 shibidp_severity 只是为了展示大多数(字符串)是如何映射的。该模板不包含任何与 shibidp_timestamp 匹配的内容,或任何其他被映射为“日期”类型且格式为:“dateOptionalTime”的字段
映射到此的字段(查看 GET http://127.0.0.1:9200/logstash-2020.07.22/_mapping )
  • @时间戳
  • 日期
  • shibidp_timestamp

  • 此行为似乎与动态日期检测有关
    https://www.elastic.co/guide/en/elasticsearch/reference/current/dynamic-field-mapping.html
    https://www.elastic.co/guide/en/elasticsearch/reference/1.7/mapping-dynamic-mapping.html
    在我的例子中,这种动态映射导致了一些竞争条件(遇到的第一个 'shibidp_timestamp' 值通知了当天索引的映射。让我们看看区别:
    $ (d="2020.07.18"; curl -s http://127.0.0.1:9200/logstash-$d/_mapping | jq -c '.["logstash-'$d'"].mappings.logs.properties.shibidp_timestamp')
    {"fields":{"raw":{"ignore_above":256,"index":"not_analyzed","type":"string"}},"index":"not_analyzed","type":"string"}

    $ (d="2020.07.19"; curl -s http://127.0.0.1:9200/logstash-$d/_mapping | jq -c '.["logstash-'$d'"].mappings.logs.properties.shibidp_timestamp')
    {"format":"dateOptionalTime","type":"date"}
    这显示了 shibidp_timestamp 在两个不同的每日索引中的映射。前者是我们遇到看起来像字符串的东西时得到的;后者是当它看起来像时间戳时我们得到的(但无法解析为时间戳)
    你可以做一些事情来解决这个问题:
  • 使用 logstash 从 logstash 发送的传入 JSON 中删除 shibidp_timestamp(如果您已经使用 logstash 'date' 插件将其转换为 @timestamp 字段,这可能很有用)。这将立即生效。
  • 更改映射(模板),使 shibidp_timestamp 显式映射到字符串,然后等待明天的索引开始(或删除今天的索引)
  • 将“basic_date_time_no_millis”(匹配 20200722T002739Z)包含到“default”。“dynamic_date_formats”列表(也应用于索引创建)https://www.elastic.co/guide/en/elasticsearch/reference/1.6/mapping-dynamic-mapping.html
  • 关于elasticsearch - logstash/elasticsearch 无法解析日期字段尝试了日期格式 [dateOptionalTime] 和带有语言环境的时间戳编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36867049/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com