Logstash 工作原理

Logstash 是如何工作的?

  Logstash 事件处理管道拥有三个阶段:输入 → 过滤 → 输出。

  输入产生事件,过滤修改事件、输出将修改后的事件输出到任何目的地。输入和输出搜支持编解码器,使您可以在数据出入管道时对其进行编码或解码,而不必再使用单独的过滤器。

Inputs

  使用 Input 插件将数据输入至 Logstash 中。

  一些常用的 Input 插件有:

  • file:从文件系统中的文件读取数据。
  • syslog:侦听514端口上的syslog消息并根据RFC3164格式进行解析
  • reids:同时使用 redis 通道和 redis 列表从 redis 服务器上读取数据。
  • beats:处理通过 Beats 发送的事件。

Filters

  过滤器插件是在 Logstash 管道中的中间处理设备。如果事件符合特定的条件,则可以将过滤器与条件结合使用以对事件执行操作。

  一些常用的 filters 包括:

  • grok:解析和结构化抽象的文本信息。Grok 是目前在 Logstash 中解析非结构化日志数据的最佳方式。其拥有120种内置的解析模式。
  • mutate:对事件字段执行转换。可以重命名,删除,代替和修改事件种的字段。
  • drop:完全删除事件,例如调试事件。
  • clone:对事件进行复制。
  • geoip:添加有关IP地址地理位置的信息。

Outputs

  输出是 Logstash 管道的最后阶段。一个事件可以通过多个输出进行传递,但一旦所有输出处理都完成了,该事件就完成了全部流程的执行。

  一些常用的 outputs 包括:

  • elasticsearch:发送事件数据到 ES 中。
  • file:将事件数据写入到硬盘中的文件。
  • graphite:暂时不知道是什么。
  • statsd:也暂时不知道是什么。

Codecs

  编解码器是最基本的流过滤器,它可以作为输入或输出的一部分进行操作。编解码器使您可以轻松地将消息的传输与序列化过程分开。

  一些常用的编解码器:

  • json:以 Json 格式对数据进行编码或解码。
  • multiline:合并多行文本事件例如 Java 异常和 stacktrace 消息进单个事件。

 

Logstash 运作模型

  Logstash 事件处理管道协调输入、过滤器和输出的执行。Logstash 管道中的每个输入阶段都在其自己的线程中运行。输入插件写入事件到内存(默认)或硬盘的中央队列中,每个管道工作线程都会从该队列中提取一批事件,通过配置的过滤器运行事件批处理,然后再通过任意输出插件运行过滤后的事件。事件批处理的大小和管道工作线程的数量都是可配置的(Tuning and Profiling Logstash Performance)。

  默认情况下,Logstash 在管道各阶段(input → filter and filter → output)之间使用内存中的有界队列来缓冲事件。如果 Logstash 异常终止了,存储在内容中的事件将会丢失。为了防止数据丢失,你可以启用 Logstash 将正在进行的事件持久化到硬盘(Persistent Queues)。

 

处理细节

  清晰的理解 Logstash 是如何工作的,并且组件间是如何相互联系的可以帮助您当您需要设置或者调整 Logstash 环境时更好的做决定。

事件顺序

  根据设计和默认情况,Logstash 并不保证事件的顺序。重新排序可以在两个地方进行:

  • 批次内的事件可以在过滤器处理期间重新排序。
  • 当一个或多个批次的处理速度快于其他批次时,可以对飞行中的批次进行重新排序。

  当维护事件顺序很重要时,请使用单个工作进程并设置 pipeline.ordered => true。这种方法可确保批处理是一个接一个的运行的,并且事件在批处理中保持其顺序。

pipeline.ordered setting

  在 logstash.yml 文件中的 pipeline.ordered 设置使您可以更好地控制单个工作进程管道地事件顺序。

 

 

  

 

posted @ 2021-01-11 15:50  hengistwu  阅读(958)  评论(0)    收藏  举报