【问题标题】:How to get NiFi processor error into Flowfile attribute?如何将 NiFi 处理器错误转换为 Flowfile 属性?
【发布时间】:2020-11-04 13:03:37
【问题描述】:

我有一个 PutGCSObject 处理器,我想将其错误捕获到流文件属性中。

如图所示,当处理器出现错误时,它会将所有预先存在的属性原样发送到故障。

我希望错误消息作为属性成为同一流文件的一部分。我怎样才能做到这一点?

【问题讨论】:

  • 没有正常的方法......但是你在屏幕上看到的一切 - 你可以通过 api。激活 devtools (f12) 并查看用于在屏幕上呈现错误消息的 api 请求。你可以用 InvokeHttp 调用它

标签: apache-nifi


【解决方案1】:

其实是有办法得到的。

这是我的做法:

1:我将所有 ERROR 连接路由到一个主“监控进程组”

2:这是我的“监控进程组”

updateattribute 中,我将 filename 捕获为 initial_filename

然后在我的下一步中查询公告

然后我将输出解析为单个属性。

在获得解析的项目符号输出后,我使用 RouteOnAttribute 过程删除所有我不需要的公告(其中一些我已经使用并通知了)。

一旦我只剩下我的实际错误公告,我使用 ExecuteStreamingCommand 运行一个使用 nipyapi 模块的 python 脚本,以获取有关错误的更多信息,例如它在我的流程中的位置、层次结构、对失败的处理器的描述,一些 proc 统计信息,还有关于每个 proc/流程组及其保管人和业务用例的元数据目录。

然后将此数据发布到 sumologic 以进行日志记录,并且我还会触发一系列通知(Slack + PagerDuty 挂钩以创建事件生命周期)。

希望对你有帮助

【讨论】:

  • 谢谢@Up_One。当@daggett 指出使用 API 时,我以类似的方式实现了它。我使用了/nifi-api/processors/{id} GET 请求,它为我提供了该特定处理器的公告信息,并使用属性通过 InvokeHTTP 的Put Response Body In Attribute 参数存储响应。后来用RouteonAttribute用表达式语言搜索到需要的错误文本
  • 是的 - 这也是一种方法,我这样做是为了解决我在画布上的所有错误,所以更通用
【解决方案2】:

没有将错误消息附加为流文件属性的通用方法。此外,我们倾向于强烈避免此类事情,因为可能会将包含敏感数据的错误消息冒泡给可能无权查看这些详细信息的用户。

【讨论】:

  • 我认为错误信息访问的问题不应该在平台层面来决定,因为很多情况下是流程需要的。它已经在 executescript 和 executestreamcommand 中可用。我相信必须有一个开关来启用流文件属性中的错误消息。
  • 这是不可能强制的,因为多年来使用的主要设计模式一直是尝试捕获,异常时发送失败。如果没有所有处理器开发人员的合作,您无法从框架级别覆盖该行为。
  • 我认为这并不难。 99% 的处理器使用getLogger().error(...) 记录发生的错误。正是这些错误将显示在 UI 中。那么,如果在 nifi.properties 中打开了功能,为什么不将相同的错误消息放在某个标准(或可自定义)属性中?
  • 如上所述,很多时候错误可能包含不应该冒泡的细节。将其添加到流程公告中可能已经够糟糕了;将它们添加为属性将保留出处数据中的详细信息。
  • FWIW,我明白了。我自己提出过一次,其他提交者的解释是这样的,它加剧了数据泄露。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2021-01-24
  • 2021-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多