从Elasticsearch说开去(4):Logstash输入与输出

2020-06-01 00:00:00 参数 插件 输入 输出 死信

文/田雪松



Logstash管道可以配置多个输入插件,这可以将不同源头的数据整合起来做统一处理。在分布式系统中,数据都分散在不同的容器或不同的物理机上,每一份数据往往又不完整,需要类似Logstash这样的工具将数据收集起来。比如在微服务环境下,日志文件就分散在不同机器上,即使是单个请求的日志也有可能分散在多台机器上。如果不将日志收集起来,就无法查看一个业务处理的完整日志。

Logstash管道也可以配置多个输出插件,每个输出插件代表一种对数据处理的业务需求。比如对日志数据存档就可以使用s3输出插件,将日志数据归档到S3存储服务上;还可以使用elasticsearch输出插件,将数据索引到Elasticsearch中以便快速检索等等。在业务系统创建之初,人们对于数据究竟会产生什么样的价值并不清楚。但随着人们对于业务系统理解的深入,对数据处理的新需求就会迸发出来。面对新需求,只要为Logstash管道添加新的输出插件就能立即与新的数据处理需求对接起来,而对已有数据处理业务又不会产生任何影响。到目前为止,Logstash对于常见的数据处理需求都可以很好的对接,这包括数据归档存储、数据分析处理、数据监控报警等等。

Logstash官方提供的输入插件与输出插件都有50多种,而在这共计100多种的插件中每一种插件又有不同的配置参数,想在一章之内将它们彻底介绍清楚有一定的困难。但总结这些插件时会发现,大多数输入插件也会在输出插件中出现。基于这种考量也限于篇幅,本章根据插件所属大类分别按小节介绍,对于比较特殊的插件将在后一节统一介绍。

在开始介绍这些插件前,先来介绍两个简单的插件,即stdin输入插件和stdout插件。这两个插件分别代表标准输入和标准输出,也就是命令行控制台。由于它们比较简单,所以一般不需要做任何配置就可以直接使用。stdin只有一组通用参数,这些参数不仅对stdin有效,对其它输入插件也有效。具体如表1所示:

表1 输入插件通用参数

同样的,stdout也是只有通用参数,这些参数也是对所有输出插件都有效。具体如表2所示:

表2 输出插件通用参数

其中codec参数在不同的插件中是不一样的,表13.1和13.2只是示意地列出了stdin和stdout的默认编解码器,其它插件的编解码器在本书第12章第12.3.1节中有详细介绍。stdin和stdout配置示例在第1章和第12章中都曾介绍过,它们可以在学习其它插件时配合使用以形成完整的管道。限于篇幅,如果没有特别的配置,后续示例中涉及这两个插件时一般都会省略掉。

1 beats与elasticsearch

由于同属Elastic Stack家族,Beats和Elasticsearch无疑是Logstash的佳搭档。Beats组件一般只能作为Logstash的输入,通过beats输入插件接入Logstash。而Elasticsearch组件既可以作为输入也可以作为输出,所以同时存在着elasticsearch输入插件和elasticsearch输出插件。

1.1 beats插件

由于Beats组件只能作为Logstash输入,所以只有beats输入插件而不存在输出插件。Beats组件本身又是一个大家族,每一种Beats类型都对应一个特定领域的数据收集需求。所以Beats组件基本上可以代替Logstash其它输入插件,这使得beats输入插件在所有插件中具有非常重要的地位。尽管beats输入插件非常重要,但beats输入插件在使用上非常简单,只要通过port参数指定Logstash监听Beats组件的端口即可。例如在示例1中,Logstash监听Beats组件的端口被设置为5044:

input {
 beats {
 port => 5044
 }
}

相关文章