如何获得管道中使用的所有Apache Beam指标的列表?

时间:2019-01-28 18:20:14

标签: java apache-beam dataflow

我正在尝试获取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;
}

结论是,甚至有可能获得所有柜台的清单吗?

1 个答案:

答案 0 :(得分:1)

docs for the queryMetrics method暗示着不能保证不会为从未增加的计数器提供结果:

  

请注意,跑步者对承诺值和尝试值的支持有所不同。

特别是对于Dataflow,DataflowMetrics#queryMetrics的实现使您似乎不太可能知道从未增加的计数器。该方法检索MetricUpdate的列表,然后继续进行汇总和过滤。因此,非递增计数器将不返回任何MetricUpdate实例,因此不会出现在查询结果中。

但是,我以前没有使用Beam的指标API的经验,所以我可能不完全了解这里的可能。