Linux Labs

Наблюдаемость: метрики, алерты, логи / Ступень 2 из 9

PromQL: rate, sum и сравнение

Не запущена Запускается обычно ~20 с
Выйти из урока

Шаг 4 из 6 · на машине · 9 мин

Доля и порог

Доля ошибок — это одна сумма, делённая на другую, а порог отсекает то, что в норме.

Арифметика в PromQL работает между рядами: a / b делит ряд слева на ряд справа с теми же метками. Поэтому делят суммы — например, доля ответов 500 среди всех запросов приложения:

text
sum(rate(labapp_http_requests_total{code="500"}[1m]))
  / sum(rate(labapp_http_requests_total[1m]))

Чтобы получить долю по каждому адресу или методу, обе суммы берут с одним и тем же by: метки слева и справа должны совпасть. У ряда без пары с другой стороны результата нет. Сравнение > 0.05 в конце работает как фильтр: остаются только ряды больше порога, остальные пропадают, и пустой ответ значит «никто не превысил». С ключом bool — > bool 0.05 — сравнение вернёт каждому ряду 1 или 0.

Проверь себя 1 вопрос

Запрос rate(labapp_http_requests_total{code="500"}[1m]) / rate(labapp_http_requests_total[1m]) вернул одну строку со значением 1. Почему?

  • Без деления rate печатает дробные скорости вроде 0.52. Единица — итог деления ряда на самого себя.

  • У адреса есть и ответы 200 — их показывает rate(labapp_http_requests_total[1m]). Деление их просто не увидело.

Деление ищет справа ряд с теми же метками, включая code — и находит тот же ряд ошибок. Поэтому делят суммы с одинаковым by, где метки code нет: тогда ошибки делятся на все запросы.

Тот же запрос из скрипта удобнее слать в API: curl -s localhost:9090/api/v1/query --data-urlencode 'query=…' | jq '.data.result' (в Вики). В ответе у каждого ряда — метки и пара [время, "значение"]: время — секунды с 1970 года, значение — строкой. Такое выражение с порогом — заготовка правила алерта: Prometheus будет сам проверять его каждые несколько секунд и поднимать тревогу, когда ответ не пуст. Это следующий модуль.

Упражнение · сделать

Найди адрес с ошибками

labapp снова отвечает ошибками — неизвестно, на каком адресе. Запиши в файл ~/promql/errors.promql выражение PromQL, которое оставляет только адреса (метка path), где больше 5 % ответов сейчас — 500. Значение — доля от 0 до 1.

Войти и начать Машина доступна после входа

Цели · 0 из 2

  • Записать выражение в ~/promql/errors.promql ещё не выполнена
  • Оставить только адреса, где ошибок больше 5 % ещё не выполнена

Цели шага

0 из 2
  • Записать выражение в ~/promql/errors.promql — ещё не выполнена
  • Оставить только адреса, где ошибок больше 5 % — ещё не выполнена
Ubuntu 24.04

Цели шага

0 из 2
  • Записать выражение в ~/promql/errors.promql — ещё не выполнена
  • Оставить только адреса, где ошибок больше 5 % — ещё не выполнена
Загрузка…