使用filebeat代替logstash进行信息过滤

627 阅读3分钟

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情

1. 前言

由于项目中设备资源有限,所以无法使用logstash,于是用filebeat即进行数据接收,也进行数据清洗,从接收数据中过滤数据。

2. filebeat和logstash比较

Filebeat的优势:

  • 轻量级:Filebeat是一个轻量级的数据收集器,占用资源少,易于部署和管理。
  • 高效性:Filebeat使用内置的多线程机制,能够快速收集、解析和发送数据,具有高效性。
  • 直接发送:Filebeat将数据直接发送到Elasticsearch或Logstash等输出,减少了处理时间和延迟。

Filebeat的劣势:

  • 功能有限:Filebeat功能相对简单,只能收集和转发日志,不能进行复杂的数据处理和转换。

  • 不适用于所有日志:Filebeat主要适用于结构化日志,对于非结构化或复杂的日志可能不太适合。 Logstash的优势:

  • 功能强大:Logstash是一个功能强大的日志收集和处理工具,可以进行数据转换、过滤和聚合等复杂的处理操作。

  • 处理多种数据源:Logstash支持多种输入和输出格式,可以处理各种类型的数据源。

  • 社区支持:Logstash有一个庞大的社区支持,有大量的插件和文档可供使用。

Logstash的劣势:

  • 资源占用大:Logstash相对于Filebeat而言比较重量级,占用的资源也相对较多。

  • 速度相对较慢:由于Logstash进行了复杂的数据处理操作,处理速度可能相对较慢。

3.filebeat从信息中提取字段

在elasticsearch 5.0版本以后,elasticsearch中添加了Ingest Node功能,以前如果需要对数据进行加工,都是在索引之前进行处理,比如logstash可以对日志进行结构化和转换,现在直接在es就可以处理了,目前es提供了一些常用的诸如convert、grok之类的处理器,在使用的时候,先定义一个pipeline管道,里面设置文档的加工逻辑,在建索引的时候指定pipeline名称,那么这个索引就会按照预先定义好的pipeline来处理了。

示例如下: 在filebeat.yml中设置

filebeat.prospectors:
- input_type: log
 - /work/1.log
output.elasticsearch:
  hosts: ["localhost:9200"]
  pipeline: "test-pipeline"

在/work下创建pipeline.json文件:

{ "description" : "test-pipeline", "processors" : [ { "grok" :{ "field" : "message", "patterns" :["%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}" ] } }

] }

将pipeline导入elasticsearch中

curl -XPUT 'http://localhost:9200/_ingest/pipeline/test-pipeline' -d@/work/pipeline.json 1 在/work下创建文件1.log,内容为:

55.3.244.1 GET /index.html 15824 0.0431

输出结果为:

{ "_index": "filebeat-2017.03.15", "_type": "log", "_id": "AVrQ6Jg-W7NyrdbKiTgl", "_score": null, "_source": { "request": "/index.html", "offset": 73, "method": "GET", "input_type": "log", "source": "/work/1.log", "message": "55.3.244.1 GET /index.html 15824 0.043", "type": "log", "duration": "0.043", "@timestamp": "2017-03-15T07:39:48.649Z", "bytes": "15824", "beat": { "hostname": "xia-VirtualBox", "name": "xia-VirtualBox", "version": "5.2.2" }, "client": "55.3.244.1" }, "fields": { "@timestamp": [ 1489563588649 ] }, "sort": [ 1489563588649 ] }

这样massage中的字段就被提取出来成为了新的字段。