我有一个包含 2 打 Spring Batch cron 作业的应用程序。没有休息控制器,因为它是一个分析应用程序,它每天运行并从数据库读取数据,处理它,然后将聚合数据存储在另一个数据库中。我想要使用 Micrometer 对作业进行 Spring 内置指标并将其推送到 Prometheus。由于我的应用程序不是网络服务器应用程序,所以 Micrometer 仍然会在 HOST:8080 上发布结果吗? Actuator会自动在HOST:8080上启动一个新服务器吗?还是我们需要在8080上运行应用程序服务器?
我的理解是执行器和应用程序服务器可以运行不同的端口,因为它们是不同的进程?即使应用程序服务器存在或不存在,执行器应该能够使用与应用程序服务器端口相同的端口,或者可以使用不同的端口?
因此,如果我的应用程序不是基于网络服务器的应用程序,我仍然可以访问 localhost:8080/actuator/ 上的指标并发布到 Prometheus?
Prometheus 是一个基于拉取的系统,这意味着您从正在运行的应用程序中为其提供一个 URL,它将从中提取指标。如果您的应用程序是临时批处理应用程序,那么仅仅为了在短时间内公开 URL 而将其设为 Web 应用程序是没有意义的。这正是 Prometheus 人们创建 Push 网关的原因,请参阅何时使用 Push 网关。
现在考虑到这一点,为了让您的批处理应用程序将指标发送到 Prometheus,您需要:
此设置的完整示例可以在Micrometer 的批量指标中找到。这个例子实际上与您的用例类似。它显示了两个作业计划每隔几秒运行一次,将指标存储在 Micrometer 的主注册表中,以及一个后台任务,该后台任务定期从 Micrometer 的注册表将指标推送到 Prometheus 的网关。
另一种选择是使用 RSocket 协议,如果您使用Spring Cloud Dataflow,该协议是免费提供的。
对于 Spring Boot,Spring Batch 没有执行器端点,请参阅Spring Batch 的执行器端点,了解有关此决定的原因的更多详细信息。
还有运行平台的各种实现细节 - 我们可以在没有 SCDF 的情况下使用 Spring Batch,无需控制 Prometheus 网关即可使用推送,在云中运行,Istio 将自动提取指标等。
对于OP问题,一般来说,
可以在Web实例中运行Spring Batch作业,就我在Web实例中使用Spring Batch而言,应用程序会在作业完成后关闭。