Каковы различия между 5XX, 5.* и 5.. для HTTP-кода PromQL/Prometheus.

Вопрос или проблема

В Promql/Prometheus мы можем передавать 5xx, 5.* и 5.. в запрос и проверять http статус. Иногда они дают одинаковые результаты.

Например.
http_requests_total{status!~”4XX”} или
http_requests_total{status!~”4.*”}

Мой вопрос в том, каковы различия между ними?

Ответ или решение

В PromQL (Prometheus Query Language) существуют различные варианты записи для фильтрации HTTP-статусов, такие как 5XX, 5.* и 5... Важно понимать, как эти форматы различаются и какое значение они имеют в контексте запросов.

Обзор форматов

  1. 5XX:

    • Этот формат соответствует точному значению статуса HTTP. При использовании такого выражения вы запрашиваете только те HTTP-статусы, которые начинаются с 5 и имеют двузначное окончание, например, 500, 501, 502, и т.д.
    • Образец:
      http_requests_total{status=~"5.."}
  2. *5.:**

    • Символ * в этом контексте используется как замена для любого символа, то есть он может заменять один или несколько символов. Однако стоит отметить, что в PromQL * не предназначен для сопоставления с подстроками, а больше напоминает регистры для определённого количества символов.
    • Этот формат также предполагает, что статус будет начинаться с 5, и будет следовать дальнейшая часть в качестве любой символ. Поэтому в сущности он эквивалентен выражению 5.. в данном контексте.
    • Образец:
      http_requests_total{status=~"5.*"}
  3. 5..:

    • В этом случае два символа . также обозначают любой символ дважды. Это подходит для всех статусов, которые начинаются с 5 и имеют два последующих символа. То есть это также включает 500, 501, 502 и т.д.
    • Образец:
      http_requests_total{status=~"5.."}

Сравнение и особенности

Хотя все три варианта могут привести к получению аналогичных результатов (если статус отвечает указанным условиям), есть некоторые тонкости:

  • 5XX и 5.. фактически выполняют одну и ту же функцию и возвращают идентичный набор данных.
  • 5.* может показаться более интуитивным на первый взгляд, однако в контексте PromQL рекомендуется использовать 5.., так как это более четко соответствует регулярному выражению и логике сопоставления символов в PromQL.
  • В некоторых случаях можно наблюдать различия в производительности или результатах, если вы используете более сложные и специфические фильтры. Однако для базовых фильтров с 5.. или 5XX эти различия не будут критичными.

Заключение

Использование 5.., 5.. и 5.* в PromQL для работы с HTTP-статусами на самом деле связано с тем, как вы хотите представить свои запросы и какое сопоставление требуется. В большинстве случаев 5.. будет предпочтительным выбором за его точность и четкость. Однако, всегда стоит тестировать ваши запросы для подтверждения ожидаемых результатов и производительности.

Оцените материал
Добавить комментарий

Капча загружается...