logstash简介及架构

1、logstash介绍

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

2、logstash架构简介

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

下面举例讲解:

stdin:标准输入

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

stdout:标准输出

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

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

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

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

3、测试

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

4、详细讲解logstash的架构

下图是logstash6.x的架构

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

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

每一个pipeline有Batcher、filter、output。

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

看上图可知我有三个pipeline。

5、Life of an Event

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

web.log为我们的配置文件

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

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

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

6、Queue的分类

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

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

7、Persistent Queue In Disk

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的性能

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

9、打开PQ

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

 还有一些:

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

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

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

10、logstash中线程的相关情况

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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章