如何在Kibana 5.6.6中为range aggregation自定义标签
如何在Kibana 5.6.6中为Range Aggregation自定义标签
方法一:直接在Range聚合配置中设置自定义标签
这是最直观的实现方式,适合大多数常规场景:
- 打开Kibana的Visualize界面,创建或编辑一个可视化图表(比如柱状图、折线图都可以)。
- 在左侧的Metrics & Buckets面板里,添加一个Range类型的Bucket聚合,选择你要聚合的数值字段(比如响应时间、文本长度这类数值型字段)。
- 在Range聚合的配置区域,你会看到默认的区间设置(比如
0 to 100这类)。对每个区间,你可以在对应的Key输入框里填写自定义标签,举个例子:- 第一个区间:
from: 0,to: 10,Key填「极短」 - 第二个区间:
from: 10,to: 30,Key填「短」 - 第三个区间:
from: 30,to: 60,Key填「中等」 - 第四个区间:
from: 60,to: 100,Key填「长」 - 第五个区间:
from: 100,to: 200,Key填「过长」 - 最后一个区间:只填
from: 200(不需要to),Key填「极长」(代表大于等于200的范围)
- 第一个区间:
- 点击Apply changes,图表就会自动用你设置的自定义标签展示每个区间的聚合结果了。
方法二:用Script字段实现更灵活的标签映射
如果你的区间逻辑比较复杂,或者需要在多个可视化中复用这个标签规则,可以先创建一个Script字段,再基于这个字段做Terms聚合:
- 打开Kibana的Management界面,进入Index Patterns,选中你的目标索引模式。
- 切换到Scripted fields标签,点击Add scripted field。
- 设置字段名称(比如
duration_label),类型选择String。 - 在Script编辑器里,编写逻辑把数值映射到自定义标签,示例代码(以响应时间
response_time字段为例):
if (doc['response_time'].value < 10) { return '极短'; } else if (doc['response_time'].value < 30) { return '短'; } else if (doc['response_time'].value < 60) { return '中等'; } else if (doc['response_time'].value < 100) { return '长'; } else if (doc['response_time'].value < 200) { return '过长'; } else { return '极长'; }
- 保存这个Script字段后,回到Visualize界面,创建一个Terms聚合,选择刚才创建的
duration_label字段,就能直接展示带自定义标签的聚合结果了。
小提示
- 方法一中的Range聚合,每个区间的Key要保持唯一,别重复设置相同标签哦。
- 方法二用的是Painless脚本(Kibana 5.6默认支持),确保你的Elasticsearch集群开启了Painless脚本支持。
- 如果要处理文本长度,把示例里的
response_time换成doc['your_text_field.keyword'].value.length()就行。
内容的提问来源于stack exchange,提问作者Zaphod
相关产品推荐
相关产品推荐

