如何在Kibana中筛选message字段内重复的uniqueKey文档
在Kibana中筛选message字段内uniqueKey重复的文档
步骤1:提取message中的uniqueKey字段
你的uniqueKey嵌套在message字段的JSON片段里,需先将其提取为独立字段,两种实现方式:
方式A:创建永久脚本字段
- 进入Kibana的Management > Index Patterns,选择你的目标索引模式(如
filebeat-6.8.23-*) - 切换到Scripted fields标签,点击Add scripted field
- 字段名设为
uniqueKey,类型选择String - 在脚本输入框中粘贴以下Painless脚本,用于解析message中的JSON并提取uniqueKey:
String message = doc['message'].value; // 定位event对应的JSON片段位置 def eventStart = message.indexOf('Received event \'') + 16; def eventEnd = message.indexOf('\' with headers'); if (eventStart > 0 && eventEnd > eventStart) { String eventJson = message.substring(eventStart, eventEnd); // 解析JSON并提取uniqueKey def json = JsonSlurper.parseText(eventJson); return json?.eventData?.user?.uniqueKey; } return null;
- 保存脚本字段,等待Kibana加载完成后,索引模式将新增
uniqueKey字段。
方式B:查询时临时提取(一次性使用)
若无需永久字段,可在Discover/Visualize中通过脚本查询临时提取,但复用性较低,不推荐日常使用。
步骤2:定位重复的uniqueKey值
- 进入Kibana的Visualize,创建一个Data Table可视化组件
- 选择目标索引模式,在Buckets中添加Split Rows聚合,聚合类型选Terms
- 字段选择刚创建的
uniqueKey,在Advanced options中设置Minimum document count为2,仅展示出现次数≥2的重复值 - 运行可视化,即可查看所有重复的uniqueKey及其出现次数。
步骤3:筛选所有重复uniqueKey对应的文档
方法A:通过可视化快速筛选
- 在Data Table中点击任意重复的uniqueKey值,选择Filter for value
- 切换到Discover页面,即可看到该uniqueKey对应的所有文档;若需查看全部重复值的文档,可依次添加多个过滤器。
方法B:使用DSL查询批量筛选
- 进入Discover页面,点击Add filter旁的Edit query DSL
- 输入以下查询语句,将
["key1", "key2"]替换为可视化中得到的重复uniqueKey列表:
{ "bool": { "should": [ {"match": {"uniqueKey": "key1"}}, {"match": {"uniqueKey": "key2"}} ], "minimum_should_match": 1 } }
- 执行查询,即可获取所有重复uniqueKey对应的文档。
注意事项
- 确保Elasticsearch集群默认启用Painless脚本支持(默认状态为启用)
- 若message字段格式发生变化,需调整脚本中的字符串截取逻辑,保证能准确提取event的JSON片段
- 针对大日志量场景,建议先缩小时间范围再操作,提升处理效率
内容的提问来源于stack exchange,提问作者Raoy
相关产品推荐
相关产品推荐

