我正在尝试获取Apache Beam Dataflow管道中使用的所有指标的完整列表。
我记得,从1.x Java Dataflow SDK升级到Apache Beam Java SDK(v2.5)之后,我们注意到所有从未从0开始增加的计数器都没有得到报告。
我有这段代码可以从PipelineResult中提取所有指标,但是如果从不增加计数器,则不会列出。
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;
}
结论是,甚至有可能获得所有柜台的清单吗?
答案 0 :(得分:1)
docs for the queryMetrics method暗示着不能保证不会为从未增加的计数器提供结果:
请注意,跑步者对承诺值和尝试值的支持有所不同。
特别是对于Dataflow,DataflowMetrics#queryMetrics
的实现使您似乎不太可能知道从未增加的计数器。该方法检索MetricUpdate
的列表,然后继续进行汇总和过滤。因此,非递增计数器将不返回任何MetricUpdate
实例,因此不会出现在查询结果中。
但是,我以前没有使用Beam的指标API的经验,所以我可能不完全了解这里的可能。