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