使用 Micrometer 发布 Spring Batch 指标

我有一个包含 2 打 spring 批处理 cron 作业的应用程序。没有休息控制器,因为它是一个分析应用程序,它每天运行并从数据库中读取数据,处理它,然后将聚合数据存储在另一个数据库中。我想使用千分尺对工作有弹簧内置指标并将它们推送到 Prometheus。由于我的应用程序不是网络服务器应用程序,所以千分尺仍然会在 HOST:8080 上发布结果吗?执行器会自动在 HOST:8080 上启动新服务器吗?还是我们需要在 8080 上运行应用程序服务器?

我的理解是执行器和应用程序服务器可以运行不同的端口,因为它们是不同的进程?即使应用程序服务器存在与否,执行器应该能够使用与应用程序服务器端口相同的端口,还是可以使用不同的端口?

因此,如果我的应用程序不是基于网络服务器的应用程序,我仍然可以在 localhost:8080/actuator/ 访问指标并发布到 Prometheus?

stack overflow Publishing Spring Batch metrics using Micrometer
原文答案
author avatar

接受的答案

Prometheus 是一个基于拉取的系统,这意味着你给它一个正在运行的应用程序的 URL,它会从中拉取指标。如果您的应用程序是一个临时批处理应用程序,那么仅仅为了在短时间内公开一个 URL 而将其变成一个 webapp 是没有意义的。这正是 Prometheus 人员创建 Push 网关的原因,参见 When to use the Push Gateway

现在请记住,为了让您的批处理应用程序将指标发送到 Prometheus,您需要:

  • 一个普罗米修斯服务器
  • 一个 Pushgateway 服务器
  • 一个可选的指标仪表板(Grafana 或类似的,Prometheus 也提供了一个内置的 UI)
  • 让您的批处理应用程序将指标推送到网关

可以在 Batch metrics with Micrometer 中找到有关此设置的完整示例。此示例实际上与您的用例相似。它显示了两个作业 scheduled 每隔几秒运行一次,它们将指标存储在 Micrometer 的主注册表中,以及一个后台任务 pushes metrics 定期从 Micrometer 的注册表到 Prometheus 的网关。

另一种选择是使用 RSocket 协议,如果您使用 Spring Cloud Dataflow ,该协议是免费提供的。

对于 Spring Boot,Spring Batch 没有执行器端点,请参阅 Actuator endpoint for Spring Batch 了解有关此决定的原因的更多详细信息。


答案:

作者头像

@Mahmoud 我认为有一些有效的用例可以选择性地公开健康端点。要考虑的第一个问题是,当我们说批处理操作运行时间很短时,该时间有多短——几分钟?我同意没有必要;但是运行几个小时的作业呢?对于某些作业,我们获得指标很重要,尤其是当此类作业受业务 SLA 约束并且操作员需要知道作业是否以每秒所需的操作进行处理时,是否具有正确的连接池大小等。

运行平台还有多种实现细节——我们可以在没有 SCDF 的情况下使用 Spring Batch,不受 Prometheus 网关控制以能够使用推送,在 Istio 将自动拉取指标的云中运行等。

对于 OPs 问题,一般来说, can 在 Web 实例中运行 Spring Batch 作业,就我在 Web 实例中使用 Spring Batch 而言,应用程序在作业完成后确实会关闭。