输入:bin/logstash -e 'input { stdin { } } output { stdout {} }'
输入helloworld可以看到:
Hello World(输入)经过 Logstash 管道(过滤)变成:2017-10-27T07:17:51.034Z localhost.localdomain Hello World (输出)。
在生产环境中,Logstash 的管道要复杂很多,可能需要配置多个输入、过滤器和输出插件。
因此,需要一个配置文件管理输入、过滤器和输出相关的配置。配置文件内容格式如下:
根据自己的需求在对应的位置配置 输入插件、过滤器插件、输出插件 和 编码解码插件 即可。
在使用插件之前,我们先了解一个概念:事件。
Logstash 每读取一次数据的行为叫做事件。
在 Logstach 目录中创建一个配置文件,名为 logstash.conf(名字任意)。
输入插件允许一个特定的事件源可以读取到 Logstash 管道中,配置在 input {} 中,且可以设置多个。
修改配置文件:
其中,messages 为系统日志。
保存文件。键入:
bin/logstash -f logstash.conf
在控制台结果如下:
在控制台结果如下:
输出插件将事件数据发送到特定的目的地,配置在 output {} 中,且可以设置多个。
修改配置文件:
日志内容随便定义。
配置文件中使用 elasticsearch 输出插件。输出的日志信息将被保存到 Elasticsearch 中,索引名称为 index 参数设置的格式。
bin/logstash -f logstash.conf
可以看到数据是按照行存储的:
编码解码插件本质是一种流过滤器,配合输入插件或输出插件使用。
从上图中,我们发现一个问题:Java 异常日志被拆分成单行事件记录到 Elasticsearch 中,这不符合开发者或运维人员的查看习惯。因此,我们需要对日志信息进行编码将多行事件转成单行事件记录起来。
我们需要配置 Multiline codec 插件,这个插件可以将多行日志信息合并成一行,作为一个事件处理。
Logstash 默认没有安装该插件,需要开发者自行安装。键入
bin/logstash-plugininstalllogstash-codec-multiline
修改配置文件:
bin/logstash-flogstash.conf:
过滤器插件位于 Logstash 管道的中间位置,对事件执行过滤处理,配置在 filter {},且可以配置多个。
本次测试使用 grok 插件演示,grok 插件用于过滤杂乱的内容,将其结构化,增加可读性。
bin/logstash-plugin install logstash-filter-grok