使用 Micrometer 发布 Spring Batch 指标
Posted
技术标签:
【中文标题】使用 Micrometer 发布 Spring Batch 指标【英文标题】:Publishing Spring Batch metrics using Micrometer 【发布时间】:2021-06-13 23:19:03 【问题描述】:我有一个包含 2 打春季批处理 cron 作业的应用程序。没有休息控制器,因为它是一个分析应用程序,它每天运行并从数据库中读取数据,处理它,然后将聚合数据存储在另一个数据库中。我想使用千分尺对工作进行弹簧内置指标并将它们推送到 Prometheus 。由于我的应用程序不是网络服务器应用程序,所以千分尺仍然会在 HOST:8080 上发布结果吗?执行器会自动在 HOST:8080 上启动一个新服务器吗?还是我们需要在 8080 上运行应用程序服务器?
我的理解是执行器和应用程序服务器可以运行不同的端口,因为它们是不同的进程?即使应用程序服务器存在与否,执行器应该能够使用与应用程序服务器端口相同的端口,或者它可以使用不同的端口港口?
所以如果我的应用程序不是基于网络服务器的应用程序,我仍然可以在 localhost:8080/actuator/ 访问指标并发布到 Prometheus?
【问题讨论】:
但如果是批量,则只能在短时间内使用。结帐github.com/spring-projects/spring-batch/blob/master/… 短时间是什么意思?另外,正如我在网上提到的,一些消息来源说,我只需要添加对工件的依赖即可。 micrometer-core 和 micrometer-registry-prometheus 仅此而已,我假设它会自动推送到 /actuator/promethous,然后我可以从那里进行抓取。为什么我们需要 PrometheusConfiguration 类? 这是一个批处理应用程序,不是吗?你是怎么开始的? 是的,它是一个 spring 批处理应用程序。当我运行主类时,所有作业都将被加载,并且由于所有作业都是根据 cron 表达式每天安排的,所以主将永远连续运行将来总是要执行的工作吗?我错过了什么吗? 现在我明白了。如果只添加 Actuator,则不会有 Webserver。您也必须添加网络启动器 【参考方案1】:Prometheus 是一个基于拉取的系统,这意味着你给它一个正在运行的应用程序的 URL,它会从中拉取指标。如果您的应用程序是一个临时批处理应用程序,那么仅仅为了在短时间内公开一个 URL 而将其变成一个 webapp 是没有意义的。这正是 Prometheus 人员创建 Push 网关的原因,请参阅 When to use the Push Gateway。
现在请记住,为了让您的批处理应用程序将指标发送到 Prometheus,您需要:
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。
【讨论】:
但是docs.spring.io/spring-batch/docs/current/reference/html/…,它会自动获取指标,如果设置了执行器,那么即使我的应用程序不是网络服务器应用程序,执行器应该给我一个端点来监控健康和所有和在同一端点上,我也可以根据此文档获得批量指标? 您为什么需要执行器?基于 Spring Boot 的批处理应用程序(非 webapp)可以使用千分尺并将指标发送到后端,而无需执行器依赖,也不会暴露任何端点。您可能看不到指标,因为默认情况下,以微米为单位的全局注册表是一个空的组合。您需要添加至少一个注册表来保留指标,请参阅***.com/questions/64869472/…。 我明白你的意思。这是我试图理解的一些代码,现在我刚刚看到,在我需要工作的特定分支中,它有网络服务器,它只公开一个 API (/pingCheck),所有应用程序都在其中回复“我醒了”。所以现在,我有 2 打批次,还有一个 pinCheck(API),你在这里有什么建议,公开执行器有意义还是应该使用 PushGteway? 请看一次***.com/questions/66678874/…。它延伸到上面,但我虽然它是分开的。如果你能提出建议,也对上面的评论有很大的帮助does it make sense to expose actuator or shall I use PushGteway?
:如答案中所述,弹簧批处理没有执行器端点。所以除非你想自己开发,否则需要使用pushgatewy或者rsocket的方式。以上是关于使用 Micrometer 发布 Spring Batch 指标的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Spring Boot 在运行时配置 Micrometer 的监控系统
使用 Micrometer 或 Spring Metrics 的 Prometheus 的 Spring Boot 指标
如何使用 Micrometer 获取 Spring Integration 队列中的消息数?
MongoDB 的 Spring Boot Micrometer 指标
在 Spring Boot Camel 应用程序公开的 Micrometer / Prometheus 信息中包含其他 JMX 指标