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

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

问题描述:

我想设置一个麋鹿仪表板来查看总字节数,平均加载时间等一些数字。我在logstash中强制进行一些转换以确保这些字段不是字符串ELK类型转换 - 不是一个数字,而是一个字符串

convert => [ "bytes", "integer" ] 
convert => [ "seconds", "float" ] 
convert => [ "milliseconds", "integer" ] 

那些Logstash转换正在工作。从我的logstash.log中看到这段摘录。的StatusCode是一个字符串,字节,...是数字

"http_statuscode" => "200", 
"bytes" => 2731, 
"seconds" => 0.0, 
"milliseconds" => 9059, 

但是当我尝试建立我的平均,最小,最大和例如elasticsearch日志总字节数此仪表板:

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

上午我错过某种转换或什么?有人已经证实了这种行为?

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

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

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

如果你不能折腾旧数据,你可以等待明天,当你得到一个新的索引。

如果有必要,你也可以重建索引,但我一直觉得这是一个痛苦。

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

+0

请注意,您必须更改映射模板,而不是索引的映射:更多信息:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-templates.html – 2015-02-07 13:48:05

+0

等待一天就成功了。我没有意识到索引字段类型只设置一次,并确定整个索引的类型。第二天的新索引包含整数字段。谢谢你的帮助。 – 2015-02-09 09:52:47

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

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

希望它会有所帮助。