Elasticsearch实战应用:从基础到高级

devtools/2025/1/16 4:00:13/

引言

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够快速地存储、搜索和分析大量数据。它广泛应用于日志分析、全文搜索、实时数据分析等场景。本文将深入探讨 Elasticsearch 的实战应用,涵盖从基础概念到高级应用的各个方面。

1. Elasticsearch 基础

1.1 核心概念

  • 索引(Index):类似于关系数据库中的“数据库”,是存储文档的地方。

  • 类型(Type):在 Elasticsearch 6.x 及之前版本中,索引可以包含多个类型,类似于“表”。但在 7.x 及以后版本中,类型被废弃,每个索引只能包含一个类型。

  • 文档(Document):索引中的基本数据单元,类似于关系数据库中的“行”。

  • 分片(Shard):索引可以被分成多个分片,每个分片是一个独立的索引,分布在集群中的不同节点上。

  • 副本(Replica):每个分片可以有多个副本,用于提高数据的可用性和查询性能。

1.2 安装与配置

Elasticsearch 的安装非常简单,可以通过以下步骤完成:

  1. 下载 Elasticsearch 安装包。

  2. 解压并运行 bin/elasticsearch 启动 Elasticsearch。

  3. 访问 http://localhost:9200 确认 Elasticsearch 是否正常运行。

配置文件 elasticsearch.yml 位于 config 目录下,常用的配置项包括:

  • cluster.name:集群名称。

  • node.name:节点名称。

  • network.host:绑定的网络地址。

  • discovery.seed_hosts:集群发现的主机列表。

2. 数据索引与搜索

2.1 创建索引

PUT /my_index
{"settings": {"number_of_shards": 3,"number_of_replicas": 1},"mappings": {"properties": {"title": { "type": "text" },"description": { "type": "text" },"price": { "type": "float" }}}
}

2.2 索引文档

POST /my_index/_doc/1
{"title": "Elasticsearch Guide","description": "A comprehensive guide to Elasticsearch","price": 29.99
}

2.3 搜索文档

GET /my_index/_search
{"query": {"match": {"title": "Elasticsearch"}}
}

3. 高级查询

3.1 布尔查询

布尔查询允许组合多个查询条件,常用的布尔操作符包括 mustshouldmust_not

GET /my_index/_search
{"query": {"bool": {"must": [{ "match": { "title": "Elasticsearch" } },{ "range": { "price": { "gte": 20, "lte": 30 } } }]}}
}

3.2 聚合查询

聚合查询用于对数据进行统计分析,常见的聚合类型包括 termsavgsum 等。

GET /my_index/_search
{"size": 0,"aggs": {"avg_price": {"avg": { "field": "price" }}}
}

4. 性能优化

4.1 分片与副本策略

  • 分片数量:分片数量应根据数据量和集群规模合理设置,过多的分片会增加集群的管理开销。

  • 副本数量:副本数量应根据查询负载和数据安全性需求设置,增加副本可以提高查询性能和数据可用性。

4.2 查询优化

  • 使用过滤器:过滤器(filter)不会计算相关性分数,性能优于查询(query)。

  • 避免深度分页:深度分页(如 from 和 size 参数过大)会导致性能问题,建议使用 search_after 或 scroll API。

5. 实战案例:日志分析系统

5.1 系统架构

  • 数据采集:使用 Filebeat 采集日志数据。

  • 数据存储:将日志数据存储到 Elasticsearch 中。

  • 数据展示:使用 Kibana 进行数据可视化和分析。

5.2 实现步骤

5.2.1 安装与配置 Filebeat

5.3 实际应用

假设我们有一个 Web 服务器,每天生成大量的访问日志。通过上述系统,我们可以实时采集这些日志,并存储到 Elasticsearch 中。然后,使用 Kibana 进行数据可视化,分析访问量、错误日志、用户行为等。

例如,我们可以创建一个仪表盘,展示以下信息:

通过这些分析,我们可以及时发现系统异常、优化用户体验,并为业务决策提供数据支持。

6. 总结

Elasticsearch 是一个功能强大且灵活的搜索和分析引擎,适用于各种数据存储和检索场景。通过本文的介绍,读者可以掌握 Elasticsearch 的基础知识、高级查询技巧以及性能优化方法,并能够将其应用于实际的日志分析系统中。希望本文能为读者在实际项目中应用 Elasticsearch 提供有价值的参考。

  1. 下载并安装 Filebeat

    curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.0-linux-x86_64.tar.gz
    tar xzvf filebeat-7.10.0-linux-x86_64.tar.gz
    cd filebeat-7.10.0-linux-x86_64
  2. 配置 Filebeat

    编辑 filebeat.yml 文件,配置日志文件路径和 Elasticsearch 输出:

    filebeat.inputs:
    - type: logenabled: truepaths:- /var/log/*.logoutput.elasticsearch:hosts: ["localhost:9200"]

  3. 启动 Filebeat

    ./filebeat -e
    5.2.2 创建索引模板
  4. 定义索引模板

    创建一个索引模板,确保日志数据按照预期格式存储:

    PUT /_template/logs_template
    {"index_patterns": ["logs-*"],"settings": {"number_of_shards": 3,"number_of_replicas": 1},"mappings": {"properties": {"@timestamp": { "type": "date" },"message": { "type": "text" },"source": { "type": "keyword" },"level": { "type": "keyword" }}}
    }
    5.2.3 配置 Kibana
  5. 启动 Kibana

    下载并启动 Kibana,访问 http://localhost:5601

  6. 创建索引模式

    在 Kibana 中创建索引模式 logs-*,用于匹配 Elasticsearch 中的日志索引。

  7. 设计仪表盘

    使用 Kibana 的可视化工具创建仪表盘,展示日志数据的统计信息,如日志级别分布、日志来源分布等。

  8. 访问量趋势:按时间统计访问量,使用折线图展示。

  9. 错误日志分布:按日志级别统计错误日志数量,使用柱状图展示。

  10. 用户行为分析:按用户 IP 统计访问次数,使用饼图展示。


http://www.ppmy.cn/devtools/150835.html

相关文章

深入详解自然语言处理(NLP)中的语言模型:BERT、GPT及其他预训练模型的原理与应用

【自然语言处理】——深入详解自然语言处理(NLP)中的语言模型:BERT、GPT及其他预训练模型的原理与应用 自然语言处理(NLP)是人工智能(AI)领域中的重要分支,旨在通过计算机处理和分析…

zig语言初探:来写贪吃蛇游戏

Zig 语言简介: Zig 是一种系统编程语言,注重安全、性能和可维护性。具有简洁的语法,支持强大的编译时功能,旨在取代 C 语言,适合系统级编程。 本文使用 Zig 实现贪吃蛇游戏,利用 curses 库进行终端显示&…

RocketMQ

目录 一、什么是RocketMQ 主要特点: 应用场景: 二、RocketMQ的使用 添加依赖 配置RocketMQ 创建生产者服务 创建消费者监听器 编写测试Controller 启动Spring Boot应用 三、RocketMQ与Kafka的异同 相似点 不同点 一、什么是RocketMQ Rocke…

【C++学习篇】红黑树 从入门到进阶

目录 1.红黑树的概念 1.1红黑树的规则 1.2红黑树的效率 2. 红黑树的实现 2.1 红黑树的结构 2.2红黑树的插入 2.2.1红黑树插入,旋转的一些细节 2.2.1.1 u(uncle)不存在 ,c为p的左孩子(单旋变色) 2.2.…

C#读写ini配置文件保存设置参数

本示例使用设备:https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1b5P5rkA&ftt&id22173428704 [DllImport("kernel32", CharSet CharSet.Unicode)] public static extern uint GetPrivateProfileString(string lpAppName, stri…

服务器出现蓝屏现象的原因有什么?

当服务器定期出现蓝屏的现象,则会影响到企业业务的连续性,同时还可能会导致重要数据信息丢失和系统稳定性下降,是一种较为复杂的技术问题,本文就来探讨一下导致服务器出现蓝屏的原因都有什么。 服务器出现蓝屏有可能是硬件出现了故…

在Ubuntu下安装PostgreSQL数据库以及安装pgAdmin4工具

文章目录 1. 环境安装2. 基础操作3. 配置数据库4. 安装pgAdmin45. 注意 1. 环境安装 PostgreSQL是一个功能强大的开源对象-关系型数据库系统 QT安装数据库 sudo apt-get update sudo apt-get install libqt5sql5-psql2. 基础操作 sudo su - postgres //进入数据库 psql //数…

深入理解多线程 线程的start方法 底层原理 为何Java=(C++)--

目录 Java 并发包 祖师爷 四大口诀 为什么多线程及其重要 硬件:摩尔定律失效 软件:系统需求 Start 方法 C 源码解读 底层逻辑 操作系统分配 Java 并发包 Java Util Concurrent 祖师爷 四大口诀 为什么多线程及其重要 硬件:摩尔定律…