一.前言

  现在大多数的公司都会使用ELK组合来对日志数据的收集、存储和提供查询服务,这里就不介绍什么是ELK了,只介绍一些EKL中的查询,也就是K(kibana)。

  查询数据库,如果是MySQL,那么就需要使用MySQL的语法;同样的,在Kibana上查询数据,也需要使用Kibana的语法,而Kibana的查询语法叫做Kibana Query Language,简称KQL。

  本文的内容主要来自ES的官网,简单翻译了一下,https://www.elastic.co/guide/en/kibana/7.7/kuery-query.html

  原文链接:https://www.cnblogs.com/-beyond/p/14159002.html

二.KQL简单介绍

  KQL(Kibana Query Language),也就是在Kibana上面进行查询时使用的语法。

  Kibana中也可以使用Lucene的查询语法,但是这里就不介绍了,可以参考https://www.elastic.co/guide/en/kibana/7.7/lucene-query.html

三.使用索引匹配查询

  在Kibana中进行查询的时候,建议使用指定索引查询,这样的效率更高,而不建议使用全局查找的方式。

  比如查找response为200的日志,那么就写为response:200,这样去查找中response值为200的文档对象;

  如果没有指定response为200,那么只是单纯的查找200,那么可能会返回金额为200的文档对象(假设有金额字段),查询的效率不高,同时也会返回一些不需要的数据; 

四.Kibana查询语法

实例1

response:200

  上面这个表达式,会查询出response字段中包含200的文档对象,注意是包含,包含的是200这一个词,比如下面几种情况都会被查询出来

200
hello world 200
hello 200 world

  需要注意的是1200或者2001,是不能被查出来的。

实例2

message:"hello world yes"

  上面这个表达式,是针对message字段进行搜索,在搜索的时候不会区分大小写,也就是说,Hello world YES也是会被搜索出来的;

  需要注意,上面的"hello world yes"使用了引号,这样的话,这3个单词会被作为一个词进行查询,不会再进行分词,也就是说匹配的时候只会匹配hello world yes这样的顺序匹配,而不会匹配出helllo yes world;

实例3

message:hello world

  上面这个表达式,针对message字段进行搜索,搜索message中包含hello,或者包含world,或者两者都包含的情况;

  需要注意的是,不区分大小写,也不会保证顺序,也就是说,下面几种情况都会被匹配

hello
world
Hello
World
hello world
Hello world
hello yes World
yes world
world yes

  

实例4

name:jane or addr:beijing

  上面这个查询条件,会查询name字段包含jane,或者addr字段包含beijing的记录,或者两者都匹配;

  需要注意的是,or表示“或”,不区分大小写;

实例5

name:jane and addr:beijing

  上面这个条件,会查询name字段包含jane,且addr字段包含beijing的记录。

实例6

name:jane and addr:beijing or job:teacher

  上面这个查询条件中,出现了and和or,需要记住的是,KQL中,and的优先级高于or;

  所以上面的查询条件,会查询name包含jane,且addr包含beijing的记录,或者job包含teacher的记录,可以使用括号来让上面的查询条件更好理解:

(name:jane and addr:beijing) or job:teacher

实例7

name:jane and (addr:beijing or job:teacher)

  上面这个表达式,主要是想表明,可以使用括号来控制匹配的优先级。

实例8

response:(200 or 404)

  上面这个表达式,会查询response包含200,或者response包含404,或者包含200和404的记录(不保证顺序、不区分大小写);

  同时可以使用and来表示“且”的关系。

实例9

not response:200

  上面这个查询条件,会查询出response字段中不包含200的记录。

实例10

response:200 and not yes

  上面这个查询条件,会查询response包含200,并且整条记录不包含yes的数据记录;

实例11

response:(200 and not yes)

  上面这个查询条件,会查询response包含200,且response不包含yes的记录。

实例12

response:*

  上面这个查询条件,会返回所有包含response字段的文档对象。

 

实例13

machine*:hello

  上面这个查询条件,会查询machine1字段,machine2字段...machinexyzabc字段包含hello的数据记录,这里只是想表达,对于搜索的字段列,也是可以使用通配符的。

五.总结

  KQL还是比较简单地,主要记住KQL匹配时是不区分大小写的,可以使用括号改变匹配优先级;

  另外一个要点就是,匹配是“包含”,某个字段“包含”某个词,而不是某个字段的值为某个词。

原文链接:https://www.cnblogs.com/-beyond/p/14159002.html

参考文献:

  https://www.elastic.co/guide/en/kibana/7.7/search.html

  https://www.elastic.co/guide/en/kibana/7.7/kuery-query.html

最新文章

  1. 读书笔记 --TCP :传输控制协议(二)
  2. into outfile 生成sql脚本
  3. javascript 的一些理解和随笔
  4. Java中接口式的匿名内部类的构造方法
  5. Linux学习笔记(整理记录)
  6. mysql 一个典型的数据库建表建用户过程
  7. spring framework项目源码github托管地址
  8. angularjs上传图片插件使用
  9. 【Tomcat】重新獲得war包
  10. IIS网站本机可以访问但局域网其他机器无法访问 解决方法
  11. SQL Server 跨服务器查询
  12. redhat yum
  13. SharkApktool 源码攻略
  14. 完美的mysql备份脚本
  15. linux环境中,top命令中,对command的命令进行扩展查看详情?
  16. (转)Ext.Button点击事件的三种写法
  17. Golang开发环境搭建
  18. Jquery 一次处理多个ajax请求的代码
  19. JAVA Socket 底层是怎样基于TCP/IP 实现的???
  20. 手把手教你使用FineUI开发一个b/s结构的取送货管理信息系统系列博文索引

热门文章

  1. GitHub 上 1.3k Star 的 strman-java 项目有值得学习的地方吗?源码视角
  2. 大白话详解大数据HBase核心知识点,老刘真的很用心(2)
  3. [BUGCASE]层叠上下文和z-index属性使用不当引发的文本被遮挡的问题
  4. Verilog 分频器
  5. 【.Net Core】 使用 Nginx 发布 .Net Core 3.1 项目至LInux(Centos7)。
  6. Python 装饰器(装饰器的简单使用)
  7. 题解 CF1062E Company
  8. CF1000F One Occurrence
  9. 深度剖析目标检测算法YOLOV4
  10. Java并发编程的艺术(二)——volatile、原子性