如何在Kibana中查询包含指定子串的日志(含无空格场景)
Kibana搜索包含任意位置"Bla"的日志解决方案
嘿,我来帮你搞定这个搜索问题!你之前的查询只能匹配到"Bla"作为独立单词的场景,本质原因是Elasticsearch默认对@message字段做了分词处理——它会把日志内容拆成一个个以空格、标点等分隔符划分的单词,只有当"Bla"单独成词时才会被命中。要同时覆盖带空格和不带空格的情况,试试下面这两种实用方法:
方法1:通配符匹配
用通配符*来匹配Bla前后的任意字符(包括空字符),写法非常直观:
@message:*Bla*
这个查询会扫描@message字段的整个字符串,只要其中任意位置包含"Bla",不管前后是空格、冒号、逗号还是其他符号,都会被匹配到。
方法2:正则表达式匹配
Kibana支持原生正则查询,能更灵活地控制匹配规则,基础写法是:
@message:/Bla/
如果需要忽略大小写(比如同时匹配"bla"、"BLA"),可以加上i标记:
@message:/Bla/i
正则查询同样会对整个字符串做匹配,完美覆盖你提到的两种日志场景。
性能小提示
如果你的日志数据量特别大,以*开头的通配符查询可能会影响性能。这种情况下,建议使用@message对应的keyword子字段(比如@message.keyword)来查询,写法是:
@message.keyword:*Bla*
因为keyword类型字段是不分词的,直接做字符串级别的匹配,性能会更优。
内容的提问来源于stack exchange,提问作者Shahaf Shavit
相关产品推荐
相关产品推荐

