elasticsearch 使用bunyan/logstash/elasticsearch记录请求时出现MapperParsingException,elasticsearch,logstash,kibana,restify,bunyan,elasticsearch,Logstash,Kibana,Restify,Bunyan" /> elasticsearch 使用bunyan/logstash/elasticsearch记录请求时出现MapperParsingException,elasticsearch,logstash,kibana,restify,bunyan,elasticsearch,Logstash,Kibana,Restify,Bunyan" />

elasticsearch 使用bunyan/logstash/elasticsearch记录请求时出现MapperParsingException

elasticsearch 使用bunyan/logstash/elasticsearch记录请求时出现MapperParsingException,elasticsearch,logstash,kibana,restify,bunyan,elasticsearch,Logstash,Kibana,Restify,Bunyan,我们正在使用Logstash和Bunyan在ElasticSearch中记录Restify请求。但是,当在日志记录中包含JSON主体时,索引会发生冲突,因为具有相同名称的字段有时具有不同的类型 例如,req.body有时是字符串,有时是对象。我们一直通过将body设置为对象来解决这个问题(因为我们的restifyapi不应该接收任何有效请求的字符串) 但是,对于body对象中的字段,问题不断出现。我们无法真正控制客户机发送的内容,如果请求包含一个字符串,其中需要一个数字,则elasticsear

我们正在使用Logstash和Bunyan在ElasticSearch中记录Restify请求。但是,当在日志记录中包含JSON主体时,索引会发生冲突,因为具有相同名称的字段有时具有不同的类型

例如,req.body有时是字符串,有时是对象。我们一直通过将body设置为对象来解决这个问题(因为我们的restifyapi不应该接收任何有效请求的字符串)

但是,对于body对象中的字段,问题不断出现。我们无法真正控制客户机发送的内容,如果请求包含一个字符串,其中需要一个数字,则elasticsearch索引已将该字段键入数字


除了检查并可能替换正文中张贴的每个字段外,是否有其他方法可以持续修复此问题?在记录之前将主体从对象转换为字符串是可行的,但这将严重降低其在Kibana中进行可视化时的可用性。

如果字段需要同时包含字符串或数字,则必须将其定义为字符串。否则,当出现不匹配时,elasticsearch将很乐意放弃该事件

Elastic计划在logstash中添加一个“死信”函数,这样就可以将字段保留为一个数字,并将作为字符串出现的任何事件定向到那里,而不是elasticsearch


为了防止elasticsearch根据收到的第一个数据将字段设置为数字,您可能需要禁用动态映射或设置模板以更好地帮助映射。

问题是我必须预定义每个可能更改类型的字段?如果幸运的话,字段名是否有模式?(所有“foo_”都应该是int?)不幸的是,没有这样的模式。我看不到一个合理的解决方法,因为记录日志的一个原因是跟踪失败的请求。例如,由于提交错误类型的值而导致的错误。。。第22条……如果logstash认为字段是一个数字,那么将所有输入映射为字符串,并让logstash为数字表示创建一个multi_字段如何?有点像“生的”。有意思,我会调查的