通过Filebeat把日志传入到Elasticsearch

学习的地方:配置文件中预先处理字段数据的用法

通过Filebeat把日志传入到Elasticsearch

Elastic Stack被称之为ELK (Elasticsearch,Logstash and Kibana)。由于beats的加入,现在很多人把ELK说成为ELKB。这里的B就是代表Beats。Beats在Elasticsearch中扮演很重要的角色。

Beats可以帮我们采集数据,并把它传入到Elasticsearch或Logstash之中。Beats在发送数据之前也可以帮我们做一些简单的数据处理。

Beats是由Go语言来进行编程的。它是一种非常轻量级的应用,可以直接运行于客户端中。

什么是Filebeat

Filebeat是一个属于Beats系列的日志托运者 - 一组安装在主机上的轻量级托运人,用于将不同类型的数据传送到ELK堆栈进行分析。每个Beat专门用于传送不同类型的信息 - 例如,Winlogbeat发布Windows事件日志,Metricbeat发布主机指标等等。顾名思义,Filebeat提供日志文件。

在基于ELK的日志记录管道中,Filebeat扮演日志代理的角色 - 安装在生成日志文件的计算机上,跟踪它们,并将数据转发到Logstash以进行更高级的处理,或者直接转发到Elasticsearch进行索引。因此,Filebeat不是Logstash的替代品,但在大多数情况下可以并且应该同时使用。

Logstash需要运行JVM,这种依赖性与Ruby中的实现相结合成为大量内存消耗的根本原因,尤其是涉及多个管道和高级过滤时。

Beats是基于Lumberjack协议用Go语言编写的,旨在实现内存占用少,处理大量数据,支持加密以及有效处理背压。例如,Filebeat记录在注册表中索引的最后一条成功行,因此,如果网络问题或传输中断,Filebeat将记住重新建立连接时中断的位置。如果输出,Logstash或Elasticsearch存在摄取问题,Filebeat将减慢文件读取速度。

在选用Filebeat或者是Logstash呢

简单的答案是 - 至少在记录文件时,您几乎总是需要使用Filebeat和Logstash的组合。为什么?因为除非您只对时间戳和消息字段感兴趣,否则仍需要Logstash用于ETL(转换)中的“T”,并充当多个日志记录管道的聚合器。

Filebeat是当今最好的日志文件发送器之一 - 它轻量级,支持SSL和TLS加密,支持背压,具有良好的内置恢复机制,并且非常可靠。但是,在大多数情况下,它不能使用用于日志增强的过滤器将日志转换为易于分析的结构化日志消息。这就是Logstash所扮演的角色。

Logstash充当聚合器 - 在将数据推送到管道之前从各种源中提取数据,通常是Elasticsearch,但也可以是大型生产环境中的缓冲组件。值得一提的是,最新版本的Logstash还包括在磁盘上存储消息队列时对持久队列的支持。

Filebeat和Beats系列的其他成员充当部署在边缘主机上的轻量级代理,将数据泵入Logstash以进行聚合,过滤和丰富。

安装Filebeat

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-linux-x86_64.tar.gz
tar xzvf filebeat-7.3.1-linux-x86_64.tar.gz

这样我们的Filebeat就安装好了。请注意:由于ELK迭代比较快,我们可以把上面的版本7.3.1替换成我们需要的版本即可。我们先不要运行Fliebeat。

在默认的情况下,我们直接运行filebeat的话,它选择的默认的配置文件是当前目录下的filebeat.yml文件。

filebeat.yml

    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - ./sample.log

    output.logstash:
      hosts: ["localhost:5044"] 

我们可以打入一个测试命令来看一下执行的结果:

./filebeat test output

显示结果:

logstash: localhost:5044...
  connection...
    parse host... OK
    dns lookup... OK
    addresses: ::1, 127.0.0.1
    dial up... ERROR dial tcp 127.0.0.1:5044: connect: connection refused

返回信息显示,logstash没有运行,端口5044没有被打开。不使用Logstash,直接将从Filebeat中收集到的数据发送到Elasticsearch中。

准备测试数据

在网址https://logz.io/sample-data下载一个叫做apache-daily-access.log的log文件。用Atom编辑器打开这个文件,显示有17279条数据:

每一条的数据是这样的格式:

20.168.183.41 - - [11/Sep/2019:00:00:05 +0000] "GET /category/health HTTP/1.1" 200 132 "/item/software/623" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7"

配置Filebeat

为了能够filebeat把这个log数据传输到Elasticsearch,使用如下的配置文件。创建一个叫做filebeat_es.yml文件:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /Users/liuxg/data/apache-daily-access.log

output:
  elasticsearch:
    hosts: ["localhost:9200"]

这里的配置非常简单。在上面的paths里,它指向我们的存放的log文件。当你们自己做这个练习的时候,请修改这个文件的路径。我们可以直接运行filebeat:

$ ./filebeat -c filebeat_es.yml

我们也可以这样写:

filebeat.inputs:
- type: log
  enabled: true
  fields:
    apache: true
  paths:
    - /Users/liuxg/data/apache-daily-access.log

output.elasticsearch:
    hosts: ["localhost:9200"]

请注意这里的output.elasticsearch。这样的写法和上面的稍微有些不同。看个人的爱好。在上面,我们在source里加入了一个fields叫做“appach: true"。

{
  "_index" : "filebeat-7.3.0-2019.09.11-000001",
  "_type" : "_doc",
  "_id" : "637VIG0BJD_DqHjgqvC5",
  "_score" : 1.0,
  "_source" : {
    "@timestamp" : "2019-09-11T14:58:55.902Z",
    "message" : """144.228.123.71 - - [11/Sep/2019:01:52:35 +0000] "GET /category/games HTTP/1.1" 200 117 "/search/?c=Books+Software" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"""",
    "input" : {
      "type" : "log"
    },
    "fields" : {
      "apache" : true
    },
    "ecs" : {
      "version" : "1.0.1"
    },
    "host" : {
      "name" : "localhost"
    },
    "agent" : {
      "hostname" : "localhost",
      "id" : "c88813ba-fdea-4a98-a0be-468fb53566f3",
      "version" : "7.3.0",
      "type" : "filebeat",
      "ephemeral_id" : "ec3328d6-f7f0-4134-a2b6-8ff0c5141cc5"
    },
    "log" : {
      "offset" : 300352,
      "file" : {
        "path" : "/Users/liuxg/data/apache-daily-access.log"
      }
    }
  }
}

你也可以加入一些tags:

filebeat.inputs:
- type: log
  enabled: true
  fields:
    apache: true
  tags: ["my-service", "hardware", "test"]
  paths:
    - /Users/liuxg/data/apache-daily-access.log

output.elasticsearch:
  hosts: ["localhost:9200"]

这样在_source里就会出现一些tag:

{
        "_index" : "filebeat-7.3.0-2019.09.11-000001",
        "_type" : "_doc",
        "_id" : "HIHyIG0BJD_DqHjgm0uL",
        "_score" : 1.0,
        "_source" : {
          "@timestamp" : "2019-09-11T15:30:33.163Z",
          "agent" : {
            "id" : "c88813ba-fdea-4a98-a0be-468fb53566f3",
            "version" : "7.3.0",
            "type" : "filebeat",
            "ephemeral_id" : "6fc482b2-fac8-4d79-8ca1-b27ef39cea3d",
            "hostname" : "localhost"
          },
          "log" : {
            "file" : {
              "path" : "/Users/liuxg/data/apache-daily-access.log"
            },
            "offset" : 11497
          },
          "message" : """164.51.31.185 - - [11/Sep/2019:00:04:15 +0000] "GET /item/giftcards/232 HTTP/1.1" 200 130 "/category/electronics" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"""",
          "tags" : [
            "my-service",
            "hardware",
            "test"
          ],
          "input" : {
            "type" : "log"
          },
          "fields" : {
            "apache" : true
          },
          "ecs" : {
            "version" : "1.0.1"
          },
          "host" : {
            "name" : "localhost"
          }
        }
      }

那么在我们的Kibana中,我们可以看到一个叫做filebeat-7.3.0-2019.09.11-000001的index文件已经生产了:

Filebeat Processors

虽然不像Logstash那样强大和强大,但Filebeat可以在将数据转发到您选择的目标之前对日志数据应用基本处理和数据增强功能。 您可以解码JSON字符串,删除特定字段,添加各种元数据(例如Docker,Kubernetes)等。

处理器在每个prospector的Filebeat配置文件中定义。 您可以使用条件语句定义规则以应用处理。 下面是一个使用drop_fields处理器从Apache访问日志中删除一些字段的示例:

filebeat.inputs:
- type: log
  enabled: true
  fields:
    apache: true
  tags: ["my-service", "hardware", "test"]
  paths:
    - /Users/liuxg/data/apache-daily-access.log

processors:
  - drop_fields:
      fields: ["ecs"]

output.elasticsearch:
  hosts: ["localhost:9200"]

在上面,我们把ecs字段删除,那么显示的结果为:

 {
      "_index" : "filebeat-7.3.0-2019.09.11-000001",
      "_type" : "_doc",
      "_id" : "m4H8IG0BJD_DqHjgZ47a",
      "_score" : 1.0,
      "_source" : {
        "@timestamp" : "2019-09-11T15:41:15.306Z",
        "host" : {
          "name" : "localhost"
        },
        "agent" : {
          "type" : "filebeat",
          "ephemeral_id" : "d32d0cea-966a-48d7-8728-dad5fc276b3a",
          "hostname" : "localhost",
          "id" : "c88813ba-fdea-4a98-a0be-468fb53566f3",
          "version" : "7.3.0"
        },
        "log" : {
          "offset" : 11497,
          "file" : {
            "path" : "/Users/liuxg/data/apache-daily-access.log"
          }
        },
        "message" : """164.51.31.185 - - [11/Sep/2019:00:04:15 +0000] "GET /item/giftcards/232 HTTP/1.1" 200 130 "/category/electronics" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"""",
        "tags" : [
          "my-service",
          "hardware",
          "test"
        ],
        "input" : {
          "type" : "log"
        },
        "fields" : {
          "apache" : true
        }
      }
    }

显然相比较之前的source,我们可以看出来ecs项已经不见了。

所有的Processors在一下列出:

add_cloud_metadata
add_locale
decode_json_fields
drop_event
drop_fields
include_fields
add_kubernetes_metadata
add_docker_metadata

Filebea 调试

默认情况下,Filebeat将其所有输出发送到syslog。 在前台运行Filebeat时,可以使用-e命令行标志将输出重定向到标准错误。 例如:

filebeat -e

默认配置文件是filebeat.yml(文件的位置因平台而异)。 您可以通过指定-c标志来使用其他配置文件。 例如:

filebeat -e -c myfilebeatconfig.yml

您可以通过启用一个或多个调试选择器来增加调试消息的详细程度。 例如,要查看已发布的事务,可以使用发布选择器启动Filebeat,如下所示:

filebeat -e -d "publish"

如果你想要所有的调试输出(公平警告,它是相当多的),你可以使用*,像这样:

filebeat -e -d "*"

参考:https://www.elastic.co/guide/en/beats/filebeat/current/enable-filebeat-debugging.html

原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/12076373.html

时间: 2024-08-30 13:01:51

通过Filebeat把日志传入到Elasticsearch的相关文章

filebeat 获取nginx日志 发送给ElasticSearch

目的:通过filebeat获取nginx日志,发送给ElasticSearch,filebeat可以解析json格式日志,所以设置nginx日志为json格式. 1.配置nginx配置文件     log_format jsonTest '{"@timestamp":"$time_iso8601",'                   '"host":"$server_addr",'                   '&

Elasticsearch and kibana and filebeat 轻量级日志监控系统

Elasticsearch and kibana and filebeat Elasticsearch and kibana and filebeat 轻量级日志监控系统 说明: elasticsearch 依赖java Logstash 依赖于JVM,内存消耗比较高 filebeat go语言轻量级日志监控系统 安装 elasticsearch-6.2.3.tar.gz filebeat-6.2.3-linux-x86_64.tar.gz kibana-6.2.3-linux-x86_64.t

FILEBEAT+ELK日志收集平台搭建流程

filebeat+elk日志收集平台搭建流程 1.         整体简介: 模式:单机 平台:Linux - centos - 7 ELK:elasticsearch.logstash.kibana三款开源软件的集合. FILEBEAT:代替logstash的采集功能,轻量.耗用小. 目前收集的有nginx日志.java日志[单行|多行]. 都是通过在客户端的生成日志配置文件中定义好初步json格式,然后利用filebeat采集到logstash,存储到elasticsearch,最后通过k

ELK日志系统:Elasticsearch+Logstash+Kibana搭建教程

ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程 安装配置JDK环境 JDK安装(不能安装JRE) JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 下载包:jdk-8u131-linux-x64.rpm yum localinstall jdk-8u131-linux-x64.rpm mvn 安装 cd /usr/lo

filebeat收集日志常见问题

filebeat收集日志文件如果日志文件重命名,是否会重新收集日志呢? 答案:不会,因为收集日志是通过文件的inode的,linux中重名名,只是改变了文件名,文件在磁盘的存储位置即inode并未改变. filebeat中的data下面的registry 可以查看filebeat读取的文件和offset.如重命名:mv table_io_1.log table_io_3.log 变化 重名后变为: filebeat的日志中也可以看出来的 第一次安装filebeat的时候,文件的读取是否是把文件全

使用elasticsearch和filebeat做日志收集

在存储数据之前,elasticsearch可以使用Ingest Node对数据做预处理.https://www.elastic.co/guide/en/beats/filebeat/current/configuring-ingest-node.html 1 使用ingest功能 1.1 定义一个pipeline 例如grib2-pipeline.jsongrok可以使用预定义Patterns(%{Pattern:name}匹配提取字段),也可以直接使用正则表达式(分组命名提取字段) 1.2 将

自建elk+filebeat+grafana日志收集平台

欢迎关注个人公众号"没有故事的陈师傅"搭建这个平台的初衷只是为了我和我的两个小伙伴来更好的学习es以及周边组件,欲善其事,必利其器,只是单纯的去学习理论知识是不够的,理论与操作相结合,才能学的更扎实. 环境配置: 使用自己的两台1v2g阿里云主机以及好友颖枞的一台1v2gvps,共计三台主机 环境架构如下: 三台主机的环境分别如下: node1:elasticsearch6.4+filebeatnode2:kibana6.4+grafana+filebeatnode3:logstash

elk+filebeat+redis日志系统部署

日志系统架构图 软件版本: filebeat-7.5.1 elasticsearch-7.5.1 logstash-7.5.1 kibana-7.5.1 redis-5.0.8 主机: system:Centos 7.7 host IP: 192.168.1.105 安装 elasticsearch.kibana.logstash 192.168.1.103 安装 redis 192.168.1.111 安装 filebeat.nginx 192.168.1.79 安装 filebeat.ngi

Windows搭建Log4Net+FileBeat+ELK日志分析系统过程以及问题总结

安装流程: 稍后补充 参考内容:http://udn.yyuap.com/thread-54591-1-1.html ; https://www.cnblogs.com/yanbinliu/p/6208626.html 在搭建测试过程中遇到以下问题:1.FileBeat日志报 "dial tcp 127.0.0.1:5044: connectex: No connection could be made because the target machine actively refused it