【问题标题】:Get source/upstream connection's processor name in nifi在 nifi 中获取源/上游连接的处理器名称
【发布时间】:2019-08-17 21:22:29
【问题描述】:

我想从业务角度监控 Nifi 中的流文件。

所以我使用 python 脚本添加了 executescript 处理器,该脚本创建消息并在每个处理器之后在 elasticsearch 中推送相同的消息。

我想要此执行脚本处理器的父处理器名称或 ID,以便我将继续附加到流文件中,这将允许知道此流文件通过哪些阶段/处理器,并且我可以在 ELK 中对其进行监控。

【问题讨论】:

  • NiFi 源自基于流的编程范式,其中每个组件都是一个“黑匣子”,故意不知道前任或后继组件。我要提醒的是,如果可能以编程方式尝试确定这些组件身份是不受支持和脆弱的,而且绝对是一种反模式。您应该重新评估您心中的监控计划。

标签: rest apache-nifi


【解决方案1】:

我认为监控 FlowFiles 的最佳方式是使用 Provenance 日志。您还可以使用另一个 NiFi 实例和 S2S 将这些日志导出到 ELK。

无论如何,如果您想使用 REST API 获取连接源/目标的处理器名称,您可以在浏览进程组的连接时获取它。 示例:

/nifi-api/process-groups/{processGroupId}/connections/

您将获得一系列连接。在连接对象中,您将在路径component/source/name 中获得源的名称。目的地也是如此。

编辑:

要使用出处日志,您需要执行以下操作:

  1. 将出处日志发送到另一个 NiFi 实例(它仅限于 NiFi,因为它使用 S2S)。
  2. 解析此 NiFi 实例中的日志
  3. 使用PutElasticSearch5 处理器将日志发送到 ElasticSearch。

它工作得最好,将帮助您最好地监控 FlowFiles :)

【讨论】:

  • 有没有办法从我在 python 脚本中获得的会话 (session.get()) 对象中获取它?我将探索 S2S 选项。
  • 您无法从ProcessSessionProcessContext 获得它...正如我所说,监控流文件的最佳方法是使用来源日志。您可以使用SiteToSiteProvenanceReportingTask 将出处日志传输到另一个实例。这也很容易!您只需要在目标实例中启用站点到站点协议(使用nifi.properties
  • 我试过 S2S。我不确定输入端口名称是什么,因为我没有将其发送到另一个 nifi 实例,而是将其发送到 elasticsearch
  • 它抛出错误运行任务 SiteToSiteProvenanceReportingTask[id=bf4858b6-0169-1000-b06f-640d8cba6a3e] 由于 org.apache.nifi.processor.exception.ProcessException: 无法将来源事件发送到目的地由于IOException:响应代码 405:不允许的方法,解释:null
  • 我能够通过 S2S 捕获数据,但它捕获了所有事件,在实际的核心数据流中,我的流文件具有 appid 作为属性所以我添加了一个 routeonattribute 处理器并检查了 appid 所在的条件不是null,但现在我没有收到任何消息
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
相关资源
最近更新 更多