【问题标题】:Prometheus data gaps when monitoring app under heavy load在重负载下监控应用程序时 Prometheus 数据缺口
【发布时间】:2021-04-01 08:59:49
【问题描述】:

prometheus 通过 micrometer.io 中的构建监控 spring boot + spring 集成应用程序。 spring boot 应用程序将公开 locahost:8080/actuator/prometheus。监控数据到达prometheus,可以显示为图表。这工作正常。

我的问题是我在普罗米修斯数据中发现了一些空白。当应用程序负载过重时,就会出现这些差距。当应用程序非常繁忙时,locahost:8080/actuator/prometheus 的响应时间变长是正常的。在我的情况下,没有负载不到 1 秒,但负载大约 1 分钟。目标在 prometheus status->targets 中显示为离线。一种可能性是设置scrape_interval = 2min,但查看更多详细信息很重要。

我的问题:这种情况有解决方案吗? (设置监控url的优先级?,将信息临时存储在spring boot app中并稍后发送)

更新:我正在尝试监控 spring 集成指标,但对于这个问题,哪个指标并不重要。可以是 jvm heap 之类的东西。

【问题讨论】:

    标签: java spring monitoring prometheus


    【解决方案1】:

    一般情况下查询metrics端点使用是相当快的。

    我想到了三种情况,这可能是它变慢的原因:

    a) 您的应用程序负载过重,以至于它需要很长时间才能接受 http 请求。这意味着您的应用程序提供了太多的请求,然后它可以处理。在这种情况下,给它更多的资源、线程或任何瓶颈。 (见here)

    b) 您注册了需要大量时间来计算或获取值的自定义仪表。例如。在 Gauge getter 函数中进行数据库查询是一个杀手,因为每次查询指标端点时,您的应用程序都需要查询数据库,然后才能呈现指标。更糟糕的是,如果您有多个(按顺序处理)并且它们的性能取决于您的应用程序负载(例如,当您的应用程序负载过重时数据库服务器变慢时,这会使情况变得更糟)

    c) 您的指标标签基数取决于您的应用程序使用情况(这是一种不好的做法)。例如。当您的应用程序被大量使用时,为每个用户或每个会话设置一个标签会增加指标的数量。这不仅会给您的应用程序带来压力(因为每个指标都需要一些内存),而且还会给您的 Prometheus 服务器带来压力,因为它会为每个唯一的标签值组合创建文件。

    您可以做的,但这不能解决问题的原因是增加scrape_timeout 的值(请参阅here)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-25
      • 2020-07-03
      • 1970-01-01
      相关资源
      最近更新 更多