geoIpEnrich 处理器 NiFi

geoIpEnrich Processor NiFi

我正在尝试将 geoEnrichIP 处理器用作 nifi 流程的一部分。我正在尝试按照文档 https://nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/nifi-enrich-nar/1.6.0/org.apache.nifi.processors.GeoEnrichIP/ 进行操作,但不幸的是。

我正在尝试在 convertRecord 处理器的末尾附加 geoEnrichIP 处理器。

ConvertRecord(Json) ---> geoEnrichIP

在 geoEnrichIP 的配置中,我为 ip 地址字段添加了一个属性。该字段是 Enrich: host_address 但我的输出中没有任何内容。我认为我没有引用包含 IP 地址的字段 host_address

如何正确引用 host_address 的 IP 地址名称以丰富地理位置数据?

谢谢

对于GeoEnrichIP,您要丰富的字段必须是 FlowFile 的属性,而不是 FlowFile 内容的一部分(例如在记录中)。

IP Address Attribute 属性 必须包含属性的名称。

如果 IP 在 FlowFile 内容中,您需要提取 IP 并将值放入属性中。

有几种方法可以做到这一点,具体取决于您的用例 - 但还有一种替代方法。

  1. 如果每个FlowFile只包含一个SINGLE Record,那么你可以使用 EvaluateJsonPath 提取 IP 并创建属性。
  2. 如果每个 FlowFile 包含多个记录,具有完全随机的 IP 地址,您可以使用 SplitJson 创建唯一的 FlowFiles 然后 EvaluateJsonPath (这通常是要避免的模式!)
  3. 如果每个 FlowFile 包含多个记录,但 IP 是一组较小的通用 IP 地址中的一个,那么您可以使用 PartitionRecord 将记录存储到具有通用 IP 属性的 FlowFiles 中。

但是,您可以使用LookupRecord with an IPLookupService,而不是使用GeoEnrichIP。通过这种方式,您可以处理每个 FlowFile 的单个或多个记录,并且您不需要处理属性,而是依赖记录本身中的数据。这处理了上面列出的所有 3 种情况。

我写了一篇关于使用 LookupRecord 的 post here 如果您需要有关如何使用它的更多详细信息,它是用于丰富工作流程的非常强大的处理器。