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

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

通过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. 机器学习常见的几种评价指标:精确率(Precision)、召回率(Recall)、F值(F-measure)、ROC曲线、AUC、准确率(Accuracy)

    原文链接:https://blog.csdn.net/weixin_42518879/article/details/83959319 主要内容:机器学习中常见的几种评价指标,它们各自的含义和计算(注 ...

  2. js 时分秒转化为秒

    var time = '00:02:10'; var hour = time.split(':')[0]; var min = time.split(':')[1]; var sec = time.s ...

  3. 你不知道的JS第一卷

    这两天,开始看你不知道的JavaScript,第一卷.

  4. sockjs+stomp的websocket插件

    /** * 依赖文件sockjs.js.stomp.js * */ ;!(function (window) { 'use strict' let WS = function () { //保存所有的 ...

  5. 高版本 MySQL 导出的脚本到低版本 MySQL 中执行时报错

    导入 MySQL 脚本时报错:[ERR] 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'低版本还不支持 utfmb4 这个字符集 解决方法:将 sql 脚 ...

  6. 9.智能快递柜SDK(串口型锁板)

    1.智能快递柜(开篇) 2.智能快递柜(终端篇) 3.智能快递柜(通信篇-HTTP) 4.智能快递柜(通信篇-SOCKET) 5.智能快递柜(通信篇-Server程序) 6.智能快递柜(平台篇) 7. ...

  7. Microsoft.Extensions.DependencyInjection 阅读笔记

    一. 关于IServiceCollection接口的设计 public interface IServiceCollection : IList<ServiceDescriptor> { ...

  8. git commit 新修改的内容 添加到上次提交中 减少提交的日志

    有时候提交过一次记录只有,又修改了一次,仅仅是改动一些较少的内容,可以使用git commit --amend. 添加到上次提交过程中: --amend amend previous commit g ...

  9. ubuntu 改键

    参考: https://www.jianshu.com/p/9411ee427cfd https://www.cnblogs.com/zhengchl/archive/2012/08/25/26557 ...

  10. Linux同一机器设置多个IP2019-7-6

    1.临时增加 1)先查看目前的网卡信息 [root@study ~]# ifconfigeno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAS ...