如何在Kibana垂直堆叠直方图中跨搜索固定Level字段颜色
固定Elastic日志Level字段的可视化配色方案
一、Elastic 7.x 下的解决办法
因为7.x里直方图的Visual Options处于禁用状态,得换两种思路来搞定:
给Level加权重脚本字段,固定排序
先给Level字段创建一个带优先级的脚本字段Level_Weight,用Painless脚本编写:if (doc['Level'].value == 'Fatal') return 5; else if (doc['Level'].value == 'Error') return 4; else if (doc['Level'].value == 'Warning') return 3; else if (doc['Level'].value == 'Information') return 2; else if (doc['Level'].value == 'Verbose') return 1; return 0;之后在可视化的「Break down by」设置里,先按
Level_Weight排序,再按Level分桶。这样不管哪些Level在当前过滤条件下出现,它们的排序是固定的,配色会跟着排序走,不会乱跳。手动修改Saved Object绑定颜色
7.x界面改不了,但可以导出可视化的Saved Object(JSON格式),手动添加颜色映射:- 导出后找到
aggs里对应Level分桶的部分,添加meta.color字段,把每个Level和固定颜色绑定:"aggs": { "2": { "terms": { "field": "Level", "order": {"_key": "desc"}, "size": 5 }, "meta": { "color": { "Fatal": "#dc3545", "Error": "#ffc107", "Warning": "#ff8c00", "Information": "#28a745", "Verbose": "#17a2b8" } } } }
修改完重新导入这个Saved Object,之后不管怎么改过滤条件或时间范围,每个Level的颜色都固定死了。
- 导出后找到
二、升级到Elastic 8.x的便利之处
8.x对可视化配色做了针对性优化:
- 直方图/堆叠条形图的配色设置不再禁用,直接在可视化的「Color」选项卡里,就能给每个Level值手动指定固定颜色,不用再折腾Saved Object。
- 新增了「固定配色」选项,哪怕某些Level在当前时间范围下没有数据,它们的颜色也会被保留,不会被分配给其他出现的Level,彻底解决配色偏移问题。
三、额外的稳定配色小技巧
- 确认Level是keyword类型:如果Level字段是text类型,可能会有分词问题,先检查索引映射,把Level设为keyword,分桶更准确,也能减少配色乱跳的可能。
- 用全局分桶模式:在可视化的分桶设置里选「Global」模式,分桶会基于整个索引的Level值,而不是当前过滤后的结果,确保所有Level都被纳入配色考量,不会因为部分Level缺失打乱顺序。
内容的提问来源于stack exchange,提问作者Jeroen
相关产品推荐
相关产品推荐

