spring boot + spring集成应用程序由普罗米修斯通过在micrometer.io中构建进行监控。spring boot应用程序将暴露locahost:8080/actuator/prometheus。监测数据到达普罗米修斯,并可以以图形的形式显示。这工作得很好。
我的问题是我在普罗米修斯的数据中得到了一些空白。当应用程序负载过重时,就会出现这些差距。当应用程序非常繁忙时,locahost:8080/actuator/prometheus的响应时间变长是正常的。在我的例子中,无负载的时间不到1秒,但有负载的时间约为1分钟。目标在prometheus status->targets中显示为脱机。一种可能是设置scrape_interval = 2min
,但重要的是要查看更多详细信息。
我的问题是:这种情况下有解决方案吗?(设置优先监控url?,在spring boot app中暂存信息,稍后发送)
更新:我正在尝试监控spring集成指标,但对于这个问题,哪个指标并不重要。可以是类似于jvm堆的任何东西。
发布于 2021-04-03 18:25:36
在正常情况下,使用查询指标端点是相当快的。
有三个场景出现在我的脑海中,这可能是它变慢的原因:
a)您的应用程序负载太重,在接受http请求之前需要花费太多时间。这意味着你的应用程序服务了太多的请求,超出了它的处理能力。在这种情况下,给它更多的资源,线程或其他瓶颈。(参见here)
b)您已经注册了需要大量时间来计算或获取值的自定义仪表。例如,在Gauge getter函数中使用DB查询是一个杀手锏,因为每次查询指标端点时,您的应用程序都需要查询数据库,然后才能呈现指标。更糟糕的是,如果你有多个这样的服务器(按顺序处理),它们的性能依赖于你的应用程序负载(例如,当你的应用程序负载很重时,DB服务器变得更慢,这将使情况变得更糟)
c)您的指标标签基数取决于您的应用程序使用情况(这是一种糟糕的做法)。例如,为每个用户或每个会话添加标签将增加应用程序在大量使用时的指标数量。这不仅会给您的应用程序带来压力(因为每个指标都需要一些内存),而且还会给您的Prometheus服务器带来压力,因为它会为每个唯一的标签值组合创建文件。
你可以做的,但这不会解决你的问题的原因是增加scrape_timeout
的值(参见here)。
https://stackoverflow.com/questions/66901475
复制相似问题