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

通过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

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

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

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

  1. filebeat.yml
  2. filebeat.inputs:
  3. - type: log
  4. enabled: true
  5. paths:
  6. - ./sample.log
  7. output.logstash:
  8. hosts: ["localhost:5044"]

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

./filebeat test output

显示结果:

  1. logstash: localhost:5044...
  2. connection...
  3. parse host... OK
  4. dns lookup... OK
  5. addresses: ::1, 127.0.0.1
  6. 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条数据:

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

  1. 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文件:

  1. filebeat.inputs:
  2. - type: log
  3. enabled: true
  4. paths:
  5. - /Users/liuxg/data/apache-daily-access.log
  6. output:
  7. elasticsearch:
  8. hosts: ["localhost:9200"]

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

$ ./filebeat -c filebeat_es.yml

我们也可以这样写:

  1. filebeat.inputs:
  2. - type: log
  3. enabled: true
  4. fields:
  5. apache: true
  6. paths:
  7. - /Users/liuxg/data/apache-daily-access.log
  8. output.elasticsearch:
  9. hosts: ["localhost:9200"]

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

  1. {
  2. "_index" : "filebeat-7.3.0-2019.09.11-000001",
  3. "_type" : "_doc",
  4. "_id" : "637VIG0BJD_DqHjgqvC5",
  5. "_score" : 1.0,
  6. "_source" : {
  7. "@timestamp" : "2019-09-11T14:58:55.902Z",
  8. "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"""",
  9. "input" : {
  10. "type" : "log"
  11. },
  12. "fields" : {
  13. "apache" : true
  14. },
  15. "ecs" : {
  16. "version" : "1.0.1"
  17. },
  18. "host" : {
  19. "name" : "localhost"
  20. },
  21. "agent" : {
  22. "hostname" : "localhost",
  23. "id" : "c88813ba-fdea-4a98-a0be-468fb53566f3",
  24. "version" : "7.3.0",
  25. "type" : "filebeat",
  26. "ephemeral_id" : "ec3328d6-f7f0-4134-a2b6-8ff0c5141cc5"
  27. },
  28. "log" : {
  29. "offset" : 300352,
  30. "file" : {
  31. "path" : "/Users/liuxg/data/apache-daily-access.log"
  32. }
  33. }
  34. }
  35. }

你也可以加入一些tags:

  1. filebeat.inputs:
  2. - type: log
  3. enabled: true
  4. fields:
  5. apache: true
  6. tags: ["my-service", "hardware", "test"]
  7. paths:
  8. - /Users/liuxg/data/apache-daily-access.log
  9. output.elasticsearch:
  10. hosts: ["localhost:9200"]

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

  1. {
  2. "_index" : "filebeat-7.3.0-2019.09.11-000001",
  3. "_type" : "_doc",
  4. "_id" : "HIHyIG0BJD_DqHjgm0uL",
  5. "_score" : 1.0,
  6. "_source" : {
  7. "@timestamp" : "2019-09-11T15:30:33.163Z",
  8. "agent" : {
  9. "id" : "c88813ba-fdea-4a98-a0be-468fb53566f3",
  10. "version" : "7.3.0",
  11. "type" : "filebeat",
  12. "ephemeral_id" : "6fc482b2-fac8-4d79-8ca1-b27ef39cea3d",
  13. "hostname" : "localhost"
  14. },
  15. "log" : {
  16. "file" : {
  17. "path" : "/Users/liuxg/data/apache-daily-access.log"
  18. },
  19. "offset" : 11497
  20. },
  21. "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"""",
  22. "tags" : [
  23. "my-service",
  24. "hardware",
  25. "test"
  26. ],
  27. "input" : {
  28. "type" : "log"
  29. },
  30. "fields" : {
  31. "apache" : true
  32. },
  33. "ecs" : {
  34. "version" : "1.0.1"
  35. },
  36. "host" : {
  37. "name" : "localhost"
  38. }
  39. }
  40. }

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

Filebeat Processors

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

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

  1. filebeat.inputs:
  2. - type: log
  3. enabled: true
  4. fields:
  5. apache: true
  6. tags: ["my-service", "hardware", "test"]
  7. paths:
  8. - /Users/liuxg/data/apache-daily-access.log
  9. processors:
  10. - drop_fields:
  11. fields: ["ecs"]
  12. output.elasticsearch:
  13. hosts: ["localhost:9200"]

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

  1. {
  2. "_index" : "filebeat-7.3.0-2019.09.11-000001",
  3. "_type" : "_doc",
  4. "_id" : "m4H8IG0BJD_DqHjgZ47a",
  5. "_score" : 1.0,
  6. "_source" : {
  7. "@timestamp" : "2019-09-11T15:41:15.306Z",
  8. "host" : {
  9. "name" : "localhost"
  10. },
  11. "agent" : {
  12. "type" : "filebeat",
  13. "ephemeral_id" : "d32d0cea-966a-48d7-8728-dad5fc276b3a",
  14. "hostname" : "localhost",
  15. "id" : "c88813ba-fdea-4a98-a0be-468fb53566f3",
  16. "version" : "7.3.0"
  17. },
  18. "log" : {
  19. "offset" : 11497,
  20. "file" : {
  21. "path" : "/Users/liuxg/data/apache-daily-access.log"
  22. }
  23. },
  24. "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"""",
  25. "tags" : [
  26. "my-service",
  27. "hardware",
  28. "test"
  29. ],
  30. "input" : {
  31. "type" : "log"
  32. },
  33. "fields" : {
  34. "apache" : true
  35. }
  36. }
  37. }

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

所有的Processors在一下列出:

  1. add_cloud_metadata
  2. add_locale
  3. decode_json_fields
  4. drop_event
  5. drop_fields
  6. include_fields
  7. add_kubernetes_metadata
  8. 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

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

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

    ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程 系统架构 安装配置JDK环境 JDK安装(不能安装JRE) JDK下载地址:http://www.orac ...

  2. Elasticsearch + Logstash + Kibana +Redis +Filebeat 单机版日志收集环境搭建

    1.前置工作 1.虚拟机环境简介 Linux版本:Linux localhost.localdomain 3.10.0-862.el7.x86_64 #1 SMP Fri Apr 20 16:44:2 ...

  3. 转载---Beats:如何使用Filebeat将MySQL日志发送到Elasticsearch

    在今天的文章中,我们来详细地描述如果使用Filebeat把MySQL的日志信息传输到Elasticsearch中.为了说明问题的方便,我们的测试系统的配置是这样的: 我有一台MacOS机器.在上面我安 ...

  4. 使用 Elastic Agents 把定制的日志摄入到 Elasticsearch 中

    转载自:https://mp.weixin.qq.com/s/QQxwYh1uLCkKn1LK72ojJA 在以前的系统中,我们可以使用如下的几种方式来采集日志: 1.我们可以直接使用 Beats 把 ...

  5. ES系列十八、FileBeat发送日志到logstash、ES、多个output过滤配置

    一.FileBeat基本概念 简单概述 最近在了解ELK做日志采集相关的内容,这篇文章主要讲解通过filebeat来实现日志的收集.日志采集的工具有很多种,如fluentd, flume, logst ...

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

    filebeat+elk日志收集平台搭建流程 1.         整体简介: 模式:单机 平台:Linux - centos - 7 ELK:elasticsearch.logstash.kiban ...

  7. logstash收集时filebeat区分日志

    logstash收集时filebeat区分日志     1.场景 filebeat在服务器中同时收集nginx和web项目日志,需要对两个日志在logstash中分别处理 2.版本区别 ==6.x之前 ...

  8. filebeat收集日志到elsticsearch中并使用ingest node的pipeline处理

    filebeat收集日志到elsticsearch中 一.需求 二.实现 1.filebeat.yml 配置文件的编写 2.创建自定义的索引模板 3.加密连接到es用户的密码 1.创建keystore ...

  9. Windows 系统下json 格式的日志文件发送到elasticsearch

    Windows 系统下json 格式的日志文件发送到elasticsearch配置 Nxlog-->logstash-->ElasticSearch Logstash https://ww ...

随机推荐

  1. 计时 答题 demo

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  2. springMVC校验器(validator)

    springmvc使用的是Hibernate Validator(和Hibernate的ORM无关)来完成校验功能 一.普通校验 1.导入jar包 2.编写校验错误配置文件 3.配置校验错误信息文件 ...

  3. C#中对文件进行选择对话框打开和保存对话框进行复制

    场景 通过文件选择对话框选择文件 复制文件到指定路径 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号霸道的程序猿获取编程相关电子书.教 ...

  4. Implement Dependent Reference Properties实现依赖引用属性 (EF)

    In this lesson, you will learn how to implement properties whose values can depend on other properti ...

  5. CSS3常用新特性

    CSS3的新特性 新增CSS3特性有兼容性问题,ie9+才支持 移动端支持优于PC端 新增选择器和盒子模型以及其他特性 CSS新增选择器 属性选择器 属性选择器可以根据元素特定属性来选择元素,这样就可 ...

  6. [PHP] 现代化PHP之路:composer的镜像站设置

    1. 当使用composer安装一些类库的时候,默认的镜像站是官方的packagist.org,因为国内的网络环境原因,速度有时候会很慢 2. packagist的中国镜像站有 packagist.p ...

  7. firewalld基础

    firewalld是一个基于网络区域的动态管理防火墙的守护进程.在iptables中需要理解表,链等概念,而在firewalld中需要从理解区域的概念开始 防火墙依照特定的规则允许或限制输出的数据通过 ...

  8. 线上可用django和gunicorn的dockerfile内容

    一,基础镜像 [xxx.com.cn/3rd_part/python.3.6.8:alpine3.9-mysqlclient1.4.2] FROM python:3.6.8-alpine3.7 MAI ...

  9. 8.Java基础_if-else和switch选择语句

    /* 选择语句(基本与C++相同) if-else语句: 格式一: if(关系式){ 语句体; } 格式二: if(关系式){ 语句体; } else{ 语句体; } 格式三: if(关系式){ 语句 ...

  10. cookie:

    Django Django处理一个请求的流程 在浏览器的地址栏中输入地址,回车,发了一个GET请求 wsgi模块接收了请求,将请求的相关信息封装成request对象 根据地址找到对应函数 执行函数获取 ...