使用 Micrometer 发布 Spring 批量指标
Publishing Spring Batch metrics using Micrometer
我有一个包含 2 打 spring 批处理 cron 的应用程序 jobs.There 没有休息控制器,因为它是一个分析应用程序,它每天 运行s 并从数据库读取数据,对其进行处理,然后将汇总数据存储在另一个 db.I 中,希望使用千分尺在作业上使用 spring 内置指标并将它们推送到普罗米修斯。由于我的应用程序不是网络服务器应用程序,因此千分尺仍然会在 HOST:8080 上发布结果?执行器会在 HOST:8080 上自动启动新服务器吗?还是我们需要在 8080 上安装应用程序服务器 运行ning?
我的理解是执行器和应用程序服务器可以 运行 不同的端口,因为它们是不同的进程?即使应用程序服务器存在或不存在,执行器也应该能够使用与应用程序服务器端口相同的端口, 或者它可以使用不同的端口?
因此,如果我的应用程序不是基于网络服务器的应用程序,我仍然可以在 localhost:8080/actuator/ 访问指标并发布到 Prometheus?
Prometheus 是一个基于拉取的系统,这意味着您从 运行 应用程序中给它一个 URL,它就会从中拉取指标。如果您的应用程序是一个短暂的批处理应用程序,那么仅仅为了在短时间内公开 URL 而将其设为 Web 应用程序是没有意义的。这正是 Prometheus 人员创建 Push 网关的原因,请参阅 When to use the Push Gateway。
现在记住,为了让您的批处理应用程序将指标发送到 Prometheus,您需要:
- 普罗米修斯服务器
- Pushgateway 服务器
- 一个可选的指标仪表板(Grafana 或类似的,Prometheus 也提供了一个内置的 UI)
- 让您的批处理应用程序将指标推送到网关
可以在 Batch metrics with Micrometer. This example is actually similar to your use case. It shows two jobs scheduled to run every few seconds which store metrics in Micrometer's main registry and a background task that pushes metrics 定期从 Micrometer 的注册表到 Prometheus 的网关中找到此设置的完整示例。
另一种选择是使用 RSocket 协议,如果您使用 Spring Cloud Dataflow,它是免费提供的。
对于Spring引导,Spring批处理没有执行器端点,请参阅Actuator endpoint for Spring Batch以了解有关此决定的更多详细信息。
@Mahmoud 我认为有一些有效的用例可以选择性地公开健康端点。第一个要考虑的问题是,当我们说一个短时间的批处理操作 运行s 时,这个时间有多短——几分钟?我同意没有必要;但是 运行 几个小时的工作怎么样?对于某些作业来说,我们获得指标很重要,尤其是当此类作业受业务 SLA 约束时,操作员需要知道作业是否以每秒所需的操作进行处理,是否具有正确的连接池大小等。
还有运行ning平台的各种实现细节-我们可以使用Spring批处理而不用SCDF,不用控制Prometheus网关就可以使用push, 运行 在云中,Istio 将自动提取指标等
关于OP的问题,一般来说可以 运行一个spring Web实例中的批处理作业,据我所用Spring 使用 Web 实例进行批处理,作业完成后应用程序确实关闭。
我有一个包含 2 打 spring 批处理 cron 的应用程序 jobs.There 没有休息控制器,因为它是一个分析应用程序,它每天 运行s 并从数据库读取数据,对其进行处理,然后将汇总数据存储在另一个 db.I 中,希望使用千分尺在作业上使用 spring 内置指标并将它们推送到普罗米修斯。由于我的应用程序不是网络服务器应用程序,因此千分尺仍然会在 HOST:8080 上发布结果?执行器会在 HOST:8080 上自动启动新服务器吗?还是我们需要在 8080 上安装应用程序服务器 运行ning?
我的理解是执行器和应用程序服务器可以 运行 不同的端口,因为它们是不同的进程?即使应用程序服务器存在或不存在,执行器也应该能够使用与应用程序服务器端口相同的端口, 或者它可以使用不同的端口?
因此,如果我的应用程序不是基于网络服务器的应用程序,我仍然可以在 localhost:8080/actuator/ 访问指标并发布到 Prometheus?
Prometheus 是一个基于拉取的系统,这意味着您从 运行 应用程序中给它一个 URL,它就会从中拉取指标。如果您的应用程序是一个短暂的批处理应用程序,那么仅仅为了在短时间内公开 URL 而将其设为 Web 应用程序是没有意义的。这正是 Prometheus 人员创建 Push 网关的原因,请参阅 When to use the Push Gateway。
现在记住,为了让您的批处理应用程序将指标发送到 Prometheus,您需要:
- 普罗米修斯服务器
- Pushgateway 服务器
- 一个可选的指标仪表板(Grafana 或类似的,Prometheus 也提供了一个内置的 UI)
- 让您的批处理应用程序将指标推送到网关
可以在 Batch metrics with Micrometer. This example is actually similar to your use case. It shows two jobs scheduled to run every few seconds which store metrics in Micrometer's main registry and a background task that pushes metrics 定期从 Micrometer 的注册表到 Prometheus 的网关中找到此设置的完整示例。
另一种选择是使用 RSocket 协议,如果您使用 Spring Cloud Dataflow,它是免费提供的。
对于Spring引导,Spring批处理没有执行器端点,请参阅Actuator endpoint for Spring Batch以了解有关此决定的更多详细信息。
@Mahmoud 我认为有一些有效的用例可以选择性地公开健康端点。第一个要考虑的问题是,当我们说一个短时间的批处理操作 运行s 时,这个时间有多短——几分钟?我同意没有必要;但是 运行 几个小时的工作怎么样?对于某些作业来说,我们获得指标很重要,尤其是当此类作业受业务 SLA 约束时,操作员需要知道作业是否以每秒所需的操作进行处理,是否具有正确的连接池大小等。
还有运行ning平台的各种实现细节-我们可以使用Spring批处理而不用SCDF,不用控制Prometheus网关就可以使用push, 运行 在云中,Istio 将自动提取指标等
关于OP的问题,一般来说可以 运行一个spring Web实例中的批处理作业,据我所用Spring 使用 Web 实例进行批处理,作业完成后应用程序确实关闭。