当前位置: 首页 > 知识库问答 >
问题:

使用千分尺发布Spring Batch指标

苏阳州
2023-03-14

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

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

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

共有2个答案

东方旺
2023-03-14

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

运行平台的实现细节也多种多样-我们可以使用Spring Batch而不使用SCDF,不受Prometheus gateway的控制,可以使用推送,在云中运行,Istio将自动获取度量等。

对于OP问题,通常可以在Web实例中运行Spring批处理作业,只要我将Spring批处理与Web实例一起使用,应用程序就会在作业完成后关闭。

隆璞
2023-03-14

普罗米修斯是一个基于拉取的系统,这意味着你从正在运行的应用程序中给它一个URL,它会从中拉取指标。如果你的应用程序是一个短暂的批处理应用程序,仅仅为了在短时间内暴露一个URL而使它成为一个网络应用程序是没有意义的。这正是普罗米修斯的人创建推送网关的原因,请参阅何时使用推送网关。

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

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

有关此设置的完整示例,请参阅使用千分尺的批处理指标。此示例实际上与您的用例类似。它显示了计划每隔几秒钟运行一次的两个作业,它们将指标存储在千分尺的主注册表中,以及一个后台任务,该任务定期将指标从千分尺的注册表推送到Prometheus的网关。

另一个选择是使用RSocket协议,如果你使用Spring Cloud Dataflow,这个协议是免费提供的。

对于Spring Boot,Spring批次没有致动器终点,请参考Spring批次的致动器终点,了解关于此决定的原因的更多详情。

 类似资料:
  • 我对Spring很陌生,正在尝试将我的应用程序连接到麋鹿。该应用程序运行的是Spring boot 1.5.5,因此我使用的是微米遗产。我的pom看起来像这样: 每当我尝试启动我的应用程序时,我都会收到以下错误: 根本原因似乎是类io.micrometer.core.instrument.config.validate.Validated它似乎没有像它应该的那样出现在包中。对此有什么想法吗?

  • 我正在将JavaSpring项目从java 8迁移到java 11。所以我需要将dropwizard指标替换为千分尺。Dropwizard指标记录到达特定endpoint时的状态和响应。例如:endpoint- 有没有办法在千分尺中实现相同的效果?我知道有注释,但由于某种原因它不起作用。(我把它放在endpoint方法上)。 我的属性文件(仅与指标相关的值):

  • 响应于“/acturet/prometheus”的DistributionSummary可用的度量仅是度量的Sum、Max和Count。 我想显示在选定的时间量内API调用所用的平均时间。用于EX:API在过去5分钟内所用的平均时间。

  • 我正在利用dogstatsd方法,使用千分尺将指标发送给datadog。我获得了正常的指标,如计数器和计量器,但我无法生成事件。有办法生成datadog事件吗?

  • 假设我有一个应用程序,其中REST API更新产品的价格。 我想使用微米计来公开新价格作为指标。我无法理解微米计留档应该如何完成。 唯一对我有效的DoubleFunction是在我的ProductService中创建一个新方法来返回它的价格。这似乎是我想公开作为指标的每一条数据的开销。 我这里缺少什么?为什么不足以更新Gauge?

  • 是否有任何方法可以测量实用程序如何使用线程池?我已经浏览了代码,但还没有看到任何直接的选项。