ELK理论

ELK理论,第1张

ELK理论 ELK理论

文章目录

ELK理论

一、ELK日志分析系统简介

1.1日志处理的步骤1.2 ELK日志分析系统三部分 二、Logstash简介

2.1Logstash概述2.2Logstash是如何工作的2.3Filebeat简介 三、Elasticsearch介绍

2.1 Elasticsearch概述2.2倒排索引2.3Elasticsearch的概念

一、ELK日志分析系统简介 1.1日志处理的步骤
#1.将APP servers的日志进行集中化管理到Logstash agent
#2.将日志格式化(Logstash)并输出到Elasticsearch cluster
#3.对格式化后的数据进行索引和存储(Elasticsearch)
#4.前端数据的展示(Kibana)
#5.可以在线查看界面化展示
1.2 ELK日志分析系统三部分

Elasticsearch
Logstash
Kibana
Logstash 收集APP server产生的log,然后存放到Elasticsearch集群节点中,kibana从Elasticsearch集群节点中查询数据生成图表,再返回给Brower

二、Logstash简介 2.1Logstash概述

它是用于数据物流的开源流式 ETL(Extract-Transform-Load)引擎在几分钟内建立数据流管道具有水平可扩展及韧性且具有自适应缓冲具有 200 多个集成和处理器的插件生态系统 2.2Logstash是如何工作的

Logstash事件处理有三个阶段: inputs →一 fiters → outputs。是一个接收,处理,转发日志的工具。支持系统日志,webserver日志,错误日志,应用日志,总之包括所有可以抛出来的日志类型。

输入,以下是常见得输入内容

1) file:从文件系统上的文件读取,与UNIX命令非常相似 tail -0F
2) syslog:在已知端口上侦听syslog消息进行解析
3) redis:使用redis通道和redis列表从redis服务器读取。Redis通常用作集中式Logstash安装中的“代理”,该安装将Logstash事件从远程Logstash“托运人”排队。
4) beats:处理 Beats发送的事件,beats包括filebeat、packetbeat、winlogbeat。

过滤,以下是常见得过滤器

1) grok:解析并构造任意文本。Grok是目前Logstash中将非结构化日志数据解析为结构化和可查询内容的最佳方式。Logstash内置了120种模式,您很可能会找到满足您需求的模式!
2) mutate:对事件字段执行常规转换。您可以重命名,删除,替换和修改事件中的字段。
3) drop:完全删除事件,例如调试事件。
4) clone:制作事件的副本,可能添加或删除字段。
5) geoip:添加有关IP地址的地理位置的信息(也在Kibana中显示惊人的图表!)

输出,以下是常见得输出内容

1) elasticsearch:将事件数据发送给Elasticsearch。如果您计划以高效,方便且易于查询的格式保存数据...... Elasticsearch是您的最佳选择
2) file:将事件数据写入磁盘上的文件。
3) graphite:将事件数据发送到graphite,这是一种用于存储和绘制指标的流行开源工具。http://graphite.readthedocs.io/en/latest/
4) statsd:将事件数据发送到statsd,这是一种“侦听统计信息,如计数器和定时器,通过UDP发送并将聚合发送到一个或多个可插入后端服务”的服务。如果您已经在使用statsd,这可能对您有用!

编解码器

编解码器基本上是流过滤器,可以作为输入或输出的一部分运行。使用编解码器可以轻松地将消息传输与序列化过程分开。流行的编解码器包括json, multiline等。
json:以JSON格式编码或解码数据。
multiline:将多行文本事件(例如java异常和堆栈跟踪消息)合并到一个事件中
2.3Filebeat简介

首先filebeat是Beats中的一员。
Beats在是一个轻量级日志采集器,其实Beats家族有6个成员**,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。**
目前Beats包含六种工具:

#Packetbeat:网络数据(收集网络流量数据)
#Metricbeat:指标(收集系统、进程和文件系统级别的CPU和内存使用情况等数据)
#Filebeat:日志文件(收集文件数据)
#Winlogbeat:windows事件日志(收集Windows事件日志数据)
#Auditbeat:审计数据(收集审计日志)
#Heartbeat:运行时间监控(收集系统运行时的数据)

Filebeat是用于转发和集中日志数据的轻量级传送工具。Filebeat监视您指定的日志文件或位置,收集日志事件,并将它们转发到Elasticsearch或 Logstash进行索引。

Filebeat的工作方式如下:启动Filebeat时,它将启动一个或多个输入,这些输入将在为日志数据指定的位置中查找。对于Filebeat所找到的每个日志,Filebeat都会启动收集器。每个收集器都读取单个日志以获取新内容,并将新日志数据发送到libbeat,libbeat将聚集事件,并将聚集的数据发送到为Filebeat配置的输出。

注:Filebeat保证事件将**至少传递到配置的输出一次,**并且不会丢失数据。是因为它将每个事件的传递状态存储注册表文件中。在已定义的输出被阻止且未确认所有事件的情况下,Filebeat将继续尝试发送事件,直到输出确认已接收到事件为止。如果Filebeat在发送事件的过程中关闭,它不会等待输出确认所有事件后再关闭。当Filebeat重新启动时,将再次将Filebeat关闭前未确认的所有事件发送到输出。这样可以确保每个事件至少发送一次,但最终可能会有重复的事件发送到输出。

三、Elasticsearch介绍 2.1 Elasticsearch概述

1.提供了一个分布式多用户能力的全文搜索引擎
2.是一个基于Lucene的搜索服务器
3.基于restful web接口
4.使用java开发
5.作为apache许可条款下的开放源码发布,是第二流行的企业搜索引擎
6.被设计用于云计算中,能够达到实时搜索、稳定、可靠、快速、安装实用方便的需求

2.2倒排索引

什么是倒排索引

倒排索引是实现“单词-文档矩阵”的一种具体存储形式,通过倒排索引,可以根据单词快速获取包含这个单词的文档列表。

例如:

id句子1I like apples2I dislike apples3I dislike apples too

如果要用单词作为索引,而句子的位置作为被索引的元素,那么索引就发生了倒置:

id单词索引I{1,2,3}like{1}apples{1,2,3}dislike{2,3}too{3}

如果要检索I dislike apples这句话,那么就可以这么计算 : {1,2,3} ^ {2,3} ^ {1,2,3} (^是交集)

为什么使用倒排索引
当用户在淘宝上搜索关键词“小米洗衣机”时,假如只存在正向索引(forward index),那么就需要扫描索引库中的所有文档,然后找出所有包含关键词“小米洗衣机”的文档,再根据一定的机制排序后展示给用户。

2.3Elasticsearch的概念 Elasticsearch关系型数据库(如Mysql)索引Index数据库Database类型Type表Table文档document数据行Row字段Field数据列Column映射Mapping约束 Schema

接近实时(NRT)
Elasticsearch是一个接近即时的搜索平台,从索引一个文档知道这个文档能够被搜索到的过程中有一个轻微的延迟(通常是1S)

集群(cluster)

由一个及其以上的节点组织在一起,它们共同持有整个数据,并一起提供索引和搜索功能

其中一个节点为主节点,这个节点是可以通过选举产生,并提供跨节点的联合索引和搜索的功能

集群有一个唯一标识的名字,默认是elaticsearch

集群名字很重要,每个节点是基于集群名字加入到其集群中;因此,要确保集群的唯一性,在不同环境中使用不同的集群名字

一个集群可以只有一个节点,建议在配置elasticsearch时,配置成集群模式

节点(node)

节点就是一台单一的服务器,是集群的一部分,存储数据并参与集群的索引和搜索功能
像集群一样,节点之间可是通过名字来标识区分,默认是在节点启动时随机分配的字符名。当然,你可以自己定义,该名字很重要,起到在集群中定位到对应的节点节点可以通过指定集群名字来加入到集群中,默认情况下,每个节点被设置成加入到elasticsearch集群。如果启动了多个节点,假设能够自动发现对方,他们将会自动组建一个名为elastisearch的集群

索引(Index)

索引就相当于MySql里的数据库,**它是具有某种相似特性的文档集合。**反过来说不同特性的文档一般都放在不同的索引里;索引的名称必须全部是小写;在单个集群中,可以定义任意多个索引;索引具有mapping和setting的概念mapping用来定义文档字段的类型,setting用来定义不同数据的分布。

类型(Type)

类型就相当于MySql里的表,我们知道MySql里一个库下可以有很多表,最原始的时候ES也是这样,一个索引下可以有很多类型,但是从6.0版本开始,type已经被逐渐废弃,但是这时候一个索引仍然可以设置多个类型,一直到7.0版本开始,一个索引就只能创建一个类型了 (_doc)

文档(document)

我们知道Java是面向对象的,而Elasticsearch是面向文档的,也就是说文档是所有可搜索数据的最小单元。ES的文档就像MySql中的一条记录,只是ES的文档会被序列化成json格式,保存在Elasticsearch中;这个json对象是由字段组成,字段就相当于Mysql的列,每个字段都有自己的类型(字符串、数值、布尔、二进制、日期范围类型);当我们创建文档时,如果不指定字段的类型,Elasticsearch会帮我们自动匹配类型;每个文档都有一个ID,类似MySql的主键,咱们可以自己指定,也可以让Elasticsearch自动生成;文档的json格式支持数组/嵌套,在一个**索引(数据库)**或类型(表)里面,你可以存储任意多的文档。

分片(shard)
ES里面的索引可能存储大量数据,这些数据可能会超出单个节点的硬件限制。

**为了解决这个问题,ES提供了将索引细分为多个碎片的功能,这就是分片。**这里咱们可以简单去理解,在创建索引时,只需要咱们定义所需的碎片数量就可以了,其实每个分片都可以看作是一个完全功能性和独立的索引,可以托管在集群中的任何节点上。

分片有什么好处和注意事项

#1.通过分片技术,咱们可以水平拆分数据量,同时它还支持跨碎片(可能在多个节点上)分布和并行 *** 作,从而提高性能/吞吐量;
#2.ES可以完全自动管理分片的分配和文档的聚合来完成搜索请求,并且对用户完全透明;
#3.主分片数在索引创建时指定,后续只能通过Reindex修改,但是较麻烦,一般不进行修改。

副本分片(replica shard)
熟悉分布式的朋友应该对副本对概念不陌生,为了实现高可用、遇到问题时实现分片的故障转移机制,ElasticSearch允许将索引分片的一个或多个复制成所谓的副本分片。

副本分片有什么作用和注意事项呢?

#1.当分片或者节点发生故障时提供高可用性。因此,需要注意的是,副本分片永远不会分配到复制它的原始或主分片所在的节点上;
#2.可以提高扩展搜索量和吞吐量,因为ES允许在所有副本上并行执行搜索;
#3.默认情况下,ES中的每个索引都分配5个主分片,并为每个主分片分配1个副本分片。主分片在创建索引时指定,不能修改,副本分片可以修改。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5705707.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存