KQL(Kibana Query Language),也就是在Kibana上面进行查询时使用的语法。
Kibana中也可以使用Lucene的查询语法。
KQL可以参考https://www.elastic.co/guide/en/kibana/current/kuery-query.html#_terms_query
说人话就是根据列名查那一列的内容
比如说我收集的日志内容都在列message中的。
现在我要查询日志带有select字符的。那就是
message:select
上面这个表达式,会查询出message字段中包含select的文档对象,注意是包含,包含的是select这一个词,比如下面这个种情况都会被查询出来
但是selection是不会被查出来的。这里查的都是词!词!
这个com.sid.controller.TestController.select也不会被查出来,默认是用空格分词的,不会用.分词。
引号的使用
message:hello word
这个是搜索message中包含hello,或者包含world,或者两者都包含的情况。
如果只需要把整个hello word一起查询出来。则使用引号
message:"hello word"
KQL支持or and not查询
其中and的优先级高于or
response:200 or extension:php
匹配response列有200,或者extension列有php的内容
response:200 and extension:php
匹配response列有200,并且extension列有php的内容
response:(200 or 404)
匹配response列有200或者404的内容
response:200 and (extension:php or extension:css)
匹配response列有200,并且extension列有php或者css的内容
response:200 and extension:php or extension:css
匹配response列有200并且extension列有php的内容。或者extension列有css的内容
not response:200
匹配response列没有200的内容
response:200 and not (extension:php or extension:css)
匹配response列有200,并且extension列没有php、css的内容
tags:(success and info and security)
匹配tags列有success并且有info并且有security的内容
KQL支持对数字和日志列使用 < <= > >=
account_number >= 100 and items_sold <= 200
@timestamp < "2021-01-02T21:55:59"
@timestamp < "2021-01"
@timestamp < "2021"
response:*
匹配所有response字段存在的文档(无论其值为多少)
machine.os:win*
匹配machine.os字段中以win开头的内容
machine.os*:windows 10
这是匹配了多个字段,匹配了以machine.os字段开头的所有字段里面有windows 10的内容