РазделыПравила

Документация

Правила

Правило сравнивает метрику с границей. Когда значение выходит за границу, правило срабатывает и SmartAlert отправляет уведомление.

На этой странице

Границу можно задать двумя способами.

Свой порог или норма для каждого часа

Граница
Свой порогОдно число или диапазон, одинаковые весь день
Норма для каждого часаСледует за часом дня
Подходит для
Свой порогЗначений, которые не должны пересекать черту: минимум баланса, потолок одного перевода
Норма для каждого часаАктивности, которая меняется в течение дня: переводы, обмены, выпуск токенов
Нужна история
Свой порогНет
Норма для каждого часаОколо недели

Почему фиксированный порог часто врёт

Активность в сети растёт и падает в течение дня. Порог, выставленный по дневному трафику, молчит ночью, когда падение вдвое уже проблема. Порог по ночному трафику срабатывает каждое утро на обычном росте. К тому же порог ставят один раз: через квартал норма другая, правило срабатывает на шуме, и его отключают.

Как работает норма

Норма — обычное значение метрики в этот час. SmartAlert берёт значения того же часа за предыдущие дни и считает по ним медиану. Правило срабатывает, когда текущее значение дальше от медианы, чем на заданное число типичных отклонений. Типичное отклонение — медиана отклонений от этой медианы.

Берётся медиана, а не среднее, потому что в окне истории часто лежит прошлая авария. Один выброс медиану почти не сдвигает, поэтому правило видит и следующую аварию.

На ровной серии отклонение равно нулю. Чтобы правило не срабатывало на каждое событие, минимальное отклонение — большее из 1 и 10% медианы.

Норма считается для каждой серии отдельно. Она не хранится: пересчитывается при каждой проверке и поэтому следует за метрикой.

Настройки:

  • С чем сравнивать: тот же час в прошлых днях; тот же час и день недели; предыдущий такой же период. Часть вариантов доступна только на платном тарифе — в форме они помечены Pro.
  • Срабатывать, когда значение: выше нормы, ниже нормы или в любую сторону.
  • Чувствительность: высокая, средняя или низкая. По умолчанию средняя. Высокая срабатывает на меньшем отклонении, низкая — на большем.

Когда нормы нет

Норме нужна история. Пока её мало, приложение пишет «Норма недоступна» и показывает дату, когда она появится. Недостающее число оно не выдумывает. Правило сохраняется, но по этой серии не вычисляется, пока нормы нет.

У серии, которая появилась вчера, нормы ещё нет. Остальные серии того же правила вычисляются как обычно.

Свои пороги по часам

На графике нормы можно задать свой порог для отдельного часа.

  1. Откройте правило с нормой. Нажмите на час на графике.
  2. В окне задайте выше и/или ниже.
  3. Сохраните. Час отмечен на графике.

Как это работает:

  • Ваша граница заменяет границу нормы в этом часе. Она может быть строже или мягче. Ослабить ночной порог можно.
  • Часы, которые вы не задали, идут по норме. Сторона, которую вы не задали, тоже идёт по норме.
  • «Ниже» должно быть не больше «выше».
  • Часы хранятся в UTC. Приложение показывает и принимает часы в вашем часовом поясе, как и везде. При смене пояса или перевода часов записи остаются на своём часе UTC и на экране сдвигаются на час.
  • Пороги по часам работают при окне в 1 час. При большем окне управление выключено, приложение подскажет, какое окно выбрать.
  • В часе, где нормы ещё нет, ваша граница работает сразу.
  • Чтобы вернуть час к норме, откройте его и нажмите Вернуть норму. В списке под графиком есть ссылка «вернуть норму везде».

Проверка на истории

Когда вы создаёте или правите правило, SmartAlert прогоняет его по истории, доступной проекту. Видно:

  • график: метрика, полоса нормы или ваш порог и отметки, где правило сработало бы;
  • число срабатываний, которые были бы за период.

Это то, что произошло бы, а не прогноз. «Сработало бы 3 раза за 30 дней» ничего не говорит о следующих 30 днях.

Проверка использует тот же код, что и работающее правило, поэтому превью и реальное поведение совпадают.

Период ограничен глубиной истории: 7 дней на Free, 90 на Pro, 180 на Business, 365 на Enterprise. В первые 14 дней проекта — 90 дней.

Тянуть порог на графике

На странице правила линию порога можно тянуть мышью, пальцем или стрелками клавиатуры. Когда вы отпустили, SmartAlert заново прогоняет правило по истории с новым порогом и пишет под графиком: «С порогом 45 000 сработало бы 1 раз · сейчас 4 раза». Сохранить порог меняет правило, Вернуть оставляет как было.

Тянется только одна черта: «больше» или «меньше» порога. У диапазона, у правила по норме и у правила на изменение баланса ручки нет.

Подбор порога

Что писать в порог, большинство не знает. А сколько раз готовы просыпаться, знает почти каждый.

В форме правила задайте, сколько срабатываний вы готовы терпеть и за какой период, например «не больше 2 в неделю». SmartAlert подберёт порог, а для правила с нормой — чувствительность, при которых на выбранном периоде истории срабатываний не больше. Результат виден на том же графике, принять его можно одним действием.

Подбор работает и для уже включённого правила: вы получите предложение изменить порог.

Подбор опирается на историю. Если контракт позже поведёт себя иначе, число срабатываний может отличаться.

Срабатывания на графике

Под графиком на странице правила — что было на самом деле за выбранный период. Каждое срабатывание лежит на графике полосой от начала до снятия, а под графиком строкой:

  • когда сработало и сколько длилось, или «идёт»;
  • куда ушло уведомление и дошло ли: «Дежурный доставлено», «не дошло», «подавлено»;
  • что вы решили: принято, отклонено или без решения.

Цвет полосы — по решению: красный — принято или ещё идёт, серый — отклонено, жёлтый — без решения. Строка ведёт на страницу срабатывания.

Если решений хотя бы три и половина из них — «отклонено», над списком появится «порог шумит»: правило будит чаще, чем нужно. Поднимите порог перетаскиванием или подбором.

Строками показаны 20 последних срабатываний, остальные — в истории срабатываний.

На сколько хватит баланса

На странице адреса у токена видно, на сколько дней хватит баланса при нынешнем расходе: «Хватит на ~2,5 дня · по расходу за 24 ч: 0.12 ETH в сутки». Так видно заранее, что газ на кошельке кипера скоро кончится, а не когда он уже кончился.

Как считается. Расход — сумма всех убываний баланса за окно, по соседним замерам. Пополнения не вычитаются: кошелёк, который пополнили вчера, тратит столько же. Расход за окно пересчитываем в сутки, текущий баланс делим на него. Прогноз линейный: считаем, что расход дальше такой же. На графике адреса прогноз — пунктир от последнего замера до нуля, под графиком время, когда баланс дойдёт до нуля (UTC).

Окна. На странице адреса — 24 часа. В правиле выбираете сами: 6 часов, 24 часа или 3 суток. Короткое окно быстрее замечает рост расхода, длинное спокойнее к разовым тратам.

Когда прогноза нет.

  • Расход не виден. За окно баланс ни разу не убыл: тратить нечего или кошелёк только пополняется. Правило не срабатывает.
  • Считаем. Истории меньше четверти окна: адрес только добавили или сбор стоял. Например, для окна 24 часа нужно 6 часов истории. Пока прогноза нет, правило работает по политике «Нет данных».
  • Больше 365 дней. Расход настолько мал, что точное число не имеет смысла. Правило не срабатывает.

Правило. Тип «На сколько дней хватит баланса»: условие «меньше» или «не больше», порог в днях, можно дробное, 0.5 — полдня. Уведомление: «Хватит на 2.5 дня (условие < 3 дн.)», для «не больше» — «≤ 3 дн.», и строка «Расход: 0.12 ETH/сут за 24 ч, баланс 0.3 ETH». Доступно на всех тарифах, включая Free.

Перевод больше суммы в $

Порог по одному переводу токена ERC-20 можно задать в долларах: «Вывод больше $50 000 одним переводом». Правило смотрит на событие Transfer и срабатывает, когда самый крупный перевод за окно дороже порога. Можно добавить фильтр, например только переводы с адреса казны.

Как считается. Сумма перевода в токенах × цена токена на момент перевода: последняя цена не позже блока перевода. Не цена на момент проверки и не сумма за окно. Цена — из Chainlink, если его нет — из CoinGecko.

Когда цены нет. Если цена устарела или её нет, у перевода нет суммы в $, и он не учитывается. Окно без переводов — не тревога: тишина у токена — норма. Если в окне есть переводы, но ни у одного нет цены, правило работает по политике «Нет данных». Цены токена SmartAlert начинает читать, когда правило включено: переводы до этого — без цены, и проверка на истории их не учитывает, а пишет «3 перевода без цены не учтены».

Уведомление.

text
Значение: Transfer 52 300 USDC ($52 296) > $50 000
52 300 USDC × $0,99992, Chainlink, 12:03 UTC
Транзакция: 0xab…12

Тариф. Порог в $ — Pro и выше, порог в токенах — на всех тарифах. После понижения тарифа правило работает дальше, изменить его можно только на Pro.

Два условия: И / ИЛИ

В правиле может быть второе условие. Связка решает, когда правило сработает:

  • И — выполнены оба. Например, «баланс меньше 1 ETH И за час не было пополнения»: кошелёк пустеет, и никто его не пополняет.
  • ИЛИ — выполнено хотя бы одно.

Второе условие читает то же, что первое: тот же баланс адреса или тот же контракт. Для баланса — «баланс ниже», «баланс выше» или «не было пополнения за окно». Для событий — условие по событиям того же контракта или «не было события за окно». Окно отсутствия — 15 минут, 1 час, 6 часов или 24 часа. Пополнение — рост баланса между двумя соседними замерами.

Условий не больше двух. Группировка в правиле с двумя условиями недоступна. Условия, которые не выполнятся вместе никогда (например, «баланс вырос» И «не было пополнения» за то же время), сохранить нельзя.

Проверка на истории показывает срабатывания связки и отдельно, сколько раз выполнялось каждое условие. Подбор порога работает только для правила с одним условием.

В уведомлении под значением — блок условий: «Выполнены оба условия (И)» с ✓ у каждого или «Выполнено одно из условий (ИЛИ)» с ✓ и ✗. В вебхуке — поле alert.conditions.

Тариф. Pro и выше. Если тариф понизили, правило с двумя условиями продолжает работать как было. Изменить его с двумя условиями можно только на Pro, убрать второе условие — всегда.

Эскалация

Если срабатывание никто не принял за 5, 10, 15, 30 или 60 минут, оно уходит во второй канал, например в PagerDuty дежурного. Шаг один: время и канал. Канал эскалации должен отличаться от основных каналов правила.

Таймер останавливают:

  • Взял, разбираюсь. Кнопка на странице срабатывания. Это не вердикт: можно остановить эскалацию, ещё не зная, настоящее ли срабатывание.
  • Вердикт «подтверждено» или «ложное».
  • Срабатывание закрылось.
  • Правило изменили. Выключили, удалили или сняли шаг.

В срок в канал эскалации уходит то же уведомление с первой строкой «Эскалация: не принято за 10 мин». Когда срабатывание закроется, туда же придёт «вернулось в норму», и инцидент в PagerDuty закроется. Если канал к сроку отключён, доставка в журнале — «пропущено».

На странице срабатывания видно, когда сработает эскалация и чем кончилась: «Эскалировано в PagerDuty в 14:12», «Взято в работу — эскалация отменена» после «Взял, разбираюсь» или «Принято — эскалация отменена» после вердикта.

Тариф. Pro и выше. После понижения тарифа шаг сохраняется в правиле, но не выполняется. После повышения эскалация снова работает.

Шумоподавление

Эти ограничения уменьшают число уведомлений, а не срабатываний. История срабатываний остаётся полной.

  • Пока серия в тревоге, новые уведомления по ней не создаются.
  • После уведомления та же серия не уведомляет снова, пока не пройдёт перерыв правила (cooldown).
  • Когда исчерпан дневной лимит уведомлений (50 на Free, 1000 на Pro, 5000 на Business), доставки получают статус «пропущено».

Нет данных

У каждого правила есть политика на случай, когда данных нет:

  • Считать нормой. Для редких событий.
  • Считать тревогой. Тишина — сама проблема. Правило работает как датчик живости: контракт перестал работать.
  • Отдельное состояние. Уведомление «нет данных», отдельно от обычных срабатываний.

Нашли ошибку или не нашли ответ? Напишите