我们正在使用Logstash和Bunyan在ElasticSearch中记录Restify请求。但是,在日志记录中包含JSON主体时,索引会发生冲突,因为具有相同名称的字段有时会有不同的类型。
一个例子是req.body有时是一个字符串,有时候是一个对象。我们总是将body设置为一个对象(因为我们的restify API不应该接收任何有效请求的字符串)。
然而,身体对象中的字段仍然存在问题。我们无法真正控制客户端发送的内容,如果请求包含预期数字的字符串,则弹性搜索索引已将该字段键入数字。
除了检查并可能更换身体上贴出的每个区域外,还有什么办法可以不断解决这个问题吗?在记录之前将主体从对象转换为字符串会起作用,但这会在进行可视化时严重降低其在Kibana中的可用性。
答案 0 :(得分:0)
如果字段需要包含字符串或数字,则必须将其定义为字符串。否则,当出现不匹配时,elasticsearch会很乐意放弃该事件。
Elastic正计划添加一封死信" logstash的函数,所以你可以将字段保存为数字,并将任何事件作为字符串引导到那里而不是elasticsearch。
为了防止elasticsearch根据收到的第一个数据使字段成为数字,您可能需要禁用动态映射或设置模板以更好地帮助进行映射。