Вопрос или проблема
В Promql/Prometheus мы можем передавать 5xx, 5.* и 5.. в запрос и проверять http статус. Иногда они дают одинаковые результаты.
Например.
http_requests_total{status!~”4XX”} или
http_requests_total{status!~”4.*”}
Мой вопрос в том, каковы различия между ними?
Ответ или решение
В PromQL (Prometheus Query Language) существуют различные варианты записи для фильтрации HTTP-статусов, такие как 5XX
, 5.*
и 5..
. Важно понимать, как эти форматы различаются и какое значение они имеют в контексте запросов.
Обзор форматов
-
5XX:
- Этот формат соответствует точному значению статуса HTTP. При использовании такого выражения вы запрашиваете только те HTTP-статусы, которые начинаются с
5
и имеют двузначное окончание, например,500
,501
,502
, и т.д. - Образец:
http_requests_total{status=~"5.."}
- Этот формат соответствует точному значению статуса HTTP. При использовании такого выражения вы запрашиваете только те HTTP-статусы, которые начинаются с
-
*5.:**
- Символ
*
в этом контексте используется как замена для любого символа, то есть он может заменять один или несколько символов. Однако стоит отметить, что в PromQL*
не предназначен для сопоставления с подстроками, а больше напоминает регистры для определённого количества символов. - Этот формат также предполагает, что статус будет начинаться с
5
, и будет следовать дальнейшая часть в качестве любой символ. Поэтому в сущности он эквивалентен выражению5..
в данном контексте. - Образец:
http_requests_total{status=~"5.*"}
- Символ
-
5..:
- В этом случае два символа
.
также обозначают любой символ дважды. Это подходит для всех статусов, которые начинаются с5
и имеют два последующих символа. То есть это также включает500
,501
,502
и т.д. - Образец:
http_requests_total{status=~"5.."}
- В этом случае два символа
Сравнение и особенности
Хотя все три варианта могут привести к получению аналогичных результатов (если статус отвечает указанным условиям), есть некоторые тонкости:
5XX
и5..
фактически выполняют одну и ту же функцию и возвращают идентичный набор данных.5.*
может показаться более интуитивным на первый взгляд, однако в контексте PromQL рекомендуется использовать5..
, так как это более четко соответствует регулярному выражению и логике сопоставления символов в PromQL.- В некоторых случаях можно наблюдать различия в производительности или результатах, если вы используете более сложные и специфические фильтры. Однако для базовых фильтров с
5..
или5XX
эти различия не будут критичными.
Заключение
Использование 5..
, 5..
и 5.*
в PromQL для работы с HTTP-статусами на самом деле связано с тем, как вы хотите представить свои запросы и какое сопоставление требуется. В большинстве случаев 5..
будет предпочтительным выбором за его точность и четкость. Однако, всегда стоит тестировать ваши запросы для подтверждения ожидаемых результатов и производительности.