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,常用于中间层暂时缓存。


猜你喜欢

转载自blog.csdn.net/u012100968/article/details/80799700