Logstash-工作原理

Logstash-工作原理

Logstash工作原理

Logstash 处理管道有三个阶段:输入→过滤器→输出,输入生成事件,过滤器修改它们,然后输出将它们发送到其他地方。输入和输出支持编解码器,使你能够在数据进入或离开管道时对其进行编码或解码,而无需使用单独的过滤器。

Logstash-工作原理

输入(Inputs)

可以通过输入组件将数据发送给Logstash。下面是一些常见的输入途径:

1)文件:从文件系统的文件中读取,如UNIX命令tail -0F

2) syslog: 在514端口上监听系统日志消息并根据RFC3164格式进行解析

3)redis: 通过使用redis通道和列表从redis数据库服务器获取数据。Redis通常被用作集中式Logstash的缓存(“broker”),以消息队列的方式搬运事件输入到远端Logstash。

4) beats: 处理Beats发送的事件,beats包括filebeat, winlogbeat等。

过滤器(filter)

过滤器是Logstash管道中间处理部件。如果事件符合特定条件,则可以将过滤器与条件语句结合使用以对事件执行操作。一些有用的过滤器包括:

1)grok: 解析和构造任意的文本,Grok是目前Logstash中解析非结构化数据到结构化和可查询数据最好的插件。在内置的120中模式中,就很有可能找到一个满足你的需要的模式。

2)mutate: 对事件字段进行常规转换,可以重命名,删除,替换和修改事件中的字段。

3)drop: 删除整个事件数据,例如删除debug事件。

4)clone: 制作事件的副本,可能删除和添加字段。

5)geoip: 添加有关IP地址的地理位置信息(可以在kibana中展现绚丽的图表)。

输出(Outputs)

输出是Logstash管道的最后一个阶段。事件消息可以经过多个输出接收端,一旦所有的输出都处理完成,就完成了它的任务。一些常用的输出包括:

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

编解码器

编解码器可以作为输入或输出的基本流过滤器的一份子。使用编解码器可以轻松地分割传送过来的已经被序列化的数据。流行的编解码器包括json, msgpack和plan(text)。 ​ 1)json:以JSON格式对数据进行编码或解码。 ​ 2)multiline:将多行文本事件合并到一个单一的行。例如:java异常和堆栈跟踪消息。

执行模型

Logstash事件通过管道的方式协调输入,过滤器和输出组件的执行。

Logstash管道中的每个输入阶段都在自己的线程中运行,输入将事件写入位于内存(默认)或磁盘上的*队列,每个管道工作线程从这个队列中取出一批事件,通过配置的过滤器运行事件批处理,然后通过任何输出运行过滤的事件,可以配置批处理的大小和管道工作线程的数量。

默认情况下,Logstash使用有限内存队列在管道之间(输入→过滤器和过滤器→输出)来缓冲事件,如果Logstash不安全的终止,则存储在内存中的任何事件都将丢失。为了防止数据丢失,你可以启用Logstash将运行中的事件持久化到磁盘上。