将 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 在其配置中为 cluster
和 worker
使用 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 Spark和Apache Storm的区别
Apache 流框架 Flink,Spark Streaming,Storm对比分析