ELK类型转换 - 不是数字而是字符串

时间:2015-02-06 13:15:48

标签: elasticsearch logstash kibana

我试图设置一个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,

但是当我尝试使用av​​g,min,max和total bytes构建我的仪表板时,例如elasticsearch会记录下来:

Facet [stats]: field [bytes] isn't a number field, but a string

我错过了某种转换或什么?有人已经表现出这种行为吗?

感谢gus yand问候。塞巴斯蒂安

2 个答案:

答案 0 :(得分:1)

一个可能的问题是,当第一个文档插入索引时,将设置索引中字段的映射。更改映射不会更新索引中的任何旧文档,也不会影响插入该索引的任何新文档。

如果您正在开发中,最简单的方法是删除索引(从而删除您之前的数据)。然后,任何新文档都将使用您的新映射。

如果您无法丢弃旧数据,那么您可以等待明天,当您获得新索引时。

如有必要,您也可以重建索引,但我一直觉得这很痛苦。

另一种可能性是,您在同一索引中具有不同类型的不同映射的相同字段名称。 [重复几次,这将是有道理的]。 Field [foo]必须在同一索引的每种类型中具有相同的映射定义。

答案 1 :(得分:0)

我最近解决了这个问题(我的意思是在Kibana中使用字节或请求时间作为数字,我使用v4 beta 3而你呢?)。以下三点可能对您有所帮助:

  1. 你如何解析你的日志?使用Grok过滤器?如果是,您可以尝试将日志与以下模式匹配%{INT:bytes:int},而不是使用转换过滤器。
  2. 您是否重新加载字段列表"完成更改后,Kibana 4中的(黄色按钮)(设置 - >指数)?
  3. 如果ES群集中​​有旧索引,是否正确删除了这些索引?如果没有,您可能会在旧类型和新类型之间产生一些冲突。
  4. 希望它会有所帮助。