使用 Micrometer 发布 Spring Batch 指标

问题描述 投票:0回答:2

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

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

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

java spring-boot spring-batch prometheus metrics
2个回答
1
投票

Prometheus 是一个基于拉取的系统,这意味着您从正在运行的应用程序中为其提供一个 URL,它将从中提取指标。如果您的应用程序是临时批处理应用程序,那么仅仅为了在短时间内公开 URL 而将其设为 Web 应用程序是没有意义的。这正是 Prometheus 人们创建 Push 网关的原因,请参阅何时使用 Push 网关

现在考虑到这一点,为了让您的批处理应用程序将指标发送到 Prometheus,您需要:

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

此设置的完整示例可以在Micrometer 的批量指标中找到。这个例子实际上与您的用例类似。它显示了两个作业计划每隔几秒运行一次,将指标存储在 Micrometer 的主注册表中,以及一个后台任务,该后台任务定期从 Micrometer 的注册表将指标推送到 Prometheus 的网关。

另一种选择是使用 RSocket 协议,如果您使用

Spring Cloud Dataflow,该协议是免费提供的。

对于 Spring Boot,Spring Batch 没有执行器端点,请参阅

Spring Batch 的执行器端点,了解有关此决定的原因的更多详细信息。


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

还有运行平台的各种实现细节 - 我们可以在没有 SCDF 的情况下使用 Spring Batch,无需控制 Prometheus 网关即可使用推送,在云中运行,Istio 将自动提取指标等。

对于OP问题,一般来说,

可以在Web实例中运行Spring Batch作业,就我在Web实例中使用Spring Batch而言,应用程序会在作业完成后关闭。

© www.soinside.com 2019 - 2024. All rights reserved.