Elasticsearch:创建 Ingest pipeline

1021 篇文章 595 订阅
167 篇文章 177 订阅

在 Elasticsearch 针对数据进行分析之前,我们必须针对数据进行摄入。在摄入的过程中,我们需要对数据进行加工,这其中包括非结构化数据转换为结构化数据,数据的转换,丰富,删除,添加新的字段等等一系列的工作。针对目前 Elastic 公司所提供的工具来看,我们有三种方法来针对数据进行加工:Logstash, Beats processors 以及 Ingest pipeline

在之前的文章 “Elasticsearch 中的一些重要概念: cluster, node, index, document, shards 及 replica”, 我们讨论了 Elasticsearch 节点可以有不同的角色,主要重要的是 master、data 和 ingest(在 Elastic Stack 7.9 版本之后,有更多的节点角色)。 将摄取组件与其他组件分开的想法是创建一个更稳定的集群,因为重新处理文档时可能出现问题(主要是由于摄入部分使用的自定义插件,这可能需要重新启动摄入节点才能更新)。为了创建一个更稳定的集群,摄入节点应该由主节点(也可能与数据节点)隔离,以防出现一些问题,例如由于附件插件等插件导致的崩溃以及由于复杂的高负载 类型操作。

摄入节点可以在简单场景中替换 Logstash 安装。针对 Logstash 和 Ingest pipeline 这两种方法各有优缺点:

Logstash

  • 是一种开源的 Elastic Stack ETL (Extract, Transform, Load)引擎 
  • 非常强大,并且有很多的 inputs/filters/outputs 来供我们选择
  • 可以很方便地和很多外部的服务进行整合并进行数据丰富
  • 必须在 JVM 环境中运行
  • 缺点是比较难以扩展,资源消耗比较大,通常需要专有的服务器来完成

 Ingest pipeline:

  • 由专门的 Elasticsearch ingest node 来完成
  • 可以很方便地进行扩展
  • 支持很多的 processors

在今天的文章中,我们将介绍如何创建一个 ingest pipeline。如果你对 pipeline 还不是很熟的话,请参阅我之前的文章:

我将着重介绍如何使用 Kibana UI 来创建一个 ingest pipeline。在 Kibana 中,它提供了一个 UI 来对我们的 pipeline 进行管理,你可以:

  • 查看已经存在的所有 pipeline
  • 删除/编辑已经存在的 pipeline
  • 创建新的 pipeline
  • 用一些定制的文档来测试你的 pipeline

当我们的数据进入到 Elastic 集群中,并指定需要用到的 Pipeline,那么 Elasticsearch 中的 ingest node 将会帮我们安装规定的 processor 顺序来执行对数据的操作和处理。这在某种程度上方便了我们许多对集群的部署。如果我们单独部署一个 Logstash 有时没有那么多的灵活性。我们可以通过编程的方式随时修改这个 pipeline。

展示

我们首先打开 Kibana 界面:

如上图所示,它展示了目前我们已经创建好的 pipeline。大家也许很好奇,你没有创建上面的 filebeat 为开头的 pipeline,但是为什么上面有显示呢?这些 filebeat 的 pipeline 是我们在使用 filebeat setup 命令时生成的。具体可以参照我之前的教程 “Beats 入门教程 (二)”。

点击上面的 “Create a pipeline” 按钮:

我们填入相应的信息,并点击 Add a processor:

我们选择 Lowercase processor:

如果我们对 Lowercase processor 的用法不是很熟的话,我们可以点击右上角的链接去寻找更多的帮助信息:

针对我们的情况,我们对 Lowercase processor 进行如下的配置:

我们想针对文档中的 content 字段进行转换。点击上面的 Add:

从上面,我们可以看出来我们已经成功地创建了一个 Lowercase 的 processor。接下来,我们可以针对这个 processor 进行测试。点击 Test pipeline:

按照上面的提示,我们输入相应的文档格式,并点击上面的 Run the pipeline:

上面显示,content 字段的内容现在都变为小写的了。我们之前的文字是 "I love Beijing”。这证明了这个 Lowercase 的 processor 是工作正常的。

接下来,我们添加另外一个叫做 split 的 processor,并把句子按照空格进行分开并形成 token。按照同样的方法:

我们可以看到 field 以及 separator 是必选项:

我们填入上面的信息,并点击 Add 按钮:

从上面,我们可以看出来有一个新生成的 Split processor。我们点击上面的 Test pipeline 按钮:

显然,我们可以看到被分解的 token: i, love, beijing。它们被置于 target_field 所定义的 split_test 字段中。这说明了,我们的 Split processor 是正确的。我们可以使用一些其它的文档来进行测试:

在上面我们添加了另外一个文档。这个文档没有所需要的 content 字段。我们点击 Run the pipeline:

显然这次,我们看到了错误的信息。上面也显示了错误的信息。那么我们该如何来捕获这种错误呢?我们回到定义 processor 的界面,并在 Failure processors 里添加新的 processor:

在上面,我们选择 set processor,并配置相应的信息。点击 Add 按钮:

从上面,我们可以看出来有一个 set 的 processor 在 Failure processors 下面。点击测试按钮:

这个时候,我们可以看到已经被捕获的信息,并在 error 字段里显示出来了。

创建一个 ingest pipeline 的工作基本已经完成了。也许你想知道,我改如何来使用 API 来创建同样的 pipeline 呢?我们点击界面下的 show request 链接:

上面显示了整个创建这个 pipeline 的 API 命令。你可以点击那个拷贝的按钮进行拷贝操作,并在 Dev Tools 中进行测试。

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值