我有一个带Kibana的ElasticSearch实例,它拥有我在几年内积累的大量用户级应用数据 . 其中一个字段是用户正在运行的Java版本 .
我有理由过渡到更新的版本 . 不幸的是,我找不到将 1.6.0_31
, 1.6.0_32
, 1.6.0_37
, 1.6.0_51
汇总为单个 1.6
条目的方法,因此该图表现在几乎无法读取 .
在Kibana中有没有办法聚合数据,比如'scripted field'我可以写一个正则表达式?例如 . simplified_java: osjv % '\d\.\d'
将 simplified_java
定义为 osjv
字段的一部分,该字段与数字后跟一个点后跟一个数字相匹配 .
目前看起来Kibana只支持数字脚本字段,这使得这很难 . 我没有使用LogStash,因为我没有真正使用'logs',而是我的桌面应用程序中的自定义事件报告框架(选择加入)报告使用统计信息,所以不幸的是我不能使用它的任何功能 .
我可以手动完成它,但我已经导入了2G的事件数据,我不想再这样做了,只为可计算的内容添加一个新字段...... :(
有没有办法在Kibana中创建基于子字符串或正则表达式的字段,或者(失败)告诉ElasticSearch透明地做同样的事情?
1 回答
你肯定可以在Kibana中对Elasticsearch中的字符串数据执行脚本字段,前提是它被映射为
keyword
类型 . 有关更多信息,请参阅the scripted field documentation;有关更好的示例,请参阅the scripted field blog post .简而言之,您可以通过构建返回子字符串的脚本字段来执行您要查找的内容:
请记住,脚本字段存在性能影响,因为每次查看脚本字段时都会运行它们 .
更好的方法是使用
simplified_java
值在文档中创建新字段 . 您不需要从源重新获取所有数据,而是可以执行Update By Query . 您的查询只是match_all{}
,然后您可以定义创建新字段的脚本 . 所以是的,有索引发生,但发生了"in place":...没有测试过这些脚本中的任何一个,但看起来像它们!