logstash运行原理
Logstash事件处理管道包括三个阶段:输入→过滤器→输出。输入会生成事件,过滤器会对其进行修改,而输出会将其发送到其他地方。输入和输出支持编解码器,使您可以在数据进入或退出管道时对其进行编码或解码,而不必使用单独的过滤器。
输入项
您可以使用输入将数据获取到Logstash。一些更常用的输入是:
-
file:从文件系统上的文件读取,非常类似于UNIX命令
tail -0F
- syslog:在知名端口514上侦听syslog消息,并根据RFC3164格式进行解析
- redis:使用redis通道和redis列表从redis服务器读取。Redis经常在集中式Logstash安装中用作“broker”,该安装会将来自远程Logstash“托运人”的Logstash事件排队。
筛选器
筛选器是Logstash管道中的中间处理设备。如果事件符合特定条件,则可以将过滤器与条件语句结合使用以对事件执行操作。一些有用的过滤器包括:
- grok:解析和构造任意文本。当前,Grok是Logstash中将非结构化日志数据解析为结构化和可查询内容的最佳方法。Logstash内置120种模式,很可能会找到满足您需求的模式!
- mutate:对事件字段执行常规转换。您可以重命名,删除,替换和修改事件中的字段。
- drop:完全删除事件,例如调试事件。
- clone:复制事件,可能会添加或删除字段。
- geoip:添加有关IP地址地理位置的信息
产出
输出是Logstash管道的最后阶段。一个事件可以通过多个输出,但是一旦完成所有输出处理,该事件就完成了执行。一些常用的输出包括:
- elasticsearch:将事件数据发送到Elasticsearch。如果您打算以一种高效,便捷且易于查询的格式保存数据,那么Elasticsearch是您的最佳选择。)
- file:将事件数据写入磁盘上的文件。
- 石墨:将事件数据发送到石墨,石墨是一种流行的开源工具,用于存储和绘制指标图形。http://graphite.readthedocs.io/en/latest/
- statsd:将事件数据发送到statsd,该服务“通过UDP侦听统计信息(如计数器和计时器),并将聚合发送到一个或多个可插拔后端服务”。
编解码器
编解码器基本上是流过滤器,可以作为输入或输出的一部分进行操作。编解码器使您可以轻松地将消息的传输与序列化过程分开。流行的编解码器包括json
,msgpack
和plain
(文本)。
- json:以JSON格式编码或解码数据。
- multiline:将多行文本事件(例如java异常和stacktrace消息)合并为一个事件。
执行模型
Logstash事件处理管道协调输入,过滤器和输出的执行。
Logstash管道中的每个输入阶段都在其自己的线程中运行。输入将事件写入到内存(默认)或磁盘中的中央队列。每个管道工作程序线程都会从该队列中除去一批事件,通过配置的筛选器运行这批事件,然后通过任何输出运行经过筛选的事件批处理的大小和管道工作线程的数量是可配置的(请参阅“调整和分析Logstash性能”)。
默认情况下,Logstash在管道阶段(输入→过滤器和过滤器→输出)之间使用内存中有界队列来缓冲事件。如果Logstash不安全地终止,则存储在内存中的所有事件都将丢失。为了帮助防止数据丢失,可以启用Logstash将正在进行的事件持久保存到磁盘。有关更多信息,请参见 持久队列。