本文主要是介绍ELK日志分析平台之Logstash,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1.1.1 基本概念
Logstash是一个开源的数据收集引擎,它具备实时数据传输能力,可以统一过滤来自不同源的数据,并按照开发者的制定的规范输出到目的地。
1.1.2 组成结构
Logstash 通过管道进行运作,管道有两个必需的元素,输入和输出,还有一个可选的元素,过滤器。
输入插件从数据源获取数据,过滤器插件根据用户指定的数据格式修改数据,输出插件则将数据写入到目的地。如下图:
实际上, logstash从1.3.0 版开始引入新的概念:codec(来自Coder/decoder 两个单词的首字母缩写)后,我们就需要纠正之前的一个概念。Logstash 不再只是一个input | filter | output 的数据流,而是一个input | decode | filter |encode | output 的数据流!codec 就是用来 decode、encode事件的。
这里解释一下,在1.3.0 版之前,logstash 只支持纯文本形式输入,然后以过滤器处理它。但现在,我们可以在输入期处理不同类型的数据,这全是因为有了 codec 设置。
根据自己的需求在对应的位置配置input插件、filter插件、output插件和codec插件即可。(input插件、output插件是必选项)
1.1.3 插件用法示例
1.1.3.1 input插件
input 数据输入端,可以接收来自任何地方的源数据。比如:
a. file:从文件中读取
b. syslog:监听在514端口的系统日志信息,并解析成RFC3164格式。
c. redis:从redis-server list 中获取
d. beat:接收来自Filebeat的事件
e. jdbc:从数据库中读取
下面以从file和jdbc为例,简要介绍了一下相关配置语法。
1.1.3.2 filter插件
Filter 数据中转层,主要进行格式处理,数据类型转换、数据过滤、字段添加,修改等,常用的过滤器如下。
a. grok: 通过正则解析和结构化任何文本。Grok 目前是logstash最好的方式对非结构化日志数据解析成结构化和可查询化。logstash内置了120个匹配模式,满足大部分需求。
b. mutate: 在事件字段执行一般的转换。可以重命名、删除、替换和修改事件字段。
c. drop: 完全丢弃事件,如debug事件。
d. clone: 复制事件,可能添加或者删除字段。
e. geoip: 添加有关IP地址地理位置信息。
下面以一个例子做了大概的说明。
1.1.3.3 Codec插件
codec 的引入,使得 logstash 可以更好更方便的与其他有自定义数据格式的运维产品共存,比如:
a. rubydebug:一般只会用在stdout 插件中,作为配置测试或者调试的工具
b. plain:主要用于事件之间没有分隔的纯文本,可自定义格式;
c. json:如果数据为json格式,可直接使用该插件,从而省掉filter/grok的配置,降低过滤器的cpu消耗
d. multiline:有些日志事件在打印的时候,可能会有多行,比如java 错误日志。而logstash默认是一行一行读取的,这个时候就要用到multiline格式了。Multiline通过正则来匹配多行日志,常见是只匹配开头的符号。
下面以multiline做了一个大概的说明:
1.1.3.4 output插件
output 是logstash工作的最后一个阶段,负责将数据输出到指定位置,兼容大多数应用,常用的有:
a. elasticsearch: 发送事件数据到 Elasticsearch,便于查询,分析,绘图。
b. file: 将事件数据写入到磁盘文件上。
c. mongodb:将事件数据发送至高性能NoSQL mongodb,便于永久存储,查询,分析,大数据分片。
d. redis:将数据发送至redis-server,常用于中间层暂时缓存。
这篇关于ELK日志分析平台之Logstash的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!