apache-nifi - Nifi 处理器根据可变的正则表达式列表路由流
问题描述
我正在尝试根据与 syslog.body 匹配的正则表达式列表使用 Nifi 作为 syslog 的路由器(nb,因为这只是一个概念证明,如果需要,我可以更改任何部分)
思考的过程是,通过一个单独的系统(目前是 vi 和一个文本文件),管理员可以定义一个标准列表(每个标准的正则表达式格式似乎很合理),如果匹配,将导致系统日志消息发送到特定的单独的系统(例如,所有关键审计数据(由正则表达式列表匹配)被发送到审计系统,所有其他数据都进入标准日志存储
我知道这可以通过内容处理器在 Route 上完成,但属性是在处理器启动之前配置的,管理员每次需要进行编辑时都必须停止处理器
我想定期(自动)加载正则表达式列表并更新处理器属性
我不介意这一切都是在 Nifi 中本地完成的(但这更适合优雅并保存正在编写的外部应用程序)或通过由 python 脚本或其他东西驱动的 REST API 调用(或者 Nifi 可以将 REST 调用发送到本身?!)
我很欣赏处理器属性在运行时无法更新,因此必须停止更新,但这很好,因为队列会在短时间内缓冲。也许检查文件是否已更改可以避免无缘无故的中断,而不是定期更新,我可以稍后解决这个问题。
谢谢
克里斯
解决方案
我认为最简单的解决方案是使用ScanContent
一个处理器,它在磁盘上指定一个字典文件,其中包含搜索词列表并监视文件的更改,并在该事件中重新加载。然后,处理器将搜索词应用于传入流文件的内容,并允许您根据匹配对它们进行路由。虽然此处理器不支持将正则表达式作为字典术语,但您可以对代码进行轻微修改或将其用作具有这些更改的自定义处理器的基线。
如果这对您不起作用,有许多LookupService
实现显示了控制器框架如何监视和读取 CSV、XML、属性文件等,以提供键/值对的更新映射。这些也可以作为使用加载的术语/模式构建更复杂的扫描/匹配流程的基础。
最后,如果您必须依赖直接处理器属性更新,您可以使用 NiFi API 调用编写脚本以停止、更新和重新启动处理器,以便近乎实时地完成。要确定这些 API,请访问API 文档或通过浏览器中的 UI 执行所需的任务,并使用开发人员工具来捕获正在发出的 HTTP 请求。
推荐阅读
- wordpress - EC2 无法连接到 mySQL RDS
- java - 我想使用父目录的父目录
- javascript - 用于什么“../..”?我今天在这一行找到了它 var express = require('../..');
- java - 在后端 Angular 10 + Spring Boot 中未正确接收授权标头
- java - Java Spring 从我的请求中排除 count()
- python - 新模型对象处的 Django OperationalError
- javascript - 图像未显示在 Laravel 项目中
- r - 如何在 R 中用 2 个句子对文本进行子集化?
- r - 仅附加不是“TRUE”的列表元素
- c - 警告格式指定类型 int 但参数的类型为 long