我正在尝试读取这样的日志文件:
199.72.81.55 - - [01/Jul/1995:00:00:01 -0400] "GET /history/apollo/ HTTP/1.0" 200 6245
unicomp6.unicomp.net - - [01/Jul/1995:00:00:06 -0400] "GET /shuttle/countdown/ HTTP/1.0" 200 3985
199.120.110.21 - - [01/Jul/1995:00:00:09 -0400] "GET /shuttle/missions/sts-73/mission-sts-73.html HTTP/1.0" 200 4085
burger.letters.com - - [01/Jul/1995:00:00:11 -0400] "GET /shuttle/countdown/liftoff.html HTTP/1.0" 304 0
199.120.110.21 - - [01/Jul/1995:00:00:11 -0400] "GET /shuttle/missions/sts-73/sts-73-patch-small.gif HTTP/1.0" 200 4179
每次运行此练习时,我都会发送 1000 行,并且我使用的是 splitText 处理器,并且在 extractText 处理器中我使用此正则表达式:
successCode -> ^[0-9A-Z\-a-z\.]* - - \[[0-9A-Za-z\/\:]* -[0-9]*\] \"[A-Z]* [0-9A-Za-z\/\.\- ]*\" ([0-9]*) [0-9]*
tiemStamp -> ^[0-9A-Z\-a-z\.]* - - \[([0-9A-Za-z\/\:]*) -[0-9]*\] \"[A-Z]* [0-9A-Za-z\/\.\- ]*\" [0-9]* [0-9]*
important -> ^([0-9A-Z\-a-z\.]*) - - \[[0-9A-Za-z\/\:]* -[0-9]*\] \"[A-Z]* [0-9A-Za-z\/\.\- ]*\" [0-9]* [0-9]*
这可能是一个错误。这肯定是我的问题。
然后,我尝试将不同的日志发送到不同的路由。如果 successCode == 200 然后我尝试将其放在路线/user//success/%{tiemStamp}/上,但我所有的行都转到第三种方式:“不匹配”
在我尝试过的 RouteOnContent 处理器上:
successCode -> ${successCode:equals("200")}
successCode -> ${successCode:contains(2)}
successCode -> ${successCode:contains("2")}
有人使用过“RouteOnContent”处理器吗?
最佳答案
根据文档,ExtractText
处理器“根据 FlowFile 的内容评估一个或多个正则表达式。这些正则表达式的结果将分配给 FlowFile 属性 [...]”
因此,您不应在下一步中使用 RouteOnContent
而应使用 RouteOnAttribute
处理器。
(如果您停止 RouteOnXXX
处理器以便将消息保留在队列中,您可以看到流文件的内容。在流文件的“属性”选项卡上,您可以看到不同属性的值。我确认使用您的正则表达式,我的 successCode=200。)
关于apache-nifi - 如何使用 NiFi 处理器 RouteOnContent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49797202/