ELK Stack-Logstash

Logstash工作原理

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

 

输入(input)

将获取到的数据输入到Logstash中,比较常用的输入:

  • file: 从文件系统上的文件进行读取,非常类似于LINUX命令 tailf -f
  • syslog: 在众所周知的514端口上监听syslog消息并根据RFC3164格式进行解析
  • redis:从redis服务器读取数据
  • beats:处理Beats发送的事件

 

过滤器(filter)

过滤器是Logstash管道中的中间处理阶段,如果事件符合一定的条件,你可以将过滤器与条件语句组合在一起,对其进行操作,常用的过滤器:

  • grok:解析和构造任意文本,Grok是目前Logstash中解析非结构化日志数据到结构化数据的最佳方式,内置有120种解析方式
  • mutate:对事件字段执行一般的转换,可以重命名、删除、替换和修改事件中的字段
  • drop:完全删除事件,例如debug事件或grok匹配失败的事件
  • clone:复制事件,可能添加或删除字段
  • geoip:添加关于IP地址地理位置信息(可配合kibana进行牛逼的可视化)

 

输出(output)

输出是logstash管道的最后阶段,事件可以通过多个输出,一旦所有的输出处理完成,事件就完成了它的执行,一些常用的输出包括:

  • elasticsearch:发送事件数据到Elasticsearch,如果你打算以一种高效、方便、易于查询的格式保存数据,那么使用elasticsearch是可行的
  • file:将事件写入磁盘的文件上
  • graphite:发送事件到graphite, 这是一种流行与存储和绘制指标的开源工具

 

执行模型

Logstash事件管理协调输入、过滤器和输出的执行

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

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

posted @ 2020-10-22 14:03  下山打老虎i  阅读(72)  评论(0)    收藏  举报