Kibana NOT查询无法过滤Docker mount成功类日志问题求助
问题原因
- 分词规则影响:ES默认对
message这类文本字段使用text类型存储,写入时会通过标准分词器拆分内容,标点符号(冒号、空格、句点等)会被直接剔除,mount: Succeeded.会被拆分为mount、Succeeded两个独立词条,你查询语句中带标点的匹配规则自然无法命中索引中的词条。 - 查询字段类型不对:
text类型的通配符查询仅针对拆分后的单个词条生效,无法跨多个词条匹配完整字符串片段,因此就算你去掉标点,也没法匹配到连续的相关片段。
解决方法
方法1:使用keyword子字段做KQL查询(临时过滤推荐)
ELK默认索引模板会为所有text类型字段配套一个.keyword子字段,存储未分词的完整原始字符串,直接用该字段查询即可:
not message.keyword:*mount: Succeeded.
如果要避免误杀其他带mount的正常日志,可以加更精准的匹配规则:
not message.keyword:*\.mount: Succeeded.
方法2:添加Kibana可视化过滤器
不用写查询语句,直接在Discover页添加过滤器:
- 字段选择
message.keyword - 运算符选择「不包含」
- 匹配值填
.mount: Succeeded.
保存后过滤器可以长期复用在你的搜索视图中。
方法3:Logstash侧直接丢弃(长期清理推荐)
如果确定这类日志完全无用,可以在Logstash的filter配置段添加丢弃规则,避免无用日志占用ES存储空间:
filter { if [message] =~ /\.mount: Succeeded\.$/ { drop {} } }
内容的提问来源于stack exchange,提问作者darato
相关产品推荐
相关产品推荐

