Apache NiFi 可以配置 logback.xml 文件以通过 UDP 将日志发送到远程服务器吗?

Can Apache NiFi configure logback.xml file to send logs to remote server over UDP?

我有一个 Apache NiFi 实例需要将消息记录到远程 Graylog 服务器。我希望将 nifi-app.log、nifi-bootstrap.log 和 nifi-user.log 的输出以及它们的默认本地策略都发送到此服务器。

我正在尝试通过 UDP 将日志发送到服务器,因为网络配置需要 UDP 连接。

我的问题:

  1. logback 是否支持通过 UDP 发送日志?
  2. 如果是这样,该配置是什么样的?
  3. 是否有更好的方法配置 Apache NiFi 以通过 UDP 发送日志?

据我所知,Logback 不提供开箱即用的 UDP appender,因此您需要为某些 UDP appender 添加必要的 JAR,可能是 logstash 之一:

https://github.com/logstash/logstash-logback-encoder

这可能有效,但是将 JAR 添加到 NiFi 的 lib 目录有点危险,因为它们最终会出现在所有 NiFi 处理器的类路径中,并且可能会产生意想不到的后果。

其他选项...

1) 使用 TCP

logback 已经提供了套接字附加程序: https://logback.qos.ch/manual/appenders.html#SocketAppender

2) 使用单独的NiFi实例,用于监控第一个NiFi实例的日志。流程将是 TailFile -> PutUDP,其中 TailFile 指向第一个 NiFi 的 nifi-app.log。

使用 LogMessage 处理器的简单解决方案如何并确保所有 LogMessage 日志条目都转到特定文件 (flow-events.log) 然后跟踪它?

<appender name="EVENTS_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${org.apache.nifi.bootstrap.config.log.dir}/flow-events.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${org.apache.nifi.bootstrap.config.log.dir}/flow-events_%d.log</fileNamePattern>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>%date %level [%thread] %logger{40} %msg%n</pattern>
    </encoder>
</appender>
<logger name="org.apache.nifi.processors.standard.LogMessage" level="INFO" additivity="false">
    <appender-ref ref="EVENTS_FILE" />
</logger>