如何获取管道中使用的所有 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 的实现使您看起来不太可能知道从未递增过的计数器。该方法检索MetricUpdates 的列表,然后进行聚合和过滤。因此,非递增计数器将不会返回任何 MetricUpdate 实例,因此不会出现在查询结果中。

不过,我之前对 Beam 的指标 API 没有太多经验,因此我可能无法完全理解这里的可能性。

【讨论】:

以上是关于如何获取管道中使用的所有 Apache Beam 指标的列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不运行管道的情况下使用Apache Beam连接器

Dataflow 大型侧输入中的 Apache Beam

Python 上的 Apache Beam 将 beam.Map 调用相乘

如何组合两个结果并将其传递到 apache-beam 管道中的下一步

Apache Beam实战指南 | 大数据管道(pipeline)设计及实践

使用 Python 处理 Apache Beam 管道中的异常