将 Apache Storm Log4j2 syslog appender 从 UDP 更改为 TCP

Posted

技术标签:

【中文标题】将 Apache Storm Log4j2 syslog appender 从 UDP 更改为 TCP【英文标题】:Changing Apache Storm Log4j2 syslog appender from UDP to TCP 【发布时间】:2019-12-30 12:39:20 【问题描述】:

在我的 Storm 拓扑中,我通过 Kafka spout 将大量 JSON 数据传输到 ElasticSearch bolt。

问题是 Apache Storm 使用的 Log4j2 在其配置中为 clusterworker 使用 UDP 协议:

Log4j2/Worker.xml:

    <Syslog name="syslog" format="RFC5424" charset="UTF-8" host="localhost" port="514"
        protocol="UDP" appName="[$sys:storm.id:$sys:worker.port]" mdcId="mdc" includeMDC="true"
        facility="LOCAL5" enterpriseNumber="18060" newLine="true" exceptionPattern="%rExfull"
        messageId="[$sys:user.name:$sys:logging.sensitivity]" id="storm" immediateFail="true" 
        immediateFlush="true"/>

因此 - 我在提交拓扑时收到下一个错误:

错误无法写入流 UDP:localhost:514 for appender syslog org.apache.logging.log4j.core.appender.AppenderLoggingException:错误 刷新流 UDP:localhost:514

这是因为消息长度。

我想知道是否可以将 Apache Storm Syslog appender 的默认协议从 UDP 更改为 TCP?

【问题讨论】:

【参考方案1】:

这与 Storm 没有太大关系,因为 Storm 只是使用 Log4j2 支持的任何设置。我会看看https://logging.apache.org/log4j/2.x/manual/appenders.html#SyslogAppender,尤其是那里给出的 TCP syslog appender 示例。

<Syslog name="RFC5424" format="RFC5424" host="localhost" port="8514"
            protocol="TCP" appName="MyApp" includeMDC="true"
            facility="LOCAL0" enterpriseNumber="18060" newLine="true"
            messageId="Audit" id="App"/>

【讨论】:

以上是关于将 Apache Storm Log4j2 syslog appender 从 UDP 更改为 TCP的主要内容,如果未能解决你的问题,请参考以下文章

Apache Storm

Storm集群环境搭建

走进大数据 | Apache Spark和Apache Storm的区别

Apache 流框架 Flink,Spark Streaming,Storm对比分析

Storm 投身 Apache 基金会,改名 Apache Storm

部署后的 Apache Storm JAR 访问