prometheus在重负载下监控应用程序时的数据缺口

sxpgvts3  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(430)

spring boot+spring集成应用程序由prometheus通过内置microimeter.io进行监控。SpringBoot应用程序将公开locahost:8080/actuator/prometheus. 监测数据到达普罗米修斯,可以显示为图形。这很有效。
我的问题是我在普罗米修斯的数据中发现了一些漏洞。当应用程序处于重载状态时,会出现这些间隙。这是正常的,当应用程序是非常繁忙的响应时间locahost:8080/actuator/prometheus 再长一点。在我的例子中,没有负载的时间少于1秒,但是有负载的时间大约是1分钟。目标在prometheus status->targets中显示为offline。一种可能是设置 scrape_interval = 2min 但看到更多的细节信息是很重要的。
我的问题是:这种情况有解决方案吗(将优先级设置为监视url?,将临时信息存储在spring boot应用程序中并稍后发送)
更新:我试图监视spring集成度量,但是对于这个问题,哪个度量并不重要。可能是jvm堆之类的东西。

eqzww0vc

eqzww0vc1#

在正常情况下,使用端点查询度量非常快。
我想到了三种情况,这可能是它变慢的原因:
a) 你的应用程序负载太重,以至于在它接受http请求之前花费了太多的时间。这意味着你的应用程序提供了太多的请求,然后它可以处理。在这种情况下,给它更多的资源、线程或任何瓶颈((见此处)
b) 您已经注册了需要大量时间来计算或获取值的自定义 Jmeter 。e、 g.在gauge getter函数中使用db查询是个杀手锏,因为每次查询度量端点时,应用程序都需要查询数据库,只有这样才能呈现度量。更糟糕的是,如果您有多个这样的应用程序(它们是按顺序处理的),并且它们的性能取决于您的应用程序负载(例如,当您的应用程序负载较重时,db服务器速度变慢,这将使情况更糟)
c) 度量标签基数取决于应用程序的使用情况(这是一种不好的做法)。e、 g.为每个用户或每个会话设置一个标签将在应用程序大量使用时增加度量值。这不仅会给应用程序带来压力(因为每个指标都需要一些内存),而且还会给prometheus服务器带来压力,因为它会为每个唯一的标签值组合创建文件。
你可以做什么,但这不会解决你的问题的原因是增加了价值 scrape_timeout (参见此处)。

相关问题