У меня есть график в Grafana, использующий источник данных Prometheus для отображения частоты ошибок из моего API.Это нормально работает с этим запросом:
sum(rate(va_request_response_code{endpoint="api", statusCode!="200"}[5m])) by (exported_endpoint, statusCode)
Я получаю частоту не-200 кодов ответов из моего API, а затем суммирую эти показатели, так как у меня есть 3 экземпляра моего API.Затем я группирую их по exported_endpoint
(фактический путь, запрошенный пользователем) и statusCode
, который является точным кодом состояния HTTP, возвращенного.
Хотя это немного полезно в качестве необработанного числа, это не так полезно,Наличие 100 ошибок в секунду из 100 запросов - это очень плохо, наличие 100 ошибок из 1 000 000 запросов - это не проблема.Поэтому я хотел бы разделить на общее количество запросов, но я изо всех сил.Если я сделаю:
(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))
, тогда он просто отображает No data points
, что имеет смысл, поскольку в первом случае он группируется по 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
.Это возможно?