快捷搜索:  汽车  科技

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧为什么要分成三篇,因为每一篇都很长,而且侧重点不一样,所以分成三篇来讲解。我会分为三篇来讲解 Elasticsearch(简称ES)的原理、实战及部署。项目中我们总是用Kibana 界面来搜索测试或生产环境下的日志,来看下有没有异常信息。Kibana 就是 我们常说的 ELK 中的 K。Kibana 界面如下图所示:但这些日志检索原理是什么呢?这里就该我们的 Elasticsearch 搜索引擎登场了。

作 者:悟空聊架构

原文链接:cnblogs/jackson0714/p/elasticseach1.html

本篇主要内容如下:

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(1)

回到顶部

前言

项目中我们总是用Kibana 界面来搜索测试或生产环境下的日志,来看下有没有异常信息。Kibana 就是 我们常说的 ELK 中的 K。

Kibana 界面如下图所示:

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(2)

但这些日志检索原理是什么呢?这里就该我们的 Elasticsearch 搜索引擎登场了。

我会分为三篇来讲解 Elasticsearch(简称ES)的原理、实战及部署。

  • 上篇: 讲解 ES 的原理、中文分词的配置。
  • 中篇: 实战 ES 应用。
  • 下篇: ES 的集群部署。

为什么要分成三篇,因为每一篇都很长,而且侧重点不一样,所以分成三篇来讲解。

回到顶部

一、Elasticsearch 简介1.1 什么是 Elasticsearch?

Elasticsearch 是一个分布式的开源搜索和分析引擎,适用于所有类型的数据,包括文本、数字、地理空间、结构化和非结构化数据。简单来说只要涉及搜索和分析相关的, ES 都可以做。

1.2 Elasticsearch 的用途?

Elasticsearch 在速度和可扩展性方面都表现出色,而且还能够索引多种类型的内容,这意味着其可用于多种用例:

  • 比如一个在线网上商店,您可以在其中允许客户搜索您出售的产品。在这种情况下,您可以使用Elasticsearch 存储整个产品目录和库存,并为它们提供搜索和自动完成建议。

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(3)

  • 比如收集日志或交易数据,并且要分析和挖掘此数据以查找趋势,统计信息,摘要或异常。在这种情况下,您可以使用 Logstash(Elasticsearch / Logstash / Kibana堆栈的一部分)来收集,聚合和解析数据,然后让 Logstash 将这些数据提供给 Elasticsearch。数据放入 Elasticsearch 后,您可以运行搜索和聚合以挖掘您感兴趣的任何信息。
1.3 Elasticsearch 的工作原理?

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(4)

Elasticsearch 是在 Lucene 基础上构建而成的。ES 在 Lucence 上做了很多增强。

Lucene 是apache软件基金会 4 的 jakarta 项目组的一个子项目,是一个开放源代码的全文检索引擎工具包,但它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。(来自百度百科)

Elasticsearch 的原始数据从哪里来?

原始数据从多个来源 ( 包括日志、系统指标和网络应用程序 ) 输入到 Elasticsearch 中。

Elasticsearch 的数据是怎么采集的?

数据采集指在 Elasticsearch 中进行索引之前解析、标准化并充实这些原始数据的过程。这些数据在 Elasticsearch 中索引完成之后,用户便可针对他们的数据运行复杂的查询,并使用聚合来检索自身数据的复杂汇总。这里用到了 Logstash,后面会介绍。

怎么可视化查看想要检索的数据?

这里就要用到 Kibana 了,用户可以基于自己的数据进行搜索、查看数据视图等。

1.4 Elasticsearch 索引是什么?

Elasticsearch 索引指相互关联的文档集合。Elasticsearch 会以 JSON 文档的形式存储数据。每个文档都会在一组键 ( 字段或属性的名称 ) 和它们对应的值 ( 字符串、数字、布尔值、日期、数值组、地理位置或其他类型的数据 ) 之间建立联系。

Elasticsearch 使用的是一种名为倒排索引的数据结构,这一结构的设计可以允许十分快速地进行全文本搜索。倒排索引会列出在所有文档中出现的每个特有词汇,并且可以找到包含每个词汇的全部文档。

在索引过程中,Elasticsearch 会存储文档并构建倒排索引,这样用户便可以近实时地对文档数据进行搜索。索引过程是在索引 API 中启动的,通过此 API 您既可向特定索引中添加 JSON 文档,也可更改特定索引中的 JSON 文档。

1.5 Logstash 的用途是什么?

Logstash 就是 ELK 中的 L。

Logstash 是 Elastic Stack 的核心产品之一,可用来对数据进行聚合和处理,并将数据发送到 Elasticsearch。Logstash 是一个开源的服务器端数据处理管道,允许您在将数据索引到 Elasticsearch 之前同时从多个来源采集数据,并对数据进行充实和转换。

1.6 Kibana 的用途是什么?

Kibana 是一款适用于 Elasticsearch 的数据可视化和管理工具,可以提供实时的直方图、线性图等。

1.7 为什么使用 Elasticsearch
  • ES 很快,近实时的搜索平台。
  • ES 具有分布式的本质特质。
  • ES 包含一系列广泛的功能,比如数据汇总和索引生命周期管理。

官方文档:elastic.co/cn/what-is/elasticsearch

回到顶部

二、ES 基本概念2.1 Index ( 索引 )

动词:相当于 Mysql 中的 insert

名词:相当于 Mysql 中的 database

与 mysql 的对比

序号MysqlElasticsearch1Mysql 服务ES 集群服务2数据库 Database索引 Index3表 Table类型 Type4记录 Records ( 一行行记录 )文档 Document ( JSON 格式 )

2.2 倒排索引

假如数据库有如下电影记录:

1-大话西游

2-大话西游外传

3-解析大话西游

4-西游降魔外传

5-梦幻西游独家解析

分词:将整句分拆为单词

序号保存到 ES 的词对应的电影记录序号A西游1 2 3 4 5B大话1 2 3C外传2 4 5D解析3 5E降魔4F梦幻5G独家5

检索:独家大话西游

将 独家大话西游 解析拆分成 独家、大话、西游

ES 中 A、B、G 记录 都有这三个词的其中一种, 所以 1 2 3 4 5 号记录都有相关的词被命中。

1 号记录命中 2 次, A、B 中都有 ( 命中 2 次 ) ,而且 1 号记录有 2 个词,相关性得分:2 次/2 个词=1

2 号记录命中 2 个词 A、B 中的都有 ( 命中 2 次 ) ,而且 2 号记录有 2 个词,相关性得分:2 次/3 个词= 0.67

3 号记录命中 2 个词 A、B 中的都有 ( 命中 2 次 ) ,而且 3 号记录有 2 个词,相关性得分:2 次/3 个词= 0.67

4 号记录命中 2 个词 A 中有 ( 命中 1 次 ) ,而且 4 号记录有 2 个词,相关性得分:1 次/3 个词= 0.33

5 号记录命中 2 个词 A 中有 ( 命中 2 次 ) ,而且 4 号记录有 4 个词,相关性得分:2 次/4 个词= 0.5

所以检索出来的记录顺序如下:

​ 1-大话西游 ( 相关性得分:1 )

​ 2-大话西游外传 ( 想关性得分:0.67 )

​ 3-解析大话西游 ( 想关性得分:0.67 )

​ 5-梦幻西游独家解析 ( 想关性得分:0.5 )

​ 4-西游降魔 ( 想关性得分:0.33 )

回到顶部

三、docker 搭建环境3.1. 搭建 Elasticsearch 环境

搭建虚拟机环境和安装 docker 可以参照之前写的文档:

  • [01. 快速搭建 Linux 环境-运维必备] ( jayh.club/#/05. 安装部署篇/01. 环境搭建篇 )
  • [02. 配置虚拟机网络] ( jayh.club/#/05. 安装部署篇/02. 配置虚拟机网络 )
  • [03. 安装 Docker] ( jayh.club/#/05. 安装部署篇/03. 安装 docker )
1 ) 下载镜像文件

docker pull elasticsearch:7.4.2 2 ) 创建实例

  • 映射配置文件

配置映射文件夹 mkdir -p /mydata/elasticsearch/config 配置映射文件夹 mkdir -p /mydata/elasticsearch/data 设置文件夹权限任何用户可读可写 chmod 777 /mydata/elasticsearch -R 配置 http.host echo "http.host: 0.0.0.0" >> /mydata/elasticsearch/config/elasticsearch.yml

  • 启动 elasticsearch 容器

docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e "discovery.type"="single-node" \ -e ES_JAVA_OPTS="-Xms64m -Xmx128m" \ -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \ -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch:7.4.2

  • 访问 elasticsearch 服务

访问:192.168.56.10:9200

返回的 reponse

{ "name" : "8448ec5f3312" "cluster_name" : "elasticsearch" "cluster_uuid" : "xC72O3nKSjWavYZ-EPt9Gw" "version" : { "number" : "7.4.2" "build_flavor" : "default" "build_type" : "docker" "build_hash" : "2f90bbf7b93631e52bafb59b3b049cb44ec25e96" "build_date" : "2019-10-28T20:40:44.881551Z" "build_snapshot" : false "lucene_version" : "8.2.0" "minimum_wire_compatibility_version" : "6.8.0" "minimum_index_compatibility_version" : "6.0.0-beta1" } "tagline" : "You Know for Search" }

访问:192.168.56.10:9200/_cat 访问节点信息

127.0.0.1 62 90 0 0.06 0.10 0.05 dilm * 8448ec5f3312 3.2. 搭建 Kibana 环境

docker pull kibana:7.4.2 docker run --name kibana -e ELASTICSEARCH_HOSTS=192.168.56.10:9200 -p 5601:5601 -d kibana:7.4.2

访问 kibana: 192.168.56.10:5601/

大家称赞的日志分析工具:别只会搜日志了 求你懂点原理吧(5)

猜您喜欢: