我试图设置一个elk仪表板来查看一些数字,如总字节数,平均加载时间等。我在logstash中强制进行一些转换,以确保这些字段不是字符串
convert => [ "bytes", "integer" ]
convert => [ "seconds", "float" ]
convert => [ "milliseconds", "integer" ]
这些Logstash转换正在运行。请参阅我的logstash.log中的摘录。 Statuscode是一个字符串,bytes,...是数字
"http_statuscode" => "200",
"bytes" => 2731,
"seconds" => 0.0,
"milliseconds" => 9059,
但是当我尝试使用avg,min,max和total bytes构建我的仪表板时,例如elasticsearch会记录下来:
Facet [stats]: field [bytes] isn't a number field, but a string
我错过了某种转换或什么?有人已经表现出这种行为吗?
感谢gus yand问候。塞巴斯蒂安
答案 0 :(得分:1)
一个可能的问题是,当第一个文档插入索引时,将设置索引中字段的映射。更改映射不会更新索引中的任何旧文档,也不会影响插入该索引的任何新文档。
如果您正在开发中,最简单的方法是删除索引(从而删除您之前的数据)。然后,任何新文档都将使用您的新映射。
如果您无法丢弃旧数据,那么您可以等待明天,当您获得新索引时。
如有必要,您也可以重建索引,但我一直觉得这很痛苦。
另一种可能性是,您在同一索引中具有不同类型的不同映射的相同字段名称。 [重复几次,这将是有道理的]。 Field [foo]必须在同一索引的每种类型中具有相同的映射定义。
答案 1 :(得分:0)
我最近解决了这个问题(我的意思是在Kibana中使用字节或请求时间作为数字,我使用v4 beta 3而你呢?)。以下三点可能对您有所帮助:
%{INT:bytes:int}
,而不是使用转换过滤器。希望它会有所帮助。