TGViewer
🚀🐳 Летит Кит: SRE и не только 🚀🐳 Летит Кит: SRE и не только @letitkit · 202 subscribers
Post #27 125
Не верь глазам своим — тебя обманывают

Мы у себя давно используем SLI/SLO и считаем их по метрикам VictoriaMetrics. Запросы для формулы пишутся на PromQL/MetricsQL.
Все было прекрасно пока мы использовали простые SLI вида
SLI=sum(increase(good_events))/sum(increase(total_events))
Потому появились более сложные составные, где пришлось учитывать, что один компонент может и не вернуть данных. А в PromQL/MetricsQL ничего + число = ничего. Чтобы такое обходить приходиться добавлять в выражение часть с or on() vector(0) - вернуть ноль вместо "ничего". И вот мы так и делали:
SLI=(
sum(increase(a_good_events) or on() vector(0)) + sum(increase(b_good_events) or on() vector(0))
)
/ (
sum(increase(a_total_events) or on() vector(0))
+ sum(increase(b_total_events) or on() vector(0))
)

Но вот при создании очередного SLI, что то пошло не так, видимо копипаста напакастила, и выражение стало чуть другим:
SLI=(
sum(increase(a_good_events)) or on() vector(0)
+ sum(increase(b_good_events)) or on() vector(0)
)
/ (
sum(increase(a_total_events)) or on() vector(0)
+ sum(increase(b_total_events)) or on() vector(0)
)

Кажется это тоже самое, но это не так. Приоритет операций тут не такой, как привык видеть мозг.
Обманываешься. Ожидаешь, что
sum(increase(a_good_events)) or on() vector(0) + sum(increase(b_good_events)) or on() vector(0)
равносильно
( sum(increase(a_good_events)) or on() vector(0) ) + ( sum(increase(b_good_events)) or on() vector(0) ), но на самом деле это вычисляется иначе, если расставить скобки (все что в них точно вычисляется в первую очередь), то аналог будет такой:
( sum( increase(a_good_events) ) + sum( increase(b_good_events) ) ) or on() vector(0)

Как это проявляется в поведении? Да просто вы получаете неправильные данные SLI. В сырых данных может оказаться, что у вас good событий больше, чем total! Это происходит, потому что, если один из sum(increase(...)) пуст, то весь запрос вернёт 0, даже если другой sum(increase(...)) содержит данные.

🫴🏻 Вот такие грабельки.

🔎 А какие грабли грабли запомнились вам при работе с метриками?

#грабли #promql #slo
  • 👍 4
More from @letitkit
  1. Sep 29, 2026Темный UX. Как делимобиль перегоняет авто за ваш счет. Привет, киты 🐳! Не многие сталкива…
  2. Sep 24, 2026Раздача слонов на Claude AI Привет, киты 🐋! 1. Получить 100$ или $250 бонусных на Сlaude…
  3. Sep 22, 2026Споры про искусственный интеллект в SRE изменились. Мы уже не гадаем, заменит ли агент деж…
  4. Sep 15, 2026Toil в работе SRE. Измерять, или "мы и так знаем что работы дофига“? Привет, киты 🐳. Пора…
  5. Sep 8, 2026О важности отдыха Привет, киты! 🐳 Оказалось я забыл как отдыхать. Перед отпуском делал за…
  6. Sep 3, 2026Важное про безопасность с чужим кодом - еще раз. Привет, киты 🐳! TL; DR; на чужих AI-скил…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →