我正在尝试将火花与普罗米修斯集成。我们有 spark 2 和 spark 3。对于 spark 2,我知道我可以运行jmx_exporter。Spark 3 有一个新的内置 PrometheusServlet,非常棒。我们使用 YARN 而不是 k8s 在 prem 上运行 spark。
我的问题是如何动态发现普罗米修斯抓取目标。据我了解,没有可以指向的静态单一中央 Spark 服务器,而是每个应用程序都打包到一个纱线容器中并有自己的指标。除非有办法聚合这些指标(例如在 spark 历史服务器中)或为每个作业提供静态可预测地址?
当我提交一个火花流式长时间运行的应用程序时,我希望它的指标能够开箱即用地显示在 Prometheus 中。我知道新的 PrometheusServlet 可以使用注释对 k8s 进行自动发现,我想为 yarn 实现类似的功能。
到目前为止我发现了什么:
- 我可以让 prometheus 抓取 pushgateway,并在运行 spark-submit 时让我的应用程序在那里发送指标。我找到了一个可以做到这一点的定制水槽。然而 pushgateway 引入了它自己的问题,所以希望避免它。
- 使用 Prometheus文件服务发现机制在那里添加目标。但是,我如何自动执行此操作,而无需每次提交新作业时手动编辑 json 文件?我发现 prometheus 没有一个 API 来添加目标,并且在我运行 spark-submit 时编写一个可以远程更改 json 文件的作业感觉有点 hacky。
欢迎任何关于优雅解决方案的建议,谢谢!