我在这里试着效仿
https://www.endgame.com/blog/storm-metrics-how
这是我的风暴
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
但是文件是空的!我缺少一些配置吗?
1条答案
按热度按时间ncecgwcz1#
问题是当前在storm中设置的log4j2度量值有点复杂。
问题
首先让我列出一些从风暴的吉拉错误。通过阅读这些问题和修复,可以很好地了解度量日志记录中的问题:
STORM-584
整个集群正在共享度量日志STORM-1673
包重命名LoggingMetricsConsumer
缺少度量记录器设置STORM-1767
使用完全限定类名命名记录器会产生问题总结上述情况:
在中定义度量记录器
cluster.xml
不正确,因为worker logger(从中记录度量)是使用worker.xml
. 因此,工作人员可能无法访问度量记录器定义。它还产生了文件所有权的问题-第一个记录度量的worker将拥有该日志文件,从而阻止其他worker中的其他记录器附加到度量日志文件。在重命名包之后
backtype.storm.metric
至org.apache.storm.metric
包重命名丢失worker.xml
文件。最后将度量记录器命名为
org.apache.storm.metric.LoggingMetricsConsumer
也就是说当你试图用LoggerFactory.getLogger(LoggingMetricsConsumer.class)
内部LoggingMetricsConsumer
类,实际创建的记录器是附加到根记录器并使用A1
追加器而不是METRICS
追加器。修复
对我来说,实际的修复涉及两件事(请注意,第一步是可选的)
可选地整理中的log4j2设置
worker.xml
以及cluster.xml
文件夹。只需确保日志设置中定义了度量记录器
worker.xml
就像在这个github commit for storm项目中修复STORM-1673
问题(已解决)1.0.0
以及2.0.0
). 相反,请确保度量记录器不再在中定义cluster.xml
不再归档。重命名度量记录器和分叉
LoggingMetricsConsumer
类将其指向新重命名的记录器(未连接到根记录器):首先确保你的指标记录在
worker.xml
文件不再命名org.apache.storm.metric.LoggingMetricsConsumer
但是说METRICS_LOGGER
根据这个片段:其次是“叉子”
LoggingMetricsConsumer
从与上述相同的github提交初始化。还请注意,fork是指为了修改它而将其源代码引入到您的项目中所需要的一切。您还可以定义自己的类实现
IMetricsConsumer
只要你把它附加到你的拓扑上。一旦你有了自己的LoggingMetricsConsumer
类,您必须修改它创建度量记录器的方式,以便:public static final Logger METRICS_LOG = LoggerFactory.getLogger("METRICS_LOGGER");
###如果您使用的storm版本不同于1.0.0或2.0.0,请注意最后一点一定要看看
LoggingMetricsConsumer
源代码和版本worker.xml
以及cluster.xml
从git分支中,您的版本已被删除。这个区域发生了很大的变化,每个变化都不向后兼容(包重命名、记录器移动)。