Документация
Правила
Правило сравнивает метрику с границей. Когда значение выходит за границу, правило срабатывает и SmartAlert отправляет уведомление.
На этой странице
- Свой порог или норма для каждого часа
- Почему фиксированный порог часто врёт
- Как работает норма
- Когда нормы нет
- Свои пороги по часам
- Проверка на истории
- Тянуть порог на графике
- Подбор порога
- Срабатывания на графике
- На сколько хватит баланса
- Перевод больше суммы в $
- Два условия: И / ИЛИ
- Эскалация
- Шумоподавление
- Нет данных
Границу можно задать двумя способами.
Свой порог или норма для каждого часа
| Свой порог | Норма для каждого часа | |
|---|---|---|
| Граница | Одно число или диапазон, одинаковые весь день | Следует за часом дня |
| Подходит для | Значений, которые не должны пересекать черту: минимум баланса, потолок одного перевода | Активности, которая меняется в течение дня: переводы, обмены, выпуск токенов |
| Нужна история | Нет | Около недели |
Почему фиксированный порог часто врёт
Активность в сети растёт и падает в течение дня. Порог, выставленный по дневному трафику, молчит ночью, когда падение вдвое уже проблема. Порог по ночному трафику срабатывает каждое утро на обычном росте. К тому же порог ставят один раз: через квартал норма другая, правило срабатывает на шуме, и его отключают.
Как работает норма
Норма — обычное значение метрики в этот час. SmartAlert берёт значения того же часа за предыдущие дни и считает по ним медиану. Правило срабатывает, когда текущее значение дальше от медианы, чем на заданное число типичных отклонений. Типичное отклонение — медиана отклонений от этой медианы.
Берётся медиана, а не среднее, потому что в окне истории часто лежит прошлая авария. Один выброс медиану почти не сдвигает, поэтому правило видит и следующую аварию.
На ровной серии отклонение равно нулю. Чтобы правило не срабатывало на каждое событие, минимальное отклонение — большее из 1 и 10% медианы.
Норма считается для каждой серии отдельно. Она не хранится: пересчитывается при каждой проверке и поэтому следует за метрикой.
Настройки:
- С чем сравнивать: тот же час в прошлых днях; тот же час и день недели; предыдущий такой же период. Часть вариантов доступна только на платном тарифе — в форме они помечены Pro.
- Срабатывать, когда значение: выше нормы, ниже нормы или в любую сторону.
- Чувствительность: высокая, средняя или низкая. По умолчанию средняя. Высокая срабатывает на меньшем отклонении, низкая — на большем.
Когда нормы нет
Норме нужна история. Пока её мало, приложение пишет «Норма недоступна» и показывает дату, когда она появится. Недостающее число оно не выдумывает. Правило сохраняется, но по этой серии не вычисляется, пока нормы нет.
У серии, которая появилась вчера, нормы ещё нет. Остальные серии того же правила вычисляются как обычно.
Свои пороги по часам
На графике нормы можно задать свой порог для отдельного часа.
- Откройте правило с нормой. Нажмите на час на графике.
- В окне задайте выше и/или ниже.
- Сохраните. Час отмечен на графике.
Как это работает:
- Ваша граница заменяет границу нормы в этом часе. Она может быть строже или мягче. Ослабить ночной порог можно.
- Часы, которые вы не задали, идут по норме. Сторона, которую вы не задали, тоже идёт по норме.
- «Ниже» должно быть не больше «выше».
- Часы хранятся в 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 перевода без цены не учтены».
Уведомление.
Значение: 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), доставки получают статус «пропущено».
Нет данных
У каждого правила есть политика на случай, когда данных нет:
- Считать нормой. Для редких событий.
- Считать тревогой. Тишина — сама проблема. Правило работает как датчик живости: контракт перестал работать.
- Отдельное состояние. Уведомление «нет данных», отдельно от обычных срабатываний.
Нашли ошибку или не нашли ответ? Напишите