Nifi处理器根据正则表达式的可变列表来路由流

时间:2019-05-03 08:12:12

标签: apache-nifi

我试图根据匹配syslog.body的正则表达式列表使用Nifi充当syslog的路由器(nb,因为这只是概念证明,我可以根据需要更改任何部分)

思考过程是,管理员可以通过单独的系统(目前为vi和文本文件)定义条件列表(每个条件的正则表达式格式似乎都是明智的),如果匹配,将导致发送系统日志消息发送到特定的单独系统(例如,所有关键审核数据(与正则表达式列表匹配)都发送到审核系统,所有其他数据都发送到标准日志存储中

我知道这可以由内容处理器在Route上完成,但是属性是在处理器启动之前配置的,管理员每次需要进行编辑时都必须停止处理器

我想定期(自动)加载正则表达式列表,并更新处理器属性

我不介意这是否全部在Nifi中本机完成(但这对于提高美观性并节省编写的外部应用程序是可取的),还是通过python脚本或其他驱动的REST API调用完成(或者Nifi可以发送) REST自己调用吗?!)

我了解处理器属性无法在运行时进行更新,因此必须停止以进行更新,但这很好,因为队列将在短暂时间内缓冲。也许检查文件是否已更改可以无故避免中断,而无需定期更新,因此我可以稍后解决该问题。

谢谢

克里斯

1 个答案:

答案 0 :(得分:0)

我认为最简单的解决方案是使用ScanContent,这是一种处理器,它在磁盘上指定一个词典文件,该词典文件包含一个搜索词列表并监视该文件的更改,并在该事件中重新加载。然后,处理器将搜索词应用于传入流文件的内容,并允许您基于匹配项对它们进行路由。尽管此处理器不支持将正则表达式用作字典术语,但是您可以对代码进行一些修改,或将其用作进行这些更改的自定义处理器的基准。

如果这对您不起作用,则有许多LookupService实现方式显示了如何通过控制器框架监视和读取CSV,XML,属性文件等,以提供更新的键/值对。这些也可以用作使用加载的术语/模式构建更复杂的扫描/匹配流程的基础。

最后,如果您必须依靠直接处理器属性更新,则可以使用NiFi API调用对此脚本编写脚本以停止,更新和重新启动处理器,从而可以近乎实时地完成此操作。要确定这些API,请访问API documentation或通过浏览器中的UI执行所需的任务,然后使用开发人员工具捕获正在发出的HTTP请求。