zoukankan      html  css  js  c++  java
  • Kibana查询语言(KQL)

    一.前言

      现在大多数的公司都会使用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,是不能被查出来的。

      如果要查询1200或者2001,这种模糊匹配的,可以使用通配符,比如response:*200或者response:200*

    实例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

  • 相关阅读:
    Android中Context具体解释 ---- 你所不知道的Context
    JDK6、Oracle11g、Weblogic10 For Linux64Bit安装部署说明
    matplotlib 可视化 —— 定制 matplotlib
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 移动坐标轴(中心位置)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    matplotlib 可视化 —— 定制画布风格 Customizing plots with style sheets(plt.style)
    指数函数的研究
    指数函数的研究
    指数分布的研究
  • 原文地址:https://www.cnblogs.com/-beyond/p/14159002.html
Copyright © 2011-2022 走看看