logstash简介及架构

1、logstash介绍

  • 数据收集处理引擎
  • ETL工具

logstash简介及架构

2、logstash架构简介

logstash简介及架构

logstash简介及架构

logstash简介及架构

Logstash Event是一个java object,它对外暴露了获取内部字段以及修改内部字段值的一些api。

logstash简介及架构

logstash简介及架构

下面举例讲解:

logstash简介及架构

stdin:标准输入

codec是line,这个codec的作用就是按照每一行切割数据,就是说把每一行都转换成logstash event

stdout:标准输出

codec是json,这个codec的作用就是把每一个logstash event转换成json的对象输出。

logstash简介及架构

line codec decode是按照换行符\n切割的。所以一行原始数据被分成了两个event。

所以,在原始数据和event之间不是一对一的关系。

logstash简介及架构

event经过json codec encode后就把每一个logstash event输出成 json object。

3、测试

logstash简介及架构

logstash简介及架构

可以看到上图的数据有一个message为空的数据,是因为在bar的后面又换了一行。

4、详细讲解logstash的架构

下图是logstash6.x的架构

logstash简介及架构

input是可以有多个的,每个input都有自己的codec,箭头代表数据流向。

数据会经过Queue,Queue会把流入的数据分发到不同的pipeline中。

每一个pipeline有Batcher、filter、output。

Batcher的作用是批量的从Queue中取数据。Batcher是可以配置的,比如一次取一百个数据。

看上图可知我有三个pipeline。

5、Life of an Event

这里介绍logstash Event的生命历程。

web.log为我们的配置文件

logstash简介及架构

logstash简介及架构

随着时间的推移,Batcher会收集越来越多的数据,当达到了处理数据的条件之后(Batcher会有两种条件,数目或时间,数目达到了设定的阈值或者是时间到了),Batcher就会把数据发送到filter,在filter中对每一条logstash Event进行相关的处理。

logstash简介及架构

最后output就会把数据输出到你指定的输出。

logstash简介及架构

那么,输出之后,会把处理的ACK发送给Queue,代表着我刚才处理了哪些event。

6、Queue的分类

logstash有两个Queue,一个是In Memory在内存中的Queue,这个Queue是固定大小的,是没法通过配置文件来修改的。坏处就是下图所示。

为了解决这个问题,推出了持久化Queue就是Persistent Queue In Disk,这个就是基于磁盘对处理数据进行一个记录。

logstash简介及架构

7、Persistent Queue In Disk

logstash简介及架构

Data从Input进来,

  1. Data到PQ中。
  2. PQ会把这个数据在磁盘中备份一份。
  3. PQ告诉Input说这条数据我已经收到了。前提是Input要支持这种机制,有了这种机制才能感知目前logstash的这种处理能力。

接下来蓝色部分,

  1. 数据就从PQ到filter output
  2. output把事件处理之后就会发送ACK到PQ
  3. PQ收到了这个ACK之后,就会把磁盘上的数据删除掉

这样就得知,即使发生了宕机,我的数据还是在disk中有的,只需要重启logstash把disk中的数据重新消费一次就解决了。

8、Memory Queue与PQ的性能

logstash简介及架构

可以看到性能的下降不是很严重,估计是在5%以内,如果没有特殊需求一般建议把logstash的PQ打开。

9、打开PQ

logstash简介及架构

queue.max_bytes默认是1GB,开大一点后,Queue能存储的数据也就多了一点。

 还有一些:

path.queue PQ存到磁盘的哪个位置。

queue.page_capacity 控制消息队列每一个文件的大小。

queue.checkpoint.writes 提升容灾能力,如果是1 表示每写一个数据都去做盘,顶多也就会丢失一条数据。

10、logstash中线程的相关情况

logstash简介及架构

调优的时候主要就是调整 Pipeline Workder Thread数。

logstash简介及架构