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

按HTTP状态分组时不返回任何数据的错误率

子车心思
2023-03-14

我在Grafana中有一个图形,使用Prometheus数据源显示API中的错误率。这可以很好地处理此查询:

sum(rate(va_request_response_code{endpoint="api", statusCode!="200"}[5m])) by (exported_endpoint, statusCode)

我从我的API中获得非200响应代码的速率,然后将这些速率相加,因为我有3个运行API的实例。然后,我将这些分组为exported_endpoint(用户请求的实际路径)和statusCode,后者是返回的确切的HTTP状态代码

虽然这是一个有点有用的原始数字,但没有那么大的帮助。每秒100个请求中有100个错误是非常糟糕的,1000000个请求中有100个错误不是问题。因此,我想除以请求总数,但我很挣扎。如果我这样做:

(sum(rate(va_request_response_code{endpoint="api", statusCode!="200"}[5m])) by (exported_endpoint, statusCode))/(sum(rate(va_request_response_code{endpoint="api"}[5m])) by (exported_endpoint))

然后它只显示无数据点,这很有意义,因为在第一种情况下,它是在被除数中按statusCode分组,而不是在除数中,因此它必须意味着在除数之前尝试查找匹配项。相反,这样做确实有效:

(sum(rate(va_request_response_code{endpoint="api", statusCode!="200"}[5m])) by (exported_endpoint))/(sum(rate(va_request_response_code{endpoint="api"}[5m])) by (exported_endpoint))

但是我会丢失我想要的状态码分组。理想情况下,我想知道x%的请求返回404,y%的请求返回500。这可能吗?

共有1个答案

慕容渊
2023-03-14

你需要这样写:

sum by (exported_endpoint, statusCode) (rate(va_request_response_code{endpoint="api", statusCode!="200"}[5m]))
  / ignoring(statusCode) group_left
sum by (exported_endpoint) (rate(va_request_response_code{endpoint="api"}[5m]))

即,取两个向量,左一个带statusCode标签,右一个不带标签;忽略statusCode标签将它们分开;然后将左向量的标签应用于结果。

这里是到PromQL中多对一和一对多匹配的Prometheus文档的链接。

 类似资料:
  • 问题内容: 我在这我想从服务器获取与$ HTTP GET XML数据的AngularJS应用说http://example.com/a/b/c/d/getDetails?fname=abc&lname=def(此通过在浏览器中输入链接进行手动访问时显示XML文件的树状结构)。 当我运行应用程序时,不会从该链接获取数据。而是显示 状态为0 的错误。 我不确定$ http.get为什么会失败并转到返回

  • 下面是我正在使用的一段代码: 期望reponse conatins的状态行:“HTTP/1.1400坏请求”想知道这是可以实现的吗?如果是,那么我如何继续做同样的事情。

  • 我正在使用WebFlux实现一个RESTendpoint,我在基本操作上没有任何问题,但是有一个操作我不知道如何管理。我想返回与事件对象相关的PriceMessage对象,所以如果事件存在,endpoint返回一个ServerResponse.ok(),但是如果事件不存在,应该返回一个ServerResponse.not发现()。 在存储库层中,如果存在eventId为的代码和事件,则有以下方法返

  • 问题内容: 我已经实现了IErrorHandler来处理在我的宁静WCF服务的构造函数中引发的授权异常。当捕获到一般异常时,将按预期返回我的自定义类型,但是ContentType标头不正确。 但是,当错误处理程序尝试返回401未经授权的http状态代码时,消息正文将覆盖为默认类型,但ContentType标头应为原样。 显然这里有问题,但我不确定是什么。 如何实现IErrorHandler,使其以

  • 我有一个名为Backend(端口:9090)的服务,位于Zuul(端口:8080)后面。 浏览器在Zuul上调用GET方法,执行重定向。 示例调用:http://localhost:8080/testredirect 结果: 浏览器收到Http状态=200 浏览器URL:http://localhost:8080/testredirect 浏览器显示:Hello world 预期结果: 浏览器应接