gpt4 book ai didi

elasticsearch - Logstash/ Elasticsearch : guesses wrong for datatype for field

转载 作者:行者123 更新时间:2023-11-29 02:48:06 24 4
gpt4 key购买 nike

我尝试导入到 Logstash 中的日志文件包含一个字段,该字段有时看起来像日期/时间,有时又不像。不幸的是,第一次出现看起来像日期/时间,有人(logstash 或 elasticsearch)决定将该字段定义为日期/时间。 Elasticsearch尝试导入后面的日志记录时出现异常:

Failed to execute [index ...]  
org.elasticsearch.index.mapper.MapperParsingException: Failed to parse [@fields.field99]
at org.elasticsearch.index.mapper.core.AbstractFieldMapper.parse(AbstractFieldMapper.java:320)
at org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue(ObjectMapper.java:587)
...
Caused by: java.lang.IllegalArgumentException: Invalid format: "empty"
at org.elasticsearch.common.joda.time.format.DateTimeFormatter.parseMillis(DateTimeFormatter.java:747)
...

问题:如何告诉 logstash/elasticsearch 不要将此字段定义为日期/时间?我希望我的日志中的所有字段(除了一个明确的时间戳字段)都被定义为纯文本。

问题:在看到 elasticsearch 抛出异常后,logstash 似乎放弃了从日志文件中导入记录的尝试。我如何告诉 logstash 忽略此异常并继续尝试从日志文件中导入其他记录?

最佳答案

我自己找到了第一个问题的答案。

在通过 Logstash 添加数据之前,我必须设置 Elasticsearch 的默认值以将字段视为“字符串”而不是“日期”。

我通过创建一个 defaults.js 文件来做到这一点:

{  
"template": "logstash-*",
"mappings": {
`"_default_"`: {
"dynamic_templates": [{
"fields_template": {
"mapping": { "type": "string" },
"path_match": "@fields.*"
}
}]
}
}
}

并告诉 Elasticsearch 在通过 Logstash 添加任何数据之前使用它:

curl -XPUT 'http://localhost:9200/_template/template_logstash/' -d @defaults_for_elasticsearch.js

希望这对其他人有帮助。

关于elasticsearch - Logstash/ Elasticsearch : guesses wrong for datatype for field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15750749/

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