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

Springboot-*_max*_count*_sum度量上的可观测性

宇文兴言
2023-03-14

关于Spring Boot的小问题,一些有用的默认度量,以及如何在Grafana中正确使用它们。

我看到许多这样的模式_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

不幸的是,我不确定如何使用它们,如何正确地使用它们,并且感觉我的无知使我错过了一些伟大的应用洞察力。

irate(http_server_requests_seconds::sum{exception="None", uri!~".*actuator.*"}[5m]) / irate(http_server_requests_seconds::count{exception="None", uri!~".*actuator.*"}[5m])

共有1个答案

宫坚
2023-03-14

countsum通常用于计算平均值。count累加sum增加的次数,而sum保存某物的总值。让我们以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()的工作方式如下:

  1. Prometheus从给定的时间间隔(本例中为[5m])中提取样本,并计算当前时间点(不一定是现在)和[5m]之前的时间点之间的差异。
  2. 然后将获得的值除以间隔内的秒数。

您可以继续

http_server_requests_seconds_sum / http_server_requests_seconds_count

但很有可能你只会在图上看到一条直线。这是因为这些指标的值随时间增长太大,必须发生非常剧烈的变化才能显示出任何差异。由于这种性质,在数据样本上计算平均值会更好。使用regene()函数,可以获得度量在一个间隔期间变化的近似值。因此:

increase(http_server_requests_seconds_sum[5m]) / increase(http_server_requests_seconds_count[5m])

这个值是近似值,因为在下面regene()rate()乘以[inverval]。这个错误是微不足道的,只要准备好可能会有2.5个请求的增加:)。

sum by(instance) (http_server_requests_seconds_count[5m])
sum by(instance) (http_server_requests_seconds_count{instance="nodeA"}[5m])

根据我在Internet上找到的信息,max显示了在设置中设置的某个时间间隔内的最大记录值(如果信任源,默认为2分钟)。这是一个不常见的度量标准,它是否有用取决于您。由于它是一个度量(与sumcount不同,它可以向上和向下),因此不需要额外的函数(例如rate())来查看动态。因此

http_server_requests_seconds_max

将显示最大请求持续时间。您可以通过聚合函数(avg()sum()等)和标签过滤器来增强它,使其更加有用。

 类似资料:
  • 我有一个HTTP请求,希望将结果共享给多个组件。当然,HTTP请求返回一个可观察的。我希望多个组件能够订阅此服务,而不会触发额外的HTTP请求。 我在一个组件中使用实现了这一点,该组件按需发出HTTP请求,并有另一种方法订阅该主题。虽然这是可行的,但似乎有些过分,而且肯定有更好的方法。 主题服务 和一个订户 和第二个订户 从管道链中删除时,会发出多个网络请求。是否有一种更优雅/正确的方式将观察到的

  • Computed Observable是一个依赖于一个或多个Observable的函数,只要其基础Observable(依赖项)发生变化,它就会自动更新。 计算的Observable可以链接。 语法 (Syntax) this.varName = ko.computed(function(){ ... ... // function code ... },this); 例子

  • 我有一个服务,有一个方法foo。在该方法中,我订阅了一个可观察的(超文本传输协议-客户端)。 我喜欢从foo返回一个布尔值,该值取决于get。这不起作用,因为http.get是asynchrouns-在http.get完成之前调用return。 我怎样才能使这个同步? 编辑 返回可观察的布尔值在这里不是一个选项。这是因为我处理get in foo的响应(此处未显示),但我也需要根据它的返回来执行f

  • 学习角得到服务和组件和可观察性。 我正在尝试在我的演示应用程序中实现暗模式。该控件由一个服务完成,该服务根据浏览器默认值(如果找到)设置暗主题。 它在应用程序组件中初始化,以便以后在应用程序中放置控制开关。 暗模式从布尔值开始工作,因此为true或false。据我所知,使用一个可观察对象是不够的,因为我希望多个订阅者都以两种方式绑定到订阅,每种方式在服务中切换这些可观察对象。到目前为止,我很肯定这

  • 我有一个带有http请求的服务,它返回我的标题的可观察到的内容 servise.ts 在我的组件中,我有一个函数从service get Request设置。看起来是这样的: 问题是,有时我接收到带有空标签的标题,不需要显示它们,所以我需要对其进行过滤,并对此标题发送.delete()请求。我尝试了类似的方法(想法是在之前添加,然后在另一个subscribe内部调用。)差不多吧 但不确定这是不是个

  • 类定义为: 我继续创建对象: 使用以下工具进行检查: 打印: 但是在html模板中使用可以观察到: 引发: 如何解决这个问题?这里是Stackblitz项目的链接: https://stackblitz.com/edit/Angular-ivy-isebs7?file=src%2fapp%2fapp.component.ts