利用ingest node所提供的Pipeline帮我们对数据进行处理。

在Elasticsearch中的配置文件elasticsearch.yml文件中配置:node.ingest: true

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

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

什么是pipeline呢?

  • 一个pipleline就是一套处理器:
  • 一个processor就像是Logstash里的一个filter拥有对通过管道(pipeline)的文档的读写权限.

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

地址:https://www.elastic.co/guide/en/elasticsearch/reference/7.5/ingest-processors.html

定义一个Pipleline

使用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的数据进行处理。

log文件中每一条的数据是这样的格式:

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

filebeat.inputs:
- type: log
enabled: true
fields:
apache: true
paths:
- /data/nginx-access.log # 根据实际情况而定 output.elasticsearch:
hosts: ["localhost:9200"]
pipeline: "my_pipeline_id" # 下一步创建的pipeline ID

使用了一个叫做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" : "/data/nginx-access.log"
}
}
}
}

运行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" : "/data/nginx-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是起作用的。

Filebeat和pipleline processor-不部署logstash,实现对数据的处理的更多相关文章

  1. 部署logstash节点

    .部署Logstash节点 1.查看系统环境: [root@Logstash ~]# hostname Logstash [root@Logstash ~]# cat /etc/redhat-rele ...

  2. Centos8 部署 ElasticSearch 集群并搭建 ELK,基于Logstash同步MySQL数据到ElasticSearch

    Centos8安装Docker 1.更新一下yum [root@VM-24-9-centos ~]# yum -y update 2.安装containerd.io # centos8默认使用podm ...

  3. 使用logstash同步MySQL数据到ES

    使用logstash同步MySQL数据到ES 版权声明:[分享也是一种提高]个人转载请在正文开头明显位置注明出处,未经作者同意禁止企业/组织转载,禁止私自更改原文,禁止用于商业目的. https:// ...

  4. Logstash读取Kafka数据写入HDFS详解

    强大的功能,丰富的插件,让logstash在数据处理的行列中出类拔萃 通常日志数据除了要入ES提供实时展示和简单统计外,还需要写入大数据集群来提供更为深入的逻辑处理,前边几篇ELK的文章介绍过利用lo ...

  5. 在部署有OGG的数据库主机上打数据库patch遇到的问题libclntsh.so.11.1 active

    在部署有OGG的数据库主机上打数据库patch遇到的问题$ORACLE_HOME/lib/libclntsh.so.11.1 active 例如以下是报错提示: [oracle@lei1 175796 ...

  6. GeoServer基础教程(三):部署发布Shapefile地图数据

    转载:http://blog.csdn.net/mingzai624. 这是GeoServer官方网站提供的一份Shapefile测试数据 nyc_roads.zip ,包含了部分纽约的道路信息,我们 ...

  7. SQL数据同步到ElasticSearch(三)- 使用Logstash+LastModifyTime同步数据

    在系列开篇,我提到了四种将SQL SERVER数据同步到ES中的方案,本文将采用最简单的一种方案,即使用LastModifyTime来追踪DB中在最近一段时间发生了变更的数据. 安装Java 安装部分 ...

  8. centos7配置Logstash同步Mysql数据到Elasticsearch

    Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的“存储库”中.个人认为这款插件是比较稳定,容易配置的使用Logstash之前,我们得明确 ...

  9. Logstash学习之路(五)使用Logstash抽取mysql数据到kakfa

    一.Logstash对接kafka测通 说明: 由于我这里kafka是伪分布式,且kafka在伪分布式下,已经集成了zookeeper. 1.先将zk启动,如果是在伪分布式下,kafka已经集成了zk ...

  10. Logstash学习之路(四)使用Logstash将mysql数据导入elasticsearch(单表同步、多表同步、全量同步、增量同步)

    一.使用Logstash将mysql数据导入elasticsearch 1.在mysql中准备数据: mysql> show tables; +----------------+ | Table ...

随机推荐

  1. node.js的async和await

    一.async和await是什么 ES2017 标准引入了 async 函数,使得异步操作变得更加方便,async其实本质是Generator函数的语法糖 async表示函数里有异步操作 await表 ...

  2. Clean Code

    书名<代码整洁之道>        命名    有意义的命名,使人能读懂    类名和对象名应该是名称或名称短语    方法名应该是动词或动词短语 函数    短小,函数块不要超过一个屏幕 ...

  3. cmd start命令启动文件的路径

    最近在脚本中通过WScript.Shell执行命令行,实现IE打开Chrome的功能. JS代码如下: var singleurl = window.location.href; var isChro ...

  4. js绑定事件代理的坑

    js通过事件代理的方式绑定跳转事件,我这里的逻辑是把click事件绑定在最外层container上面,如果e.target包含我已经写好的class,则执行跳转逻辑.但是这种方式好像只能是在点击的元素 ...

  5. QP编码详解

    - 原理 QP编码是一种使用可打印的ASCII字符 (如字母.数字与"=")表示各种编码格式下的字符.其方法是将一个8bit的字符表示成两个16进制数,并在前面加一个"= ...

  6. [转]C#操作Outlook

    本文转自:https://blog.csdn.net/yanlovehan/article/details/8500449 //引用Microsoft.Office.Interop.Outlook.d ...

  7. iOS 唤起APP之URL Scheme

    什么是URL Scheme 简单的说,由于苹果选择使用沙盒机制来保障用户的隐私和安全,APP只能访问自己沙盒数据,但同时也阻碍了应用间合理的信息共享.因此苹果提供了一个可以在APP之间跳转的方法:UR ...

  8. 爬虫---lxml爬取博客文章

    上一篇大概写了下lxml的用法,今天我们通过案例来实践,爬取我的博客博客并保存在本地 爬取博客园博客 爬取思路: 1.首先找到需要爬取的博客园地址 2.解析博客园地址 # coding:utf-8 i ...

  9. 【BZOJ2138】stone(线段树+hall定理)

    传送门 题意: 现在有\(n\)堆石子,每堆石子有\(a_i\)个. 之后会有\(m\)次,每次选择\([l,r]\)的石子堆中的石子扔\(k\)个,若不足,则尽量扔. 现在输出\(1\)~\(m\) ...

  10. c# WF 第7节 对控件的基本操作

    本节内容: 1:修改控件的大小 2:控件的顺序 3:控件的对齐 4:移动button实例 1: 修改控件的大小 第一种: 第二种 : 一次操作多个控件: 选择一个控件.按住ctrl -- 再选择一个控 ...