logstash的工作原理
logstash的工作原理
logstash时间处理管道有三个阶段:输入 -> 过滤器 -> 输出。输入生成事件,过滤器修改它们,输出将它们发送到其它地方。输入和输出支持编码解码器,使我们能够在数据进入或退出管道时对数据进行编码和解码,而无需使用单独的过滤器。
输入input
你使用输入将数据导入logstash,一些常用的输入是:
①file:从文件系统上读取,与Linux命令非常相似 tailf
②syslog:在已知端口514上侦听syslog消息并根据RFC3164格式进行解析
③redis:使用redis通道和redis列表从redis服务器读取
④beats:处理beats发送的事件
过滤器filter
过滤器是logstash管道中的中间处理设备。你可以将过滤器与条件组合,以便在满足特定条件时对其执行操作。一些有用的过滤包括:
①grok:解析并构造任意文本。grok是目前logstash中将非结构化日志数据解析为结构化和可查询内容的最佳方式。有了内置与logstash的120中模式,你能找到你最满足的模式
②mutate:对事件字段执行常规转换。可以重命名、删除、替换和修改事件中的字段
③drop:完全删除事件,例如debug事件
④clone:制作事件的副本,可能添加或删除字段
输出output
输出是logstash管道的最后阶段。事件可以有多个输出,但是一旦所有输出处理完成,事件就完成了它的执行。一些常用的输出包括:
①elasticsearch:将事件数据发送到elasticsearch。如果你计划以高效、方便且易于查询的格式保存数据,elasticsearch是你的最佳选择
②file:将事件数据写入磁盘文件
③graphite:将事件数据发送到graphite,这是一种用户存储和绘制指标的流行开源工具
④statsd:将事件数据发送到statsd,这是一种“侦听统计信息,如计数器和定时器,通过UDP发送并将聚合发送到一个或多个可插入后端”的服务。
编解码器codecs
编解码器基本上是作为输入和输出的一部分。使用编解码器开源轻松地将消息传输与序列化过程分开,流行的编解码器包括json、msgpack和plain(文本)。
·json:以json格式编码或解码数据
·multiline:将多行文本时间合并到一个事件中
执行模型Execution Model
logstash时间处理管道协调input、filter、output的执行。
logstash管道中的每个输入阶段都在其自己的线程中运行。将事件写入内存或磁盘上的中央队列。每个管道工作线程从该队列中获取一批事件,通过配置的filter运行一批事件,然后通过任何输出运行过滤的事件。批处理的大小和管道工作线程的数量是可配置的。
默认情况下,logstash在管道阶段(输入 -> 过滤器 -> 输出)之间使用内存中有界队列来缓冲事件。如果logstash正常地终止,则存储在内存中的所有事件都会丢失。为了防止数据丢失,你可以启用将正在进行的事件保存到磁盘。