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

ELK Type Conversion - Not a number but a string

我正在尝试设置一个 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,

但是,当我尝试使用平均、最小、最大和总字节数构建我的仪表板时,例如 elasticsearch 记录如下:

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

我是不是漏掉了某种转换之类的东西?有人已经体验过这种行为吗?

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

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

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

希望对您有所帮助。

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

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

如果旧数据折腾不了,可以等明天,到时候你会得到新的索引。

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

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