首页 > 其他分享 >【教你通透ELK】高级搜索和查询语法

【教你通透ELK】高级搜索和查询语法

时间:2023-10-06 11:08:27浏览次数:46  
标签:ELK 通透 Kibana 查询 语法 可视化 文档 使用 Elasticsearch


鱼弦:内容合伙人、新星导师、全栈领域创作新星创作者 、51CTO(Top红人+专家博主) 、github开源爱好者(go-zero源码二次开发、游戏后端架构 https://github.com/Peakchen)

【教你通透ELK】高级搜索和查询语法_elk

Logstash和Kibana都是Elastic Stack的组件,其中Elasticsearch是其核心组件,提供了高级搜索和查询语法。以下是有关高级搜索和查询语法的原理、接口使用和使用场景的详细解释:

  1. 原理

Elasticsearch使用基于倒排索引的搜索引擎,它将所有文档的每个词都映射到一个对应的词项(term),并将词项存储在一个倒排索引中。当用户发出一个查询请求时,Elasticsearch会在倒排索引中查找匹配的词项,并返回匹配的文档。

Elasticsearch提供了丰富的查询语法,包括基本查询、复合查询、过滤器、聚合等。用户可以使用查询语法来构建复杂的查询,以满足不同的搜索需求。

  1. 接口使用

Elasticsearch提供了RESTful API,可以使用HTTP协议发送查询请求和获取查询结果。以下是一些常用的查询接口:

  • GET /_search:执行一个查询请求,返回匹配的文档。
  • POST /_search:执行一个查询请求,可以在请求体中指定查询条件。
  • GET /_count:执行一个查询请求,返回匹配的文档数量。
  • POST /_count:执行一个查询请求,可以在请求体中指定查询条件,并返回匹配的文档数量。
  • GET /_validate/query:验证一个查询请求,返回查询是否合法。
  • POST /_validate/query:验证一个查询请求,可以在请求体中指定查询条件,并返回查询是否合法。
  1. 使用场景

高级搜索和查询语法适用于许多场景,包括以下几种:

  • 搜索和过滤日志数据:用户可以使用查询语法来搜索和过滤日志数据,以查找特定的事件或问题。
  • 分析和可视化数据:用户可以使用聚合查询来分析数据,并使用Kibana的可视化组件来可视化结果。
  • 监控和警报:用户可以使用查询语法来监控数据,并使用警报机制来通知用户有异常情况发生。
  • 搜索和过滤文档数据:用户可以使用查询语法来搜索和过滤文档数据,以查找特定的文档或信息。
  1. 文献材料链接

以下是一些有关高级搜索和查询语法的文献材料链接:

以下是一个使用Elasticsearch查询DSL实现的Logstash和Kibana高级搜索和查询语法的示例实现,包括创建一个基于时间范围的查询和使用Kibana可视化设计器创建可视化组件。

  1. Logstash配置文件

在Logstash的配置文件中添加以下内容,以从日志文件中读取数据,并使用grok和date过滤器解析时间戳:

input {
  file {
    path => "/var/log/myapp.log"
    start_position => "beginning"
  }
}

filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA:message}" }
  }
  date {
    match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]
  }
}

output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "myapp-%{+YYYY.MM.dd}"
  }
}

该配置文件从日志文件中读取数据,使用grok过滤器解析日志数据,使用date过滤器解析时间戳,并将数据发送到Elasticsearch中。

  1. Elasticsearch查询DSL

使用Elasticsearch查询DSL创建一个基于时间范围的查询,以查找特定时间段内的日志数据。以下是一个示例:

POST /myapp-*/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "loglevel": "ERROR"
          }
        },
        {
          "range": {
            "timestamp": {
              "gte": "now-1h",
              "lte": "now"
            }
          }
        }
      ]
    }
  }
}

该查询使用bool查询类型,以使用两个查询条件进行匹配。第一个查询条件使用match查询类型,以匹配“loglevel”字段的值为“ERROR”的文档。第二个查询条件使用range查询类型,以匹配“timestamp”字段在指定时间范围内的文档。

  1. Kibana可视化设计器

使用Kibana的可视化设计器创建一个可视化组件,以显示错误日志的数量。以下是一个示例:

  • 在Kibana中选择“Visualize”选项卡,然后选择“Create a new visualization”按钮。
  • 在可视化设计器中选择“Vertical bar chart”可视化类型,并选择“myapp-*”索引模式。
  • 在可视化设计器中添加一个聚合,选择“Y-axis”选项卡,并选择“Aggregation”为“Count”。
  • 在可视化设计器中选择“X-axis”选项卡,并选择“Date Histogram”为“Aggregation”,选择“Field”为“timestamp”,选择“Interval”为“Auto”。
  • 在可视化设计器中选择“Bucket”选项卡,并选择“Split series”为“Sub-buckets”,选择“Sub-aggregation”为“Terms”,选择“Field”为“loglevel.keyword”,选择“Order by”为“Descending”,选择“Size”为“5”。
  • 在可视化设计器中选择“Apply changes”按钮,并预览结果。

以上是Logstash和Kibana高级搜索和查询语法的示例实现,包括使用Elasticsearch查询DSL创建基于时间范围的查询和使用Kibana可视化设计器创建可视化组件。

标签:ELK,通透,Kibana,查询,语法,可视化,文档,使用,Elasticsearch
From: https://blog.51cto.com/chenfenglove/7722149

相关文章

  • 【HTML专栏1】语法规范、基础结构标签
    本文属于HTML/CSS专栏文章,适合WEB前端开发入门学习,详细介绍HTML/CSS如果使用,如果对你有所帮助请一键三连支持,对博主系列文章感兴趣点击下方专栏了解详细。博客主页:DuckBro博客主页系列专栏:HTML/CSS专栏关注博主,后期持续更新系列文章如果有错误感谢大家批评指出,一定及时修改感谢......
  • 基于 K8S 搭建自己的 ELK 服务
    基于K8S(K3S)搭建自己的ELK服务对应的Yaml资源在https://github.com/nicelizhi/k8s-elkelasticsearch服务Servicekind:ServiceapiVersion:v1metadata:name:elasticsearchspec:ports:-name:elasticsearchprotocol:TCPport:9200......
  • java基础-基础语法和数据类型
    2java环境搭建2.1安装jdk和配置环境变量#java的开发环境,需要安装jdk#java的运行环境,运行java项目,正常只需要装jre即可,但是好多人都装jdk#无论运行java程序还是开发java程序,直接装jdk即可#jdk:java开发环境JavaDevelopmentKit#jre:java运行环境#jvm:java虚拟机,j......
  • 【后端开发】01-Java基础语法
    Java基础语法目录1.概述1.1.语言特性1.2.开发平台1.3.开发环境1.4.开发步骤1.5.注释2.变量与运算符2.1.关键字/保留字2.2.标识符2.3.变量2.4.常用数据类型2.4.1.基本数据类型(8种)2.4.2.引用数据类型2.4.3.数据类型转换2.5.运算符2.5.1.算术运算符(7个)2.5.2.关系运......
  • 鸿蒙JS UI的Hml语法技巧,hml中实现多列表的方式
    由于没有web基础,不懂html和js。需要从基础学起。刚刚学到在hml中实现多列表的方式,记录一下<divclass="container"><divclass="card-container"for="iteminimageCards"show="{{item.isShow}}"><divclass="text-container&......
  • 第02章 Python语法基础,IPython和Jupyter Notebooks
    第2章Python语法基础,IPython和JupyterNotebooks当我在2011年和2012年写作本书的第一版时,可用的学习Python数据分析的资源很少。这部分上是一个鸡和蛋的问题:我们现在使用的库,比如pandas、scikit-learn和statsmodels,那时相对来说并不成熟。2017年,数据科学、数据分析和机器学习的......
  • 十四天学会C++之第一天(入门和基本语法)
    C++的起源和历史C++诞生于20世纪80年代初,它的创造者是计算机科学家BjarneStroustrup。当时,Stroustrup在贝尔实验室工作,他希望为C语言添加一些功能,以便更好地支持系统开发。这个愿望促使他创建了C++。C++的名字来源于它的基因,其中的"C"代表了C语言,而"++"表示C语言的一个增强版本。......
  • Flutter/Dart第07天:Dart基础语法详解(库、导入和关键字)
    Dart官网文档:https://dart.dev/language/libraries重要说明:本博客基于Dart官网文档,但并不是简单的对官网进行翻译,在覆盖核心功能情况下,我会根据个人研发经验,加入自己的一些扩展问题和场景验证。Dart中的库(Library)Dart语言对代码的复用下了不少功夫,如前面讲到的Mixin高级特性实......
  • Flutter/Dart第06天:Dart基础语法详解(变量)
    Dart官网文档:https://dart.dev/language/variables重要说明:本博客基于Dart官网文档,但并不是简单的对官网进行翻译,在覆盖核心功能情况下,我会根据个人研发经验,加入自己的一些扩展问题和场景验证。Dart中的变量变量是一个对象的引用,引用名就是变量的名称;就算引用是null的变量也一......
  • SQL语法基础随记
    参考资料:[廖雪峰的官方网站][菜鸟教程]写这个教程还是为了方便自己今后查阅,如果读者希望能够系统地学习SQL语言,还是找一个好的Tutorial看一下比较好。SQL语言的基础就是四个字:增查删改。我直接使用了一个开源的SQL客户端DBeaver作为自己客户端。进去之后它会自......