Elasticsearch如何搜索日志并存储

news2024/10/24 15:39:45

Elasticsearch 是一个分布式搜索引擎,擅长对大量数据进行实时的搜索、分析和存储。它常被用于处理日志数据,配合工具如 Logstash 或 Filebeat 来收集和存储日志,并提供强大的搜索和分析能力。接下来,我将解释 Elasticsearch 如何处理日志的存储和搜索功能。

1. Elasticsearch 存储日志的过程

Elasticsearch 是一个面向文档(document-oriented)的数据库系统,存储的每个日志条目都被视为一个文档。整个过程可以分为以下几个步骤:

a. 日志采集

通常,Elasticsearch 不直接采集日志数据,而是使用其他工具,如 FilebeatLogstash 或其他日志采集工具来收集日志数据,并将其传送到 Elasticsearch。以下是这些工具的作用:

  • Filebeat:轻量级的日志文件采集工具,可以直接从服务器上的日志文件中读取日志并传输到 Elasticsearch。
  • Logstash:更为灵活的日志采集和处理工具,它可以从各种数据源(如文件、数据库、API)中采集日志,并通过复杂的过滤和转换后将日志发送到 Elasticsearch。
b. 日志的索引
  • 日志数据传输到 Elasticsearch 后,首先会存储在索引(index)中。索引相当于数据库中的表,每个索引存储了一类相似的数据。
  • 在创建索引时,Elasticsearch 会根据日志的字段自动生成相应的 mapping(映射),这决定了每个字段的数据类型(如字符串、日期、数字等),并准备好如何高效地存储和搜索这些字段。

例如,一个日志可能包含以下字段:

{
  "timestamp": "2024-10-23T13:45:30",
  "level": "ERROR",
  "message": "Connection timeout",
  "service": "auth-service"
}

这些字段会被 Elasticsearch 索引,以便快速搜索。

c. 文档存储
  • Elasticsearch 将日志条目作为一个 JSON 文档存储,每个文档被分配一个唯一的 _id(类似于数据库中的主键),以标识这个日志条目。
  • 文档存储在集群中的不同节点上。为了提高性能,Elasticsearch 会将数据分片(sharding)并复制(replication),这样即使部分节点出现故障,集群依然可以正常运行。
d. 倒排索引(Inverted Index)
  • 在存储过程中,Elasticsearch 创建了 倒排索引,这种数据结构用于快速查找哪些文档包含某个特定的关键字。
  • 倒排索引将文档中的每个词条(term)映射到包含该词条的文档列表中。例如,如果有日志消息 “Connection timeout”,Elasticsearch 会将 “Connection” 和 “timeout” 分别映射到包含这些词的文档 ID 列表。

2. Elasticsearch 如何搜索日志

当用户发出搜索请求时,Elasticsearch 会通过它的倒排索引和分布式架构快速查找日志数据。搜索的流程如下:

a. 搜索请求
  • 用户可以通过 REST API、Kibana(Elasticsearch 可视化工具)或者客户端 SDK(如 Java、Python)向 Elasticsearch 发起搜索请求。
  • 搜索请求通常包含查询条件(如日期范围、关键字、日志级别等)和排序或聚合规则。

例如,以下是一个简单的查询,查找所有在最近 24 小时内出现的 "ERROR" 日志:

{
  "query": {
    "bool": {
      "must": [
        { "match": { "level": "ERROR" } },
        {
          "range": {
            "timestamp": {
              "gte": "now-24h",
              "lte": "now"
            }
          }
        }
      ]
    }
  }
}
b. 查询执行
  • Elasticsearch 会根据查询条件,在每个索引的倒排索引中查找匹配的词条,并找到对应的文档 ID 列表。
  • 如果请求涉及多个索引,Elasticsearch 会在多个索引的分片(shard)上并行执行查询,这种分布式架构使得它在处理大规模日志数据时依然能够快速响应。
c. 结果聚合与排序
  • Elasticsearch 不仅支持简单的日志搜索,还提供了强大的聚合功能。例如,用户可以请求按时间段统计错误日志的数量,或者按服务类型对日志进行分组。
  • 聚合可以生成类似于 SQL 的 GROUP BYCOUNT 这样的统计信息,这对于日志分析非常有用。

例如,下面是一个查询日志中各个服务类型出现的错误次数:

{
  "query": {
    "match": { "level": "ERROR" }
  },
  "aggs": {
    "service_count": {
      "terms": {
        "field": "service.keyword"
      }
    }
  }
}
d. 返回结果
  • Elasticsearch 将搜索结果返回给用户,结果通常包括匹配的日志条目及其相关信息(如时间戳、日志消息、服务名称等)。
  • 用户可以在搜索结果中选择查看详细的日志内容,或者通过 Kibana 等工具进行可视化分析。

3. Elasticsearch 与日志处理的优势

Elasticsearch 之所以被广泛用于日志管理和分析,主要基于以下几个优势:

  • 实时性:Elasticsearch 的实时索引和搜索能力使得它可以迅速地将新日志记录存入系统,并在几乎实时的情况下进行搜索和分析。

  • 分布式架构:Elasticsearch 的分布式设计允许它处理大规模的日志数据,支持高并发的写入和查询。

  • 倒排索引:基于倒排索引的数据结构,Elasticsearch 可以快速查找包含特定关键字或字段的日志条目,即使日志数据规模巨大,查询依然可以在毫秒级内响应。

  • 聚合功能:Elasticsearch 的聚合查询允许用户对日志数据进行深入分析,例如按时间、按级别、按服务对日志进行分类和统计。

  • 可视化工具(Kibana):配合 Kibana,可以对日志数据进行可视化的展示,生成图表、仪表盘,并对数据进行监控和分析。

4. Elasticsearch 与其他日志存储方案的比较

与传统的关系型数据库或文件系统相比,Elasticsearch 在日志存储和搜索上具有以下显著优势:

  • 灵活的模式:Elasticsearch 是模式自适应的(schema-less),即使日志数据的结构发生变化,它也能够自动处理,不需要对表结构进行预定义或变更。

  • 强大的全文搜索:Elasticsearch 专门针对文本数据进行了优化,能够处理复杂的文本查询和模糊匹配,支持自然语言的全文搜索。

  • 高可用性和扩展性:Elasticsearch 内置了集群和分片机制,允许日志数据自动分布到多个节点上,提升了系统的可用性和扩展性。

总结

Elasticsearch 通过与日志采集工具的结合(如 Logstash、Filebeat),可以实现日志的实时采集、存储和搜索。它通过倒排索引实现了对海量日志数据的快速搜索,并且支持复杂的聚合和分析功能。在分布式架构下,Elasticsearch 具有很高的扩展性和高可用性,非常适合处理日志数据的场景。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2222510.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

8年经验之谈 —— 如何使用自动化工具编写测试用例?

以下为作者观点,仅供参考: 在快速变化的软件开发领域,保证应用程序的可靠性和质量至关重要。随着应用程序复杂性和规模的不断增加,仅手动测试 无法满足行业需求。 这就是测试自动化发挥作用的地方,它使软件测试人员…

NVR小程序接入平台/设备EasyNVR多个NVR同时管理的高效解决方案

在当今的数字化安防时代,视频监控系统的需求日益复杂和多样化。为了满足不同场景下的监控需求,一种高效、灵活且兼容性强的安防视频监控平台——NVR批量管理软件/平台EasyNVR应运而生。本篇探讨这一融合所带来的创新与发展。 一、NVR监测软件/设备EasyNV…

【设计模式】MyBatis 与经典设计模式:从ORM到设计的智慧

作者:后端小肥肠 🍇 我写过的文章中的相关代码放到了gitee,地址:xfc-fdw-cloud: 公共解决方案 🍊 有疑问可私信或评论区联系我。 🥑 创作不易未经允许严禁转载。 姊妹篇: 【设计模式】揭秘Spri…

vue2 el-select赋值无效(无法选中)

背景:点击添加明细时,el-table会新增一条数据,其中,存货原申购用途 会根据 费用承担事业部 下拉框的值改变而改变,所以每次费用承担事业部发生变化时,都需要清空存货原申购用途的值 最开始是直接这样写的&a…

D. Deleting Divisors

传送门:Problem - D - Codeforces 题意: 思路:博弈论 打表找规律( 递推 ) 如果 ans[i] 为 true ,则 Alice 能赢 ans[i] 为 false,则 Bob 会赢 数字 n 的一个因子 为 x , 如果 …

【简历】25届浙江某211大学JAVA简历:明明项目有货,但是长篇大论减分!!

注:为保证用户信息安全,姓名和学校等信息已经进行同层次变更,内容部分细节也进行了部分隐藏 另外:我们出这一系列校招简历指导的原因,就是看很多学生被忽悠,没有先定位大厂、中厂还是小公司,导…

【日志】力扣刷题——买卖股票的最佳时机 // Unity——添加数据表文件、EPPlus插件以及编辑器开发生成Excel转Json代码文件复习

2024.10.17 【力扣刷题】 两题连一起,思路很像 121. 买卖股票的最佳时机 - 力扣(LeetCode) 122. 买卖股票的最佳时机 II - 力扣(LeetCode) 121. 买卖股票的最佳时机 按照顺序查找,找到最大的差值时&#x…

Prompt-Tuning方法学习

文章目录 一、背景1.1 Pre-training1.2 Fine-Tuning1.3 高效微调(SOTA PEFT)1.4 基于强化学习的进阶微调方法(RLHF) 二、Prompt-Tuning技术2.1 发展历程2.2 Prompt模板构建方式 三、基于连续提示的Prompt Tuning四、Q&A 一、背…

【升华】一文从0到1到实际性应用大语言模型(LLM)

一、前言 相信网已经很多LLM大模型 的介绍 ,概念,发展历史,应用场景的很多文章,但是很多文章都是缺少细节的描述,到底怎么用,需要些什么东西怎么层显出来。所以虽然看了很多大模型的介绍,也仅仅…

【Linux篇】初学Linux,如何快速搭建Linux开发环境

文章目录 前言1. Linux背景介绍1.1 UNIX的发展历史1.2 Linux的发展历史 2. 企业应用现状3. 开源3.1 探索Linux源代码3.2 开源 VS 闭源 4. Linux的版本4.1 技术线4.2 商业产品线 5. os概念,定位6. 搭建Linux环境6.1 Linux环境的搭建方式6.2 购买云服务器 7. 使用XShe…

从一个简单的计算问题,看国内几个大语言模型推理逻辑能力

引言 首先,来看问题: 123456*987654等于多少,给出你计算的过程。 从openai推出chatgpt以来,大模型发展的很快,笔者也经常使用免费的大语言模型辅助进行文档编写和编码工作。大模型推出时间也好久了,笔者想…

红队-安全见闻篇(上)

声明 学习视频来自B站UP主 泷羽sec的个人空间-泷羽sec个人主页-哔哩哔哩视频,如涉及侵权马上删除文章 笔记的只是方便各位师傅学习知识,以下网站只涉及学习内容,其他的都与本人无关,切莫逾越法律红线,否则后果自负 一.编程与开发 1.后端语言学习 C语⾔:⼀种通⽤的…

[解决]在Arduino IDE 打开 ino 类型文件处于read only editor模式

今天打开一个ino类型文件发现这个问题,无法编辑…… 解决方法:右键点击ino类型文件(你打开的那个)进入属性栏 发现只读被勾上,取消打勾并点击最下方的确认 现在就可以编辑啦

Unity目录居然这么写就不会被引入到项目内

只要加一个小符号~ 这是一个约定俗成的符号么~~~~ 当然,代码管理器还是识别的 也,只要稍微加一些规则,去避免代码入库 只要一天不死,还是能在程序员这个座位上看到新的东西 什么时候才到尽头??&#xff1f…

服务器数据恢复—EXT3文件系统下邮件数据被误删的数据恢复案例

服务器数据恢复环境: 邮件服务器中有一组由8块盘组成的RAID5阵列, 上层是Linux操作系统EXT3文件系统。 服务器故障: 由于误删除导致文件系统中的邮件数据丢失。 服务器数据恢复过程: 1、将故障服务器中所有硬盘做好标记后取出,硬…

面试必备:RabbitMQ与Kafka核心知识点总结

写在前面 🔥我把后端Java面试题做了一个汇总,有兴趣大家可以看看!这里👉 ⭐️在无数次的复习巩固中,我逐渐意识到一个问题:面对同样的面试题目,不同的资料来源往往给出了五花八门的解释&#…

Windows电脑怎么设置局域网内共享磁盘?

一、设置局域网磁盘共享 1、假设这是电脑A,先启动公用文件夹共享: (1)点击【控制面板】 (2)点击【网络和Internet】 (3)点击【网络和共享中心】 (4)点击【…

【linux网络编程】 | 网络基础Ⅰ| 认识网络

前言: 在本节几乎不讲任何网络协议的系结, 只是将网络的概念搭建起来。本节将会讲到网络的一些专有名词, 概念, 以及网络的结构划分等等。 主要是带大家做一下前期知识的铺垫。 下面, 开始我们的学习吧! ps:本节内容因…

成功解决pycharm软件中按住Ctrl+点击指定函数却不能跳转到对应库中的源代码

成功解决pycharm软件中按住Ctrl点击指定函数却不能跳转到对应库中的源代码 目录 解决问题 解决方法 解决问题 在pycharm软件中按住Ctrl点击指定函数却不能跳转到对应库中的源代码 解决方法

docker容器无法连接宿主机mysql排查

1、docker无法访问宿主机 在docker容器内,需要访问当前docker容器的网关,例如172.xx.0.1,即可访问宿主机,因此需要保证docker的网络配置正确 查看当前docker容器的网关: docker inspect 你的容器名或者容器id 显示…