热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Beats:Filebeat和pipelineprocessors

我们知道我们可以使用Filebeat很方便地把我们的log数据收集进来并直接写入到我们的Elasticsearch之中。就像我们上面的这个图显示的一样。这样我们就不需要另外一个Lo

我们知道我们可以使用 Filebeat 很方便地把我们的 log 数据收集进来并直接写入到我们的 Elasticsearch 之中。

 

就像我们上面的这个图显示的一样。这样我们就不需要另外一个 Logstash 的部署了。Logstash 可以很方便地帮我们对数据进行处理,比如对数据进行转换, 丰富数据等等。有一种情况,我们不想部署自己的 Logstash,但是我们还是像对我们的数据进行一些处理,那么我们该怎么办?我们其实可以利用 ingest node 所提供的 Pipeline 帮我们对数据进行处理。

Ingest node

如果大家还不知道如何配置我们的 node 为一个 ingest node 的话,可以参阅我之前的文章 “Elasticsarch中的一些重要概念:cluster, node, index, document, shards及replica”。我们需要在 Elasticsearch 中的配置文件 elasticsearch.yml 文件中配置:

node.ingest: true

ingest node 提供了在对文档建立索引之前对其进行预处理的功能:

  • 接收节点拦截索引或批量 API 请求
  • 运用转换(transformation)
  • 将文档传递回索引或批量 API

 

什么是pipeline呢?

如果大家想对pipleline有更多的了解,请参阅我的文章“如何在Elasticsearch中使用pipeline API来对事件进行处理”。

一个pipleline就是一套处理器:

  • 一个processor就像是Logstash里的一个filter
  • 拥有对通过管道(pipeline)的文档的读写权限

 

那么 Elastic 到底提供了哪些 processor 呢?我们可以参阅 Elastic 的官方文档,我们可以看到许多的 pocessors 可以被利用。

 

 

大家如果有兴趣的话,请查阅我们的官方文档做更一步的阅读。

定义一个 Pipleline

定义一个 Pipeline 也是非常直接的,你可以使用 PUT 命令配合 Ingest API 来操作。它是存在于 cluster state 里的。

PUT _ingest/pipeline/my-pipeline-id
{"description": "DESCRIPTION","processors": [{...}],"on_failure": [{...}]
}

这里my-pipleline-id是我们自己命令的在该cluster唯一标识是的pipleline ID。在里面,我们可以定义我们喜欢的processors数组。在处理失败后,我们也可以定义相应的processors来完成。

 

例子:

在今天的这个例子里,我们来使用 Filebeat 来读取一个 log 文件,并使用 processors 对这个 log 的数据进行处理。

准备数据

我们在网址 https://logz.io/sample-data 下载一个叫做 apache-daily-access.lo g的 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 的话,请参阅我之前的文章 “Beats:通过 Filebeat 把日志传入到 Elasticsearch”。

 

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

filebeat.inputs:
- type: logenabled: truefields:apache: truepaths:- /Users/liuxg/data/apache-daily-access.logoutput.elasticsearch:hosts: ["localhost:9200"]pipeline: "my_pipeline_id"

在这里请注意,我把上面下载的 apache-daily-access.log 文件置于我自己电脑的 /User/liuxg/data 目录下。在你自己做练习的时候,需要根据自己的文件路径进行调整。在这里,我们使用了一个叫做 my_pipleline_id 的 pipeline。它的定义如下:

PUT _ingest/pipeline/my_pipeline_id
{"description": "Drop ECS field and add one new field","processors": [{"remove": {"field": "ecs"},"set": {"field": "added_field","value": 0}}]
}

在上面,我们定义了两个 processor: remove 及 set。一个是删除一个叫做 ecs 的项,另外一个是添加一个叫做 added_field 的项,并把它的值设置为0。

在正常的情况下,如果在我们的配置文件中没有定义那个 pipleline 的情况下,那么他们的结果是:

{"_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"}}}}

你可以参考我的文章 “Beats:通过Filebeat把日志传入到Elasticsearch” 来查看这个结果。显然这里是有 ecs 这个 field 的。

 

运行 Filebeat

接下来,我们在 Filebeat 的安装目录,运行如下的命令:

./filebeat -c filebeat_processor.yml

我们在 Kibana 中可以通过如下的命令来查看:

GET _cat/indices?v

显然我们已经看到了一个已经生产的以 filebeat 为开头的文件名。我们可以通过如下的命令来查看它的数据:

GET filebeat-7.4.2/_search

那么其中的一个文档的 soure 是这样的:

"_source" : {"agent" : {"hostname" : "localhost","id" : "45832d40-b664-466b-a523-3bc58890ea50","type" : "filebeat","ephemeral_id" : "dbbba131-9c33-4e82-a00a-9e8e09d3e799","version" : "7.4.2"},"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"""","input" : {"type" : "log"},"@timestamp" : "2019-11-23T13:11:57.478Z","host" : {"name" : "localhost"},"fields" : {"apache" : true},"added_field" : 0}

显然 ecs 这个 field 已经不见了,而另外一个叫做 added_field 新的 field 被成功添加进来了。这个说明我们的 pipleline 是起作用的。


推荐阅读
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • 本文讨论了在shiro java配置中加入Shiro listener后启动失败的问题。作者引入了一系列jar包,并在web.xml中配置了相关内容,但启动后却无法正常运行。文章提供了具体引入的jar包和web.xml的配置内容,并指出可能的错误原因。该问题可能与jar包版本不兼容、web.xml配置错误等有关。 ... [详细]
  • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
    本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
  • 本文介绍了禅道作为一款国产开源免费的测试管理工具的特点和功能,并提供了禅道的搭建和调试方法。禅道是一款B/S结构的项目管理工具,可以实现组织管理、后台管理、产品管理、项目管理和测试管理等功能。同时,本文还介绍了其他软件测试相关工具,如功能自动化工具和性能自动化工具,以及白盒测试工具的使用。通过本文的阅读,读者可以了解禅道的基本使用方法和优势,从而更好地进行测试管理工作。 ... [详细]
  • 本文介绍了DataTables插件的官方网站以及其基本特点和使用方法,包括分页处理、数据过滤、数据排序、数据类型检测、列宽度自动适应、CSS定制样式、隐藏列等功能。同时还介绍了其易用性、可扩展性和灵活性,以及国际化和动态创建表格的功能。此外,还提供了参数初始化和延迟加载的示例代码。 ... [详细]
  • 本文总结了初学者在使用dubbo设计架构过程中遇到的问题,并提供了相应的解决方法。问题包括传输字节流限制、分布式事务、序列化、多点部署、zk端口冲突、服务失败请求3次机制以及启动时检查。通过解决这些问题,初学者能够更好地理解和应用dubbo设计架构。 ... [详细]
  • 很多时候在注册一些比较重要的帐号,或者使用一些比较重要的接口的时候,需要使用到随机字符串,为了方便,我们设计这个脚本需要注意 ... [详细]
author-avatar
段娜688
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有