使用 Prometheus 监控容器化 Spark v2.1 应用程序
Posted
技术标签:
【中文标题】使用 Prometheus 监控容器化 Spark v2.1 应用程序【英文标题】:Monitor containerized Spark v2.1 application with Prometheus 【发布时间】:2021-08-25 06:17:17 【问题描述】:我编写了一个使用 maven 编译并使用 spark-submit 运行它的 Spark 应用程序。 我想监控我的应用程序并收集指标。因此,我使用了 Prometheus 容器,但我正在努力向它公开一个简单的指标。我试图关注答案here。 但是我不明白我应该如何处理 spark.yml 文件。
我有一个计算一些东西的 Prometheus 客户端。 我在 spark/conf/metrics.properties 中取消注释 *.sink.jmx.class=org.apache.spark.metrics.sink.JmxSink 我将 JMX Prometheus Javaagent 添加到我的 pom.xml 中这是我的 prometheus.yml:
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
- job_name: spark-master
static_configs:
- targets: ['spark-master:8082']
当我查看 http://localhost:9090/targets 中的目标时 我可以看到 Prometheus 目标已启动,而 Spark 已关闭
【问题讨论】:
【参考方案1】:我认为答案取决于您要在 Spark 2.1 中监控的内容。
如果是 JVM 指标——我认为你做不到。原因很简单,您不知道将在 Spark 集群中的何处创建 JVM。如果我们知道不可能在同一个节点中启动多个 JVM,因为每个 JMX 代理都需要动态分配一个端口,而 Prometheus 服务器需要一个精确的 scraping url,而这是不可能的。
如果要求是使用推送网关衡量业务特定指标,那么可以这样做,因为 Prometheus 服务器会抓取特定的 抓取 url。
也许您需要查看支持 Prometheus 的更新版本的 Spark3.0。请点击此链接 - https://spark.apache.org/docs/latest/monitoring.html
【讨论】:
嗨@floating_hammer,很遗憾,我不能使用 Spark 3.x。我的目标是监控我正在运行的 Spark 应用程序的自定义指标。 (例如,计算其中一个类生成了多少次)。我怎样才能做到这一点? @Oded - 如果您使用自定义指标(如您所述)。您可以使用普罗米修斯推送网关。您需要将指标发布到 pushgateway,Prometheus 服务器会从那里抓取它。 到目前为止,我已经在我的源代码中创建了一个带有 io.prometheus.client 的计数器。我使用了 JMX-exporter,但我的 Prometheus 容器未能从中刮取。 pushgateway 进入该流程的哪个位置?它在做什么? @Oded - Prometheus pushgateway 用于将自定义/应用程序特定的指标发布到 Prometheus。您可以在此链接 prometheus.io/docs/practices/pushing 和 Github - github.com/prometheus/pushgateway 上找到更多信息。所以流程是应用程序发布到 Pushgateway。 Prometheus Server 从 Pushgateway 抓取。以上是关于使用 Prometheus 监控容器化 Spark v2.1 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
使用 cAdvisor 和 Prometheus 监控未命名容器