You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark 3.1是否支持向Prometheus推送指标?是否有对应handler?

Spark 3.1 对接 Prometheus 的指标推送能力说明

核心结论

Spark 3.1 没有内置主动向 Prometheus 推送指标的官方handler,原生提供的Prometheus指标对接能力仅支持pull拉取模式。


原生能力边界说明

Spark 3.1 的指标体系(Metrics System)基于Dropwizard Metrics实现,官方自带的Prometheus相关实现只有PrometheusServlet:该组件会在Driver、Executor的HTTP服务上暴露/metrics/prometheus接口,等待Prometheus Server定时拉取指标,全程没有主动向外发起指标上报的逻辑。

额外说明:Prometheus Server本身就没有设计面向业务端的直接指标推送接收接口,其提供的Remote Write接口是用于存储联邦、远端存储同步的,并非为业务指标上报场景设计,所有主动推送指标的场景,Prometheus官方标准方案是通过Pushgateway做中转,再由Prometheus从Pushgateway拉取指标。

主动推送的落地实现方案

如果需要实现Spark侧主动上报指标的效果,不需要魔改Spark内核,有三种成熟路径可选:

  • 基于原生GraphiteSink + Graphite Exporter中转:不需要额外开发,仅修改Spark的metrics配置即可。Spark原生自带Graphite协议的推送sink,主动将指标推送到部署好的Graphite Exporter端口,再由Prometheus拉取Exporter暴露的指标,全版本兼容Spark 3.1。
  • 自定义MetricSink实现Pushgateway推送:自行实现org.apache.spark.metrics.sink.Sink接口,重写start、stop、report方法,在report逻辑里实现指标格式化、推送到Pushgateway的逻辑即可。编译打包后将jar放入Spark的jars目录,在metrics配置中启用该自定义sink就能生效,开发量很小。
  • 引入第三方Remote Write Sink:如果你的后端是兼容Prometheus Remote Write协议的时序存储(比如VictoriaMetrics、M3DB等),可以直接使用开源的Spark Remote Write指标sink依赖,不需要自行开发推送逻辑,配置后即可直接向存储端推送指标。

配置示例(GraphiteSink中转模式)

在Spark的metrics.properties文件中添加如下配置即可实现Driver/Executor每10秒主动上报一次指标:

*.sink.graphite.class=org.apache.spark.metrics.sink.GraphiteSink
*.sink.graphite.host=graphite-exporter部署地址
*.sink.graphite.port=9109
*.sink.graphite.period=10
*.sink.graphite.unit=seconds
*.sink.graphite.prefix=spark_business_metrics
  • 注意:不要尝试跳过中转组件直接向Prometheus Server推送指标,会直接导致Prometheus出现时序标签冲突、存储负载异常、指标乱序等问题,不符合Prometheus的设计逻辑。
  • 补充:Spark 3.2及后续更高版本,官方也没有新增内置的Prometheus推送类sink,所有推送场景都需要走上述方案实现,不存在版本升级后原生支持的情况。

内容的提问来源于stack exchange,提问作者Esther Rodriguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 04:48:18