我想按照这里的例子
https://www.endgame.com/blog/storm-metrics-how
这是我的storm.yaml
storm.zookeeper.servers:
- localhost
supervisor.slots.ports:
- 6700
- 6701
- 6702
- 6703
- 6704
nimbus.host: localhost
ui.port: 8080
ui.host: localhost
storm.log.dir: /path/to/storm/logdir
topology.max.spout.pending: 5000
我尝试在本地和群集模式下运行拓扑。 metrics.log文件是在/path/to/storm/logdir
位置创建的,但该文件为空!我错过了一些配置吗?
答案 0 :(得分:1)
问题在于当前 log4j2 设置风暴中的度量标准,修复有点牵扯。
首先让我列出Storm的Jira的一些错误。通过指标记录,阅读问题和解决方案可以解决当前的问题:
STORM-584
whole cluster is sharing the metrics log STORM-1673
package rename of LoggingMetricsConsumer
missed metrics logger setup STORM-1767
naming logger using fully qualified class name creates problems 总结上述情况:
cluster.xml
中定义指标记录器不正确,因为工作记录程序(记录指标的位置)是使用worker.xml
定义的。因此,工作人员可能无法访问指标记录器定义。它还会产生文件所有权问题 - 第一个记录指标的工作人员将拥有该日志文件,以防止其他工作程序中的其他记录程序附加到指标日志文件。backtype.storm.metric
重命名为org.apache.storm.metric
后,软件包重命名为worker.xml
个文件。org.apache.storm.metric.LoggingMetricsConsumer
,这意味着当尝试使用LoggerFactory.getLogger(LoggingMetricsConsumer.class)
类中的LoggingMetricsConsumer
创建它时,实际创建的记录器是附加到 ROOT 记录器并使用A1
appender而不是METRICS
appender。我的实际修复涉及两件事(请注意第一步是可选的)
可选择在worker.xml
和cluster.xml
文件中整理 log4j2 设置。
只需确保您的日志记录设置具有worker.xml
中定义的指标记录器,就像在此github commit for Storm project fixing the STORM-1673
issue (which has made it to 1.0.0
and 2.0.0
)中一样。相反,请确保不再在cluster.xml
文件中定义指标记录器。
重命名指标记录器并分叉LoggingMetricsConsumer
类,将其指向新重命名的记录器(未连接到 root 记录器):
首先确保worker.xml
文件中的指标记录器不再命名为org.apache.storm.metric.LoggingMetricsConsumer
,但请根据此代码段说明METRICS_LOGGER
:
<Logger name="METRICS_LOGGER" level="info" additivity="false">
<appender-ref ref="METRICS"/>
</Logger>
来自同一github commit as above的
其次“fork”LoggingMetricsConsumer
类。
请注意 fork 我的意思是将其源代码引入您的项目以便修改它所需的一切。您可以定义自己的实现IMetricsConsumer
的类,只要您将其附加到拓扑中即可。拥有自己的LoggingMetricsConsumer
课程后,您必须修改其创建指标记录器的方式:
public static final Logger METRICS_LOG = LoggerFactory.getLogger("METRICS_LOGGER");
只需确保从您的版本中删除的git分支中查看LoggingMetricsConsumer
源代码以及worker.xml
和cluster.xml
的版本。此区域已经发生了很大变化,每个更改都不向后兼容(包重命名,记录器移动)。