spring-boot - SpringBoot - *_max *_count *_sum 指标的可观察性

标签 spring-boot prometheus grafana actuator

关于 Spring Boot、一些有用的默认指标以及如何在 Grafana 中正确使用它们的小问题。
目前使用带有 Actuator + Micrometer + Prometheus 依赖项的 Spring Boot 2.5.1+(适用于 2.x.x. 的问题),有很多非常方便的默认指标开箱即用。
我看到很多很多都有图案 _max _count _sum .
举几个例子:

spring_data_repository_invocations_seconds_max
spring_data_repository_invocations_seconds_count
spring_data_repository_invocations_seconds_sum

reactor_netty_http_client_data_received_bytes_max
reactor_netty_http_client_data_received_bytes_count
reactor_netty_http_client_data_received_bytes_sum

http_server_requests_seconds_max
http_server_requests_seconds_count
http_server_requests_seconds_sum
不幸的是,我不确定如何处理它们,如何正确使用它们,并且感觉我的无知让我错过了一些很棒的应用程序见解。
在网上搜索,我看到有些人使用这样的方法来计算 Grafana 的平均值:
irate(http_server_requests_seconds::sum{exception="None", uri!~".*actuator.*"}[5m]) / irate(http_server_requests_seconds::count{exception="None", uri!~".*actuator.*"}[5m])
但不确定这是否是使用它们的正确方法。
请问可以进行哪些类型的查询,通常在处理_max _count _sum 类型的度量时使用。请?
谢谢

最佳答案

countsum一般用于计算平均值。 count累计次数sum增加,而 sum持有某物的总值(value)。让我们拿 http_server_requests_seconds例如:

http_server_requests_seconds_sum   10
http_server_requests_seconds_count 5
通过上面的示例,可以说有 5 个 HTTP 请求,它们的总持续时间为 10 秒。如果分sum来自 count您将获得 2 秒的平均请求持续时间。
无论这两个标签是什么(您可以将它们用于聚合/过滤),您都可以创建至少两个有用的面板:平均请求持续时间(即平均延迟)和请求率。
请求率
使用 rate()irate()您可以获得每秒有多少请求的函数:
rate(http_server_requests_seconds_count[5m])
rate()工作方式如下:
  • Prometheus 从给定的时间间隔(本例中为 [5m])中采样,并计算当前时间点(不一定是现在)和 [5m] 之间的差异前。
  • 然后将获得的值除以间隔中的秒数。

  • 因此,间隔越大,线条就越平滑。
    平均请求持续时间
    你可以继续
    http_server_requests_seconds_sum / http_server_requests_seconds_count
    
    但您很可能只会在图表上看到一条直线。这是因为这些指标的值随着时间的推移变得太大,并且必须发生此查询的真正剧烈变化才能显示任何差异。由于这种性质,最好计算数据样本的平均值。使用 increase()函数,您可以获得指标在一个时间间隔内如何变化的近似值。因此:
    increase(http_server_requests_seconds_sum[5m]) / increase(http_server_requests_seconds_count[5m])
    
    该值是近似值,因为在引擎盖下 increase()rate()乘以 [inverval] .错误无关紧要,只要准备好可以增加 2.5 个请求:)。
    聚合和过滤
    如果您已经运行了上述查询之一,您会注意到不是一行而是多行。这是由于标签;每个独特的标签集都考虑了一个单独的时间序列。这可以通过使用 aggregation function 来解决。 (如 sum() )。例如,您可以通过 instance 聚合请求率:
    sum by(instance) (http_server_requests_seconds_count[5m])
    
    这将为您显示每个唯一的行 instance标签。现在,如果您想查看一些而不是所有实例,您可以使用过滤器。例如,仅计算 nodeA 的值实例:
    sum by(instance) (http_server_requests_seconds_count{instance="nodeA"}[5m])
    
    阅读更多关于选择器的信息 here .使用标签,您可以创建任意数量的有用面板。也许您想通过 status 计算异常的百分比,或它们的发生率,或者请求率。代码,你的名字。
    关于 max 的注释
    从网上查到的,max显示在设置中设置的某个时间间隔内的最大记录值(如果信任源,默认值为 2 分钟)。这是一个有点不常见的指标,它是否有用取决于您。由于它是一个仪表(与 sumcount 不同,它可以上下移动)您不需要额外的功能(例如 rate() )来查看动态。因此
    http_server_requests_seconds_max
    
    将显示最大请求持续时间。您可以使用聚合函数( avg()sum() 等)和标签过滤器来增强它以使其更有用。

    关于spring-boot - SpringBoot - *_max *_count *_sum 指标的可观察性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67964176/

    相关文章:

    java - Spring Boot 忽略@JsonDeserialize 和@JsonSerialize

    grafana - 如何使用 Prometheus 和collectd 导出器绘制grafana 中的CPU 使用情况图?

    linux - 如何使用 Grafana 配置 Azure 的 CPU、磁盘和内存使用情况?

    java - 使用多个表单在 View 上提交表单时出现 Spring "Neither BindingResult nor plain target object for bean name"错误

    java - Google App Engine 上 Spring Boot 应用程序的 Maven 配置文件

    Prometheus:对值(value)变化发出警报

    kubernetes - 卡夫卡经纪人完全书面存储

    grafana - 如何将 Grafana 与我的私有(private) OAuth 服务器一起使用?

    ldap - 如何使用 Grafana 和 Wamp 的 LDAP 身份验证进行单点登录?

    java - Spring Cloud 1.0.2 和 SR3 RestTemplate 忽略了我的 ResponseErrorHandler