• ELK:开源搜索与分析技术栈(1)


    ELK:开源搜索与分析技术栈(1)

    一、ELK技术栈简介

    1. ELK技术栈简介

    • Elasticsearch:Elasticsearch是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎Apache Lucene基础上的搜索引擎,使用Java语言编写。
    • Kibana:Kibana是一个免费且开放的用户界面,能够让您对Elasticsearch数据进行可视化。Kibana是一款基于Apache开源协议的可视化Web管理平台。它可以在Elasticsearch的索引中查找,交互数据,并生成各种维度的表图。
    • Logstash:Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中。使用JRuby语言编写。其作者是世界著名的运维工程师乔丹西塞 (JordanSissel)

    二、Elasticsearch简介

    1. Elasticsearch简介

    ​ Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式的全文搜索引擎,其对外服务是基于RESTful web接口发布的。Elasticsearch是用Java开发的应用,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到近实时搜索,稳定,可靠,快速,安装使用方便。

    2. Elasticsearch主要功能

    ​ Elasticsearch具备两个主要功能:

    • 搜索:代替目前(海量数据)的MySQL模糊查询。
    • 分析:结合LogStash使用。类似数据库中的聚合统计查询。

    3. 核心概念

    3.1 Cluster

    ​ 集群:Elasticsearch集群由一或多个节点组成,其中有一个主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。Elasticsearch的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部看Elasticsearch集群,在逻辑上是个整体,你与集群中的任何一个节点通信和与整个Elasticsearch集群通信是等价的。也就是说,主节点的存在不会产生单点安全隐患、并发访问瓶颈等问题。

    3.2 Index

    ​ 索引:相当于关系型数据库中的表。其中存储若干相似结构的Document数据。如:客户索引,订单索引,商品索引等。Elasticsearch中的索引不像数据库表格一样有强制的数据结构约束,在理论上,可以存储任意结构的数据。但了为更好的为业务提供搜索数据支撑,还是要设计合适的索引体系来存储不同的数据。

    3.3 Shards

    ​ Primary Shard:代表索引的主分片,Elasticsearch可以把一个完整的索引分成多个primary shard,这样的好处是可以把一个大的索引拆分成多个分片,分布存储在不同的Elasticsearch节点上,从而形成分布式存储,并为搜索访问提供分布式服务,提高并发处理能。primary shard的数量只能在索引创建时指定,并且索引创建后不能再更改primary shard数量。

    3.4 Replicas

    ​ Replica Shard:代表索引主分片的副本,Elasticsearch可以设置多个replica shard。replica shard的作用:一是提高系统的容错性,当某个节点某个primary shard损坏或丢失时可以从副本中恢复。二是提高Elasticsearch的查询效率,Elasticsearch会自动对搜索请求进行负载均衡,将并发的搜索请求发送给合适的节点,增强并发处理能力。

    3.5 Type

    ​ 类型:每个索引中都必须有唯一的一个Type,Type是Index中的一个逻辑分类。Elasticsearch中的数据Document是存储在索引下的Type中的。
    ​ 注意:Elasticsearch5.x及更低版本中,一个Index中可以有多个Type。Elasticsearch6.x版本之后,Type概念被弱化,一个Index中只能有唯一的一个Type。且在7.x版本之后,删除Type定义,每个index只有唯一固定命名为_doc的Type。

    3.6 Document

    ​ 文档:Elasticsearch中的最小数据单元。一个Document就是一条数据,一般使用JSON数据结构表示。每个Index下的Type中都可以存储多个Document。一个Document中可定义多个field,field就是数据字段。如:学生数据({“name”:“张三”, “age”:20, “gender”:“男”})。

    3.7 MetaData

    ​ 元数据:在Elasticsearch中所有以“_”开头的属性都成为元数据,都有着自己特定的含义。

    ​ 例如:“_index”表示索引;“_type"表示类型;”_id“表示唯一主键;”_version“表示数据版本;”_source“表示源数据(即保存到Elasticsearch中的Document)等。

    3.8 Inverted Index

    ​ 倒排索引:对数据进行分析,抽取出数据中的词条,以词条作为key,对应数据的存储位置作为value,实现索引的存储。这种索引称为倒排索引。倒排索引是Document写入Elasticsearch时分析维护的。如:

    ​ 录入数据如下:

    商品主键 商品名 商品描述
    1 荣耀10 更贵的手机
    2 荣耀8 相对便宜的手机
    3 IPHONE X 要卖肾买的手机
    分析结果后,维护的倒排索引如下:
    
    • 1
    词条 数据指针
    手机 1,2,3
    便宜 2
    卖肾 3
    相对 2
    荣耀 1,2
    IPHONE 32

    三、基于Docker安装Elasticsearch

    1. 前期准备

    ​ 使用的Elasticsearch的版本是7.6.2。Elasticsearch7.x要求Linux内核必须是4+版本以上。
    ​ 在linux操作系统中,查看内核版本的命令是: uname -a 。
    ​ 课堂使用的Linux是CentOS Stream 8。内核使用的是4.18。

    2. 开启Docker服务

    ​ 如果没启动docker服务,则先启动docker服务。

    systemctl start docker
    
    • 1

    ​ 也可以设置docker服务为开机自启。

    systemctl enable docker
    
    • 1

    3. 拉取镜像

    docker pull elasticsearch:7.6.2
    
    • 1

    4. 创建并启动容器

    docker run --name elasticsearch -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.6.2
    
    • 1
    4.1 命令解释

    ​ -d : 代表后台启动。

    ​ -p : 用于绑定端口。其中9200是Elasticsearch提供restful(基于HTTP协议)服务的端口;9300是提供Transport(基于TCP协议)服务的端口。

    ​ discovery.type=single-node : 集群发现模式,单节点集群模式

    5. 查看日志

    docker logs -f elasticsearch
    
    • 1

    ​ 当日志中有”started“已启动状态信息时,代表容器启动成功 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GKA5bWVT-1663288606231)(images/es6.png)]

    6. 测试

    ​ 使用下述命令,测试Elasticsearch服务。

    curl http://localhost:9200
    
    • 1

    ​ 显示如下信息,代表服务可用。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1shRAbdM-1663288606232)(images/es7.png)]

    四、基于Docker安装Kibana

    ​ 在课程中,Kibana作为学习时的工作平台使用。安装的Kibana版本必须和Elasticsearch版本一致。

    1. 拉取镜像

    docker pull kibana:7.6.2
    
    • 1

    2. 创建并启动容器

    docker run -d --name kibana --link elasticsearch:elasticsearch -p 5601:5601 kibana:7.6.2
    
    • 1
    2.1 命令解释

    ​ --link elasticsearch:elasticsearch 中第一个elasticsearch是容器名,第二个elasticsearch是容器别名。设置link后才能让容器互通。

    3. 访问测试

    ​ 访问 http://Linux系统IP:5601

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OHkhmxzu-1663288606234)(images/es8.png)]

    4. 进入操作台

    在这里插入图片描述

    5. 操作简介

    ​ 在控制台中输入的命令前缀,并不是命令本身,其代表的是使用哪种请求方式访问Elasticsearch提供的Restful服务。如: GET就代表使用GET请求访问Ealstcissearch。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hb1PMpZS-1663288606237)(images/es10.png)]

    五、常用Elasticsearch管理操作

    1. 查看健康状态

    ​ 命令:其中v代表参数,表示返回的结果包含标题头。

    GET /_cat/health?v
    
    • 1

    ​ 结果含义如下:

    含义 表头 数据
    编号 epoch 1640140938
    时间戳 timestamp 02:42:18
    集群名称 cluster docker-cluster
    健康状态 status green
    节点总数 node.total 1
    数据节点数 node.data 1
    总分片数 shards 5
    主分片数量 pri 5
    备份分片数量 relo 0
    正在初始化的分片 init 0
    未分配的分片 unassign 0
    正在等待执行的任务 pending_tasks 0
    挂起任务的等待时间 max_task_wait_time -
    活动的分片的占有百分比 active_shards_percent 100.0%
    1.1 健康状态含义说明

    ​ status值包括:green、yellow、red

    • green:每个索引的primary shard和replica shard都是active的。
    • yellow:每个索引的primary shard都是active的,但部分的replica shard不是active的。
    • red:不是所有的索引的primary shard都是active状态的。

    2. 查看节点信息

    ​ 命令:其中v代表参数,表示返回的结果包含标题头。

    GET /_cat/nodes?v
    
    • 1

    ​ 结果含义如下:

    含义 表头 数据
    ES主机地址 ip 172.17.0.5
    堆占用率 heap.percent 13
    内存占用率 ram.percent 96
    CPU占用率 cpu 2
    每分钟平均运行命令 load_1m 0.4
  • 相关阅读:
    select...for update到底是加了行锁,还是表锁?
    ElasticSearch7.3学习(十四)----生产环境实时重建索引
    计算机视觉 01(介绍)
    单应用多语言切换(语言国际化)
    二叉树遍历
    LSM树原理详解
    DolphinScheduler 进阶(资源中心)
    【学习教程】遥感数据与DSSAT作物生长模型同化及在作物长势监测与估产中的应用
    uni-app tree(树状) 组件
    自定义MVC框架02
  • 原文地址:https://blog.csdn.net/woruosuifenglang/article/details/126883243