Kibana Alerting创建告警规则仅能选择@timestamp字段问题咨询
Kibana告警规则无法选择业务字段问题原因及处理方案
问题核心原因
创建Elasticsearch Query、Index Threshold类型告警规则时,仅能看到@timestamp字段、看不到已摄入的业务字段,通常由以下几类原因导致:
- 字段映射不符合规则选型要求:这两类告警规则对可选字段有明确的类型限制,做阈值判断的指标字段必须是数值类型,做分组过滤的维度字段必须是
keyword类型,不符合类型要求的字段不会出现在可选列表中。如果Logstash摄入CSV时未手动指定映射,依赖ES默认动态映射很容易出现字段类型不匹配的问题,比如数值类的温度字段被识别为字符串、字符串类的设备标识被识别为text类型且无可用的keyword子字段。 - 同名字段类型冲突:如果告警规则选择的是通配符匹配的多个索引,同名字段在不同索引中的映射类型不一致(比如温度字段在1月索引中是
float,在2月索引中是keyword),Kibana会自动过滤掉存在类型冲突的字段,不会展示在可选列表中。 - Kibana数据视图(原索引模式)缓存未更新:新完成数据摄入、索引映射调整后,Kibana数据视图会缓存旧的字段列表,不会自动同步最新的索引字段信息,导致新写入的业务字段不显示。
- 字段权限或写入逻辑问题:当前登录Kibana的账号对目标业务字段配置了字段级读权限限制;或是Logstash输出时将业务字段写入了嵌套子对象层级、甚至被过滤规则拦截,即使感知到数据已摄入,实际字段的存储层级/存在性也可能不符合规则读取要求。
注:这两类规则的时间筛选维度固定仅支持选择时间类型字段,默认绑定
@timestamp是产品正常设计,不属于故障范畴,业务字段不需要作为时间字段选择,只需要作为指标、分组条件选择即可。
处理步骤
- 先校验ES侧实际字段映射
执行以下命令查询目标索引的字段实际类型,替换命令中的占位符为你的实际索引、字段名:
针对返回结果做对应调整:GET 你的目标索引名/_mapping/field/需要使用的业务字段名- 如果指标类字段(比如温度值)是字符串类型,在Logstash的filter段用
convert插件做类型转换,同时给索引配置静态映射,将字段类型设为float/integer等数值类型,不要完全依赖动态映射自动识别类型 - 如果维度类字段是
text类型,优先选择字段下自动生成的.keyword子字段使用,或调整映射将字段直接设为keyword类型 - 如果存在跨索引同名字段类型冲突,重建索引统一字段类型,或在创建告警规则时指定类型一致的单索引,避免用通配符匹配存在冲突的多索引
- 如果字段存储在嵌套子对象下,调整Logstash配置将业务字段提到文档根层级,或给嵌套对象配置正确的映射类型
- 如果指标类字段(比如温度值)是字符串类型,在Logstash的filter段用
- 刷新Kibana数据视图缓存
进入KibanaStack Management-数据视图页面,找到匹配目标索引的数据视图,点击右上角的「刷新字段列表」,等待缓存同步完成后再返回告警规则创建页重试。如果没有提前创建数据视图,建议先创建对应的数据视图、完成字段刷新后,再在告警规则中直接选择该数据视图配置规则,避免临时拉取字段列表出现缺失。 - 校验账号字段权限
进入KibanaStack Management-角色页面,找到当前登录账号绑定的角色,检查索引权限配置,确认没有对需要使用的业务字段开启字段级权限拦截,保证账号对所有业务字段有读权限。 - 核对Logstash输出配置
检查Logstash的Elasticsearch输出插件配置,确认没有配置exclude_fields等参数过滤掉业务字段,保证字段正常写入ES文档根层级。
内容的提问来源于stack exchange,提问作者Jesús Jiménez Montilla
相关产品推荐
相关产品推荐

