ELK日志平台

1.ELK架构介绍

ELK是一个应用套件,ELK 是 Elasticsearch、Logstash 和 Kibana 的缩写,是一种流行的开源日志管理解决方案。Elasticsearch 是一个分布式搜索和分析引擎,Logstash 是一个用于收集、处理和转发日志的工具,Kibana 是一个用于可视化 Elasticsearch 数据的工具。

是一套开源免费、功能强大的日志分析管理系统。ELK可以将系统日志、网站日志、应用系统日志等各种日志进行收集、过滤、清洗、如何进行集中存放并可用于实时检索、分析

image-20230708094728915
image-20230708094909840
image-20230708094952089
image-20230708095119692
image-20230712085537081
image-20230527145652207
image-20230708092704346
  • Elasticsearch

    • 是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析,采用java语言编写。是一个搜索引擎类的数据库

    • 实时搜索,实时分析

    • 分布式架构、实时文件存储,并将每一个字段都编入索引

    • 文档导向,所有的对象都是文档

    • 高可用性、易拓展、支持集群、分片和复制

    • 接口友好,支持JSON

  • Logstash

    • 是一款轻量级的、开源的日志收集处理框架,它可以方便的把分散的、多样化的日志搜集起来,并进行自定义过滤分析处理,然后传输到指定的位置,比如某个服务器或者文件。Logstash采用JRuby语言编写

    • input:数据收集

    • filter:数据加工,如过滤,改写等

    • output:数据输出

    image-20230527145948103
    image-20230527150233063
  • Kibana

    • 是一个开源的数据分析可视化平台。使用Kibana可以为Logstash和Elasticsearch提供的日志数据进行高效的搜索、可视化汇总和多维度分析,还可以与Elasticsearch搜索引擎中的数据进行交互。它基于浏览器的界面操作可以快速创建动态仪表板,实时监控Elasticsearch的数据状态与更改

image-20230527150707991

2.环境安装

image-20230708095450667

1.安装JDK

image-20230708095545188

2.安装Elasticsearch

image-20230708100102553
image-20230708100908493
image-20230709100902148

3.安装Kibana

image-20230709101558263
image-20230709110909145
image-20230709111041457

4.安装Head插件

image-20230709111340665
image-20230709120234306
image-20230709153120975

5.YUM安装

1.集群的健康值检查

image-20230709153330559

3.核心概念

什么是搜索引擎

  1. 全文搜索引擎

    • 自然语言处理(NLP)、爬虫、网页处理、大数据处理。

    • 如谷歌、百度等等

  2. 垂直搜索引擎

    • 有明确搜索目的的搜索行为

    • 如各大电商网站、OA、站内搜索、视频网站等

搜索引擎应该具备那些要求?

  • 查询速度快

    • 高效的压缩算法

    • 快速的编码和解码速度

  • 结果准确

    • BM25

    • TF-IDF

  • 检索结果丰富

    • 召回率

索引

  • 帮助快速检索

  • 以数据结构为载体

  • 以文件的形式落地

Lucene

  • Lucene是一个成熟的全文检索库,由Java语言编写,具有高性能、可伸缩的特点,并且开源、免费

全文检索

  • 索引系统通过扫描文章中的每一个词,对其创建索引,指明在文章中出现的次数和位置,当用户查询时,索引系统就会根据实现建立的索引进行查找,并将查找的结果反馈给用户的检索方式

1.倒排索引

倒排索引(Inverted Index)是一种数据库索引,用于存储从内容到文档的映射。使用倒排索引可以很好的支持全文搜索,被广泛应用于信息检索(搜索引擎、数据库)中。 倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。

倒排索引的原理是将文档中的每个单词映射到包含该单词的所有文档的列表中,然后用该列表替换单词。倒排索引在文本搜索和信息检索中广泛应用,如搜索引擎、网站搜索、文本分类等场景中。 具体来说,一个倒排索引包含一个词语词典和每个词语对应的倒排列表。2倒排列表中记录了包含该词语的所有文档的编号、词频等信息。2这让我们能够在O(1)的时间内判断某个文档是否包含某个词,而且还可以基于词频、相关度等统计信息进行搜索结果排序。

image-20230710085827326
image-20230710085500631
image-20230710085933908

1.FOR压缩算法

image-20230710090004193
image-20230710091653036

2.RBM压缩算法

image-20230710094004593
image-20230710094138943

3.FST压缩算法

为什么要安装term的字典序处理?

  • 为了生成最小化的FST的数据结构

Trie前缀树

前缀树(Prefix Tree),又称字典树(Trie Tree),是一种树形结构,是一种哈希树的变种。 它的典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。 前缀树的每一个节点代表一个字符串(前缀)。每一个节点会有多个子节点,通往不同子节点的路径上有着不同的字符。 子节点代表的字符串是由节点到根节点路径上所有字符连接起来的字符串。

前缀树的主要优点是可以最大限度地减少无谓的字符串比较,查询效率比哈希表高。前缀树常用于搜索提示、自动补全、拼写检查等场景中

FST

image-20230710101943648
image-20230710102624989
image-20230710102845688
image-20230710103048426
image-20230710104311638
image-20230710111903280
image-20230710113506320
image-20230710114205557
image-20230710115048700
image-20230710115120443
image-20230710115054814

2.tip和tim文件内部结构

image-20230710142906928

3.FSt在Lucene中的构建和读取过程

image-20230710145035388

4.集群、节点和分片

节点

  • 每个节点就是一个Elasticsearch实例

  • 一个节点≠一台服务器

image-20230710152107315

分片

  • 一个索引包含一个或多个分片,在7.0之前默认五个主分片,每个主分片一个副本;在7.0之后默认一个主分片。副本可以在索引创建之后修改数量,但是主分片的数量一旦确认不可修改,只能创建索引

  • 每个分片都是一个Lucene实例,有完整的创建索引和处理请求的能力

  • ES会自动在nodes上做分片均衡

  • 一个doc不可能同时存在于多个主分片中,但是当每个主分片的副本数量不为一时,可以同时存在与多个副本中

  • 每个主分片和其副本分片不能同时存在与同一个节点上,所以最低的可用配置是两个节点互为主备

集群

  • 原生分布式

  • 一个节点≠一台服务器

4.索引的CRUD

image-20230710162039699

5.Mapping

1.概念

  • 概念:映射是定义文档及其包含的字段的存储和索引方式的过程。优点类似于RDB中"表结构"的概念。在Mapping中包含一些属性,比如字段名称、类型、字段使用的分词器、是否评分、是否创建索引等属性。并且在ES中一个字段可以有对应类型

  • 两种映射方式

    • dynamic mapping(动态映射或自动映射)

    • expllcit mapping(静态映射或手工映射或显示映射)

2.查看mapping

  • GET /index/_mapping

3.ES数据类型

image-20230710172536417
image-20230710172702590

4.两种映射类型

  • Dynamic field mapping

image-20230710173032068
  • Expllcit field mapping:手动映射

image-20230710185653982

5.映射参数

image-20230710190819394
image-20230710191127139

6.搜索和查询

1.相关度评分

未指定排序字段时,会按照评分进行排序

2.元数据_source

image-20230710203355415
image-20230710203455689

发生冲突时,以excludes为准

3.Query String

  • 查询所有:

    GET /product/_search

  • 带参数

    GET /product/_search?q=name:xiaomi

  • 分页

    GET /product/_search?from=0&size=2$sort=price:asc

  • 精准匹配exact value

    GET /product/_search?q=name:xiaomi

  • _all搜索 相当于在所有有索引字段中检索

    GET /product/_search?q=xiaomi

    如果设置字段不设置索引,那么就不会搜索该字段

    image-20230710210155756

4.全文检索:match

DSL(Domain Specific Language)

  • Query string search

  • 全文检索:fulltext search

  • 过滤器:filter

  • 精准匹配:exact match

  • 组合查询:boo query

全文检索

全文搜索,也被称为全文检索、关键词搜索,是一种能对文档进行搜索的技术,它的主要特点是用户可以输入一个或多个关键词,搜索结果返回所有包含这些关键词的文档。

image-20230710210926041

5.精准匹配:exact match

image-20230710213225073

6.过滤器

image-20230710221649595
  • filter:query和filter的主要区别在:filter是结果导向的而query是过程导向。query倾向于当前文档和查询的语句的相关度,而filter倾向于当前文档和查询的条件是不是相符。即在查询过程中,query是要对查询的每个结果计算相关性得分的,而filter不会。另外filter有相应的缓存机制,可以提高查询效率

7.组合查询:bool query

image-20230710222132970

7.分词器

  • 规范化:normalization

  • 字符过滤器:character filter

  • 分词器:tokenizer

  • 令牌过滤器:token filter

1.使用分词器查看分词结果

2.normalization

文档规范化,提高召回率

  • 停用词

  • 时态转换

  • 大小写

  • 同义词

  • 语气词

3.字符过滤器

分词之前的预处理,过滤无用字符

  • HTML Strip

  • Mapping

  • Pattern Replace

4.令牌过滤器:token filter

停用词、时态转换、大小写转换、同义词转换、语气词处理等

ES的令牌过滤器和字符过滤器是用于分析器的两种过滤器。字符过滤器用于在将字符流传递给分词器之前对其进行预处理,将原始文本作为字符流接收,并可以通过添加、删除或更改字符来转换流。而令牌过滤器则是在分词器生成单词后,对单词进行进一步的处理,如删除停用词、同义词转换等等。

image-20230711104036234
image-20230711104601803
image-20230711104900823

5.分词器:tokenizer

切词

常见分词器

  • standard analyzer:默认分词器,中文支持的不理想,会逐字拆分

  • pattern tokenizer:以正则匹配分隔符,把文本拆分成若干词项

  • simple pattern tokenizer:以正则匹配词项,速度比pattern tokenizer快

  • whitespace analyzer:以空白符分隔 tim_cookie

自定义分词器

6.中文分词器

Github地址arrow-up-right

Analyzer: ik_smart , ik_max_word , Tokenizer: ik_smart , ik_max_word

image-20230711112650649
image-20230711113838343

7.关于热更新

1.关于远程词库的热更新

2.关于基于数据库的热更新

8.聚合查询:Aggregation

1.基础聚合

1.分桶聚合(Bucket agregations)

2.指标聚合(Metrics agregations)

image-20230713085920942

3.管道聚合(Pipeline agregation)

image-20230713090116297

2.嵌套聚合:基于聚合结果的聚合

3.基于查询结果的聚合和基于聚合结果的查询

4.聚合排序

5.常见的聚合函数

1.histogram

使用range

使用histogram

2.percentile

9.脚本查询:Scripting

1.概念

Scripting是Elasticsearch支持的一种专门用于复杂场景下支持自定义编程的强大的脚本功能,ES支持多种脚本语言,如painless,其语法类似于java,也有注释、关键字、类型、变量、函数等,其相对于其他脚本高出几倍性能,并且安全可靠,可以用于内联合存储脚本

image-20230713091228197

2.基础使用

3.scripting的CURD

1.修改新增

2.删除

3.查询

4.参数化脚本

Elasticsearch在执行脚本之前需要编译脚本,这是一个相对耗时的操作。为了提高性能,可以使用params参数来避免编译脚本。params参数可以在脚本中使用,它允许你在执行脚本时传递参数,而不是在脚本中写死参数值。这样,如果脚本只是参数值不同,就可以避免重复编译脚本,从而提高性能。

5.scripts模板

Elasticsearch会把模板保存在集群的缓存中

6.函数式编程

image-20230713110353579

7.doc['field'].value和params['_source']['field']区别

doc和params都只能查询_source中的数据

在Elasticsearch中,doc[‘field’].value和params[‘_source’][‘field’]都是用于访问文档字段的方式。但是,它们之间有一些区别。

doc[‘field’].value是一种更快的方式,它将字段的术语加载到内存中,以便脚本可以更快地访问它们。但是,它只能访问简单字段值,例如数字或字符串。

params[‘_source’][‘field’]是一种更通用的方式,它可以访问复杂字段值,例如嵌套对象或数组。但是,它比doc[‘field’].value慢,因为它需要从磁盘中加载整个文档并解析JSON格式。

10.索引的批量操作

1.基于mget的批量查询

2.文档的操作类型

image-20230723102638235

3.基于_bulk的增删改

传统的增删改都要在内存中序列化成JSON对象,而是用bulk不消耗额外内存

11.模糊查询

1.prefix:前缀搜索

image-20230723113759738
image-20230723144726293

2.wildcard:通配符

image-20230723145012836

3.regexp:正则表达式

image-20230723145408720

4.fuzzy模糊查询

image-20230723150157764

5.match_phrase_prefix:短语前缀

image-20230723151406305

6.ngram和edge-ngram

image-20230723154345325

ngram默认的min_gram和max_gram分别是1和2,edge_ngram都是1

12.搜索推荐

image-20230723155623358

1.Term Suggester

image-20230723155658051
image-20230723155838665

2.phrase suggester

image-20230723161458910

在使用Phrase之前,需要定义一个特定的mapping

3.completion suggester

image-20230723162914547

使用之前先创建mapping

image-20230723163303066
image-20230723163436872
image-20230723163505077
image-20230723163756295

4.Context Suggester

image-20230723163856871

使用之前也必须创建mapping

image-20230723164055119
image-20230723164244325
image-20230723164717164
image-20230723164738869
image-20230723164818251
image-20230723165018188
image-20230723165037517

13.数据建模

1.嵌套类型查询:Nested

image-20230723171048222
image-20230723171351490
image-20230723171651878

2.父子级关系查询:Join

image-20230723172840889
image-20230723172407516
image-20230723172705560

使用routing指定分片

image-20230723173002496
image-20230723173310633

3.数据建模

image-20230723173412424
image-20230723173730078
image-20230723174059545
image-20230723174238437
image-20230723174400203
image-20230723174426836

14.es客户端

image-20230724193905189

15.Elasticsearch分布式原理

1.单机服务有哪些问题?

  • 性能有限

  • 可用性差

  • 难以扩展

2.分布式的好处

  • 高可用性:集群可容忍部分节点宕机而保持服务的可用性和数据的完整性

  • 易扩展性:当集群的性能不满足业务要求时,可以方便快速的扩容集群,而无需停止服务

  • 高性能:集群通过负载均衡器分摊并发请求压力,可以大大提高集群的吞吐能力和并发能力

image-20230724203842799
image-20230724204618678

最后更新于