elasticsearch Logstash/ElasticSearch:字段的数据类型猜测错误,elasticsearch,logstash,elasticsearch,Logstash" /> elasticsearch Logstash/ElasticSearch:字段的数据类型猜测错误,elasticsearch,logstash,elasticsearch,Logstash" />

elasticsearch Logstash/ElasticSearch:字段的数据类型猜测错误

elasticsearch Logstash/ElasticSearch:字段的数据类型猜测错误,elasticsearch,logstash,elasticsearch,Logstash,我试图导入到Logstash中的日志文件包含一个字段,该字段有时看起来像日期/时间,有时看起来不像。不幸的是,第一次出现看起来像是日期/时间,有人(logstash或elasticsearch)决定将该字段定义为日期/时间。尝试导入以后的日志记录时,Elasticsearch出现异常: Failed to execute [index ...] org.elasticsearch.index.mapper.MapperParsingException: Failed to parse [@f

我试图导入到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\u for\u elasticsearch.js


希望这对其他人有帮助。

就是这样!也许你可以把你的答案作为真实答案而不是问题本身,这是值得的。stackoverflow不会让我在提问后这么快就回答我自己的问题,因为我是一个名声不好的noob:在等待回答我自己的问题所需的时间后,我能够将答案移动到下面的正确答案。你不再是noob了,我对你的问题和答案都投了高票;)只需要详细说明一下:您使用提交索引模板。为什么?因为logstash创建多个索引,通常每天一个。所有与模式匹配的索引都将获得指定的映射。此外,您还使用了映射,以便所有类型都将获得指定的映射。在映射中,您使用了;)