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]必须具有相同的映射定义。
答
我最近解决了这个问题(我的意思是在Kibana中使用字节或请求时间作为数字,我使用v4 beta 3和你?)。以下三点可能会对您有所帮助:
- 如何解析您的日志?使用Grok过滤器?如果是,则可以尝试将日志与以下模式
%{INT:bytes:int}
相匹配,而不是使用转换过滤器。 - 在完成更改后,您是否在Kibana 4(设置 - >索引)中“重新加载字段列表”(黄色按钮)?
- 如果您的ES群集中有旧索引,您是否正确删除了这些索引?如果不是,那么旧的类型和新的类型之间可能会有一些冲突。
希望它会有所帮助。
请注意,您必须更改映射模板,而不是索引的映射:更多信息:http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-templates.html – 2015-02-07 13:48:05
等待一天就成功了。我没有意识到索引字段类型只设置一次,并确定整个索引的类型。第二天的新索引包含整数字段。谢谢你的帮助。 – 2015-02-09 09:52:47