如何获取管道中使用的所有 Apache Beam 指标的列表?
Posted
技术标签:
【中文标题】如何获取管道中使用的所有 Apache Beam 指标的列表?【英文标题】:How can I get a list of all Apache Beam metrics used in the pipeline? 【发布时间】:2019-06-21 19:33:21 【问题描述】:我正在尝试获取 Apache Beam 数据流管道中使用的所有指标的完整详尽列表。
我记得,在从 1.x Java Dataflow SDK 升级到 Apache Beam Java SDK (v2.5) 后,我们注意到所有从未从 0 增加的计数器都不会被报告。
我有这段代码可以从 PipelineResult 中提取所有指标,但如果 Counter 从未递增,则不会列出。
public static ArrayList<String> getAggregationFields(PipelineResult pr)
MetricsFilter filter = MetricsFilter.builder().build();
MetricQueryResults metricQueryResults = pr.metrics().queryMetrics(filter);
Iterable<MetricResult<Long>> counters = metricQueryResults.getCounters();
ArrayList<String> fieldNames = new ArrayList<>();
for (MetricResult<Long> metricValue : counters)
fieldNames.add(metricValue.getName().getName());
return fieldNames;
最后,是否有可能获得所有计数器的列表?
【问题讨论】:
【参考方案1】:docs for the queryMetrics method 暗示不能保证为从不递增的计数器提供结果:
请注意,运行器对承诺值和尝试值的支持不同。
特别是对于 Dataflow,DataflowMetrics#queryMetrics
的实现使您看起来不太可能知道从未递增过的计数器。该方法检索MetricUpdate
s 的列表,然后进行聚合和过滤。因此,非递增计数器将不会返回任何 MetricUpdate
实例,因此不会出现在查询结果中。
不过,我之前对 Beam 的指标 API 没有太多经验,因此我可能无法完全理解这里的可能性。
【讨论】:
以上是关于如何获取管道中使用的所有 Apache Beam 指标的列表?的主要内容,如果未能解决你的问题,请参考以下文章
Python 上的 Apache Beam 将 beam.Map 调用相乘
如何组合两个结果并将其传递到 apache-beam 管道中的下一步