我正在尝试获取 Apache Beam 数据流管道中使用的所有指标的完整详尽列表。
我记得,从 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;
}
总而言之,是否有可能获得所有计数器的列表?
最佳答案
docs for the queryMetrics method暗示无法保证为永远不会递增的计数器提供结果:
Note that runners differ in their support for committed and attempted values.
特别是对于 Dataflow,DataflowMetrics#queryMetrics
的实现让您看起来不太可能知道从未递增的计数器。该方法检索 MetricUpdate
列表,然后继续进行聚合和过滤。因此,非递增计数器不会返回任何 MetricUpdate
实例,因此不会出现在查询结果中。
不过,我之前对 Beam 的指标 API 没有太多经验,所以我可能不完全理解这里的可能性。
关于java - 如何获取管道中使用的所有 Apache Beam 指标的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54408077/