Обзор — что делает этот экран
Инфраструктура ▸ Оповещения (/infra/alert) — это консоль групп оповещения (политик). Оператор добавляет в одну политику (infr_alert_policy) условия из четырёх областей (система / веб / БД / безопасность), настраивает на экране коэффициент каждого порога, и при нарушении получатели группы (infr_alert_recipient) автоматически уведомляются по SMS или электронной почте.
Экран заменяет прежнюю страницу «Ёмкость и оповещения» (/infra/capacity), которая теперь перенаправляет сюда.
Ключевые особенности:
- Одна политика — один набор наблюдения: серьёзность, подавление повторных оповещений (пауза), области, условия, каналы и получатели находятся на одной карточке. Создавайте несколько политик с разделением по командам или сменам (например, «Ночное дежурство инфраструктуры», «Эксплуатация безопасности»).
- Вычисление и отправка разделены:
AlertEvaluatorвычисляет условия,AlertDispatcherоткрывает оповещения и отправляет их. Оба используются как кнопкой [Проверить сейчас] в консоли, так и запланированной командойinfr:eval-alerts. - Дедупликация, пауза, пакетная отправка, автозакрытие: повторные нарушения сводятся в одно оповещение, во время паузы повторная отправка подавляется, уведомления одной политики объединяются в одно сообщение (это предотвращает лавину SMS), а при устранении нарушения оповещения закрываются автоматически.
- Живые данные только для чтения: система — из
server_status, БД — изinfr_db_metric, безопасность — из таблиц обнаруженияlegacy_glory, веб — из живого HTTP-зонда. Проверка истечения веб-сертификатов сканируетinfr_web_certглобально.
Этот экран управляет только политиками, оповещениями и историей доставки. Графики по каждому серверу см. в разделе Серверы; доступность веб-сервисов — Сервисы ▸ Веб; нагрузку на БД — Сервисы ▸ База данных. Значения порогов по умолчанию задаются в разделе Операционная политика.
Когда использовать
- Вы хотите немедленно узнавать, когда средняя нагрузка или свободное место на диске сервера пересекают опасную черту.
- Вы хотите уведомлять дежурного, когда посадочный URL недоступен (неожиданный статус или нет ответа) либо отвечает медленно.
- Вы хотите постоянно отслеживать сбой автоматического обновления TLS у зарегистрированных веб-сервисов (сертификат вот-вот истечёт).
- Вы хотите получать оповещения, когда у зарегистрированной БД накапливается очередь ожидания или резко растёт число медленных запросов в час.
- Вы хотите транслировать команде сигналы нарушений: лавины оповещений IDS, всплески блокировок по аномалиям ИИ, всплески новых заблокированных IP.
Устройство экрана
Сетка карточек политик
Каждая политика отображается одной карточкой, где сведены её переключатель активности, значок серьёзности, включённые области и число получателей, а также следующие действия:
| Действие | Описание | Доступ |
|---|---|---|
| Переключатель активна/на паузе | is_active — вычисляет ли её планировщик |
уровень≥2 |
| Изменить | Модальное окно областей, условий, каналов и получателей | уровень≥2 |
| Проверить сейчас | Немедленно вычислить и отправить эту политику (run) |
уровень≥2 |
| Тест | Немедленно отправить получателям тестовое письмо или SMS (test) |
уровень≥2 |
| Удалить | Удалить политику вместе с получателями | уровень≥2 |
| Изменение порядка перетаскиванием | Порядок отображения и вычисления (seq, reorder) |
уровень≥2 |
Модальное окно изменения (области, условия, каналы, получатели)
- Основное: название, серьёзность (info/warn/crit), подавление повторных оповещений (в минутах), активность, примечание.
- Области оповещения: включение системы / веб / БД / безопасности (система включена по умолчанию).
- Условия: для каждой включённой области — вкл./выкл. и коэффициент порога (см. каталог условий ниже).
- Каналы: SMS и почта. Для фактической доставки требуется поставщик в разделе Почтовые адаптеры/SMS-адаптеры; если поставщик не настроен, карточка выводит предупреждение.
- Получатели (повторяющийся блок): имя, электронная почта, телефон и флажки
via_mail/via_sms. Действующий канал — это пересечение каналов политики ∩ via_* получателя.
Лента последних оповещений
Показывает infr_alert в порядке убывания last_seen, до 60 строк (опрос каждые 30 с). В каждой строке отображаются наблюдаемое значение, порог, сводный count и число успешных отправок из общего (по данным infr_alert_delivery), а также переходы состояния [Подтвердить] и [Закрыть].
Как использовать
1) Создайте политику
- [Новая группа оповещения] → введите название, серьёзность и паузу.
- Включите области, за которыми хотите наблюдать.
- Для каждой области включите условия и настройте коэффициенты порогов. Значения по умолчанию подставляются из
alertDefaults()раздела Операционная политика. - Выберите каналы (SMS или почта) и добавьте получателей.
- Сохраните.
2) Каталог условий
Система (server_status, окно seq)
| Условие | Переключатель | Коэффициент | По умолчанию | Формируемая метрика |
|---|---|---|---|---|
| Средняя нагрузка выше | sys_load_on |
sys_load_max |
20 | load_avg (>20, по каждому серверу) |
| Свободное место на диске ниже | sys_disk_on |
sys_disk_free_mb |
500 | disk_free (<500MB) |
- По умолчанию цель — все серверы (
targets.system.all=true); можно сузить до выбранных псевдонимов (не более 200). - Чтобы избежать медленных запросов, снимок читает только последнее окно seq (
distinct seq desc limit 3) — подход унаследован от HealthService. Серверы, находящиеся офлайн или без данных, не оцениваются: чтобы считаться в сети, сервер должен иметьloadavgв последних 2 циклах. - Для свободного места на диске берётся самый напряжённый раздел среди
df-,df-dataиdf-home(DfParse::availableGb).
Веб (живой HTTP-зонд · infr_web_cert)
| Условие | Переключатель | Коэффициент | По умолчанию | Формируемая метрика |
|---|---|---|---|---|
| Сервис недоступен (статус ≠ ожидаемому) | web_code_on |
web_expect_code |
200 | http_status |
| Задержка выше | web_latency_on |
web_latency_ms |
5000 | latency |
| Скорое истечение сертификата | web_cert_on |
web_cert_hours |
48 | cert_expiry |
- Целевые URL берутся из
targets.web.urls[](с метками, не более 30 на политику). На каждом цикле вычисления они запрашиваются напрямую черезHttp::connectTimeout(4)->withoutVerifying()->get(). Статус, отличный от ожидаемого, а также сбой соединения или тайм-аут, трактуются как недоступность сервиса (если включено условие по коду). - Истечение сертификата — это один переключатель, но сканирование глобальное: независимо от целевых URL политики оно перебирает записи
infr_web_certпо всем доменам всех зарегистрированных веб-сервисов и формирует нарушение для каждого домена, истекающего в пределах порога (web_cert_hours, по умолчанию 48 ч), — до 50 за одно вычисление. Сертификаты обновляются с 6-часовой ротацией службой WebProbeService. Это позволяет обнаружить сбой автоматического обновления до того, как истечение застанет кого-либо врасплох.
Достаточно включить «Скорое истечение сертификата», чтобы наблюдать за сертификатом каждого сайта. Условие работает не по отдельному сайту — это глобальное сканирование всех доменов.
База данных (последняя выборка infr_db_metric)
| Условие | Переключатель | Коэффициент | По умолчанию | Формируемая метрика |
|---|---|---|---|---|
| Рост очереди ожидания | db_waiting_on |
db_waiting_max |
5 | db_waiting (>=5) |
| Медленные запросы за час | db_slow_on |
db_slow_per_hour |
60 | db_slow (slow_qps×3600 >= 60) |
- Цели задаются в
targets.database.collectors[](ключи коллекторов с access=database). Если не выбрано ни одной цели, ничего не вычисляется. - Читается
DbCollectorService::latest($collector), но оцениваются только выборки со статусомokи давностью менее 10 минут (это исключает ложные срабатывания на устаревших данных). Регистрация и сбор — в разделе Коллекторы БД.
Безопасность (таблицы обнаружения legacy_glory · составное)
Окно вычисления задаётся параметром sec_window_min (по умолчанию 10 мин). Нарушение возникает, если хотя бы один сигнал превысил свой порог.
| Условие | Переключатель | Коэффициент | По умолчанию | Источник |
|---|---|---|---|---|
| Серьёзность IDS + количество | sec_ids_on |
sec_ids_severity, sec_ids_count |
2, 20 | suricata_alert_ct (серьёзность≥S, количество в окне≥N) |
| Всплеск блокировок по аномалиям ИИ | sec_kitsune_on |
sec_kitsune_count |
5 | kitsune_detail_log (is_blocked=1, количество≥N) |
| Всплеск новых заблокированных IP | sec_blacklist_on |
sec_blacklist_count |
10 | blacklist_info (новые created_at в окне, количество≥N) |
См. также: Угрозы · Обнаружения · Блок-лист.
3) Проверить сейчас / Тест
- [Проверить сейчас] (
run): немедленно выполняетevaluate()→handle()только для этой политики и возвращает сводку по нарушениям и отправкам (breaches :b · sent :s) вместе с обновлённой лентой. Используйте её, чтобы убедиться, что условие действительно срабатывает, не дожидаясь планировщика. - [Тест] (
test): прямо сейчас отправляет активным получателям тестовое письмо или SMS, чтобы подтвердить работоспособность канала (независимо от каких-либо нарушений — это проверка состояния поставщика).
4) Автоматическое вычисление (расписание)
Активные политики вычисляются и рассылаются автоматически каждую минуту.
Schedule::command('infr:eval-alerts --quiet-if-ok')
->everyMinute()
->withoutOverlapping(2)
->onOneServer()
->when($is_leader);
Ручной запуск:
# Вычислить все активные политики (однократный запуск, затем завершение — это не демон)
php artisan infr:eval-alerts
# Только одна политика
php artisan infr:eval-alerts --policy=12
# Подавить вывод, если нарушений нет (значение по умолчанию для планировщика)
php artisan infr:eval-alerts --quiet-if-ok
infr:eval-alerts— это однократная команда, которая завершается (она перебирает политики и возвращает управление). Никогда не превращайте её в демон с бесконечным циклом: запуск из планировщика демона, который никогда не завершается, исчерпывает общие подключения к БД (см. урок утечки подключений pulse:check). Планировщик безопасно запускает новый экземпляр каждую минуту.
Источники данных
Таблицы записи (новые infr_)
| Таблица | Миграция | Роль |
|---|---|---|
infr_alert_policy |
000700 | Группа оповещения (политика). JSON scopes/targets/conditions/channels + серьёзность, cooldown_min, seq |
infr_alert_recipient |
000701 | Получатели по политике (встроенные). email/phone + via_mail/via_sms/is_active/seq |
infr_alert |
000702 | Экземпляр оповещения (журнал срабатываний / очередь разбора). Ключ дедупликации (policy_id, metric, entity_key, status='open'), пауза по notified_at |
infr_alert_delivery |
000703 | История доставки. channel/address/ok/provider_code/message_id/error/latency_ms |
Источники чтения (устаревшие + новые, только чтение)
- Система:
server_status(подключениеlegacy, part=loadavg/df-*). - Веб: живой HTTP GET (целевые URL) +
infr_web_cert(истечение сертификата). - БД:
infr_db_metric(заполняется коллекторами с access=database). - Безопасность:
suricata_alert_ct,kitsune_detail_log,blacklist_infoвlegacy_glory.
Процесс дедупликации / паузы / автозакрытия
AlertEvaluator::evaluate($policy)→ массив кандидатов на нарушение по каждой активной области. Исключения областей изолированы (сбой одной области не блокирует остальные).AlertDispatcher::handle($policy, $breaches):- Каждое нарушение ищется по
(policy_id, metric, entity_key, status=open)→ если найдено, выполняется обновление иcount++; иначе вставляется новая запись (first_seen, count=1, notified_at=null). - Подлежит уведомлению = новое ИЛИ
notified_atравно null ИЛИnotified_at <= now - cooldown_min. - Автозакрытие: открытые оповещения этой политики, отсутствующие среди нарушений текущего прохода →
status='closed'. - Пакетная отправка: оповещения, подлежащие уведомлению, объединяются в одно сообщение на каждого получателя и каждый канал (тело не более 8 строк, избыток обозначается «+N more»; SMS усекается до 140 символов). После отправки для каждой цели устанавливается
notified_at=now. - По одной строке
infr_alert_deliveryна каждую пару (получатель, канал).
- Каждое нарушение ищется по
Доступ
| Операция | Минимальный уровень | Аудит |
|---|---|---|
| Просмотр консоли/списка/ленты (index/list/feed) | 1 (чтение) | — |
| Сохранение/удаление/переупорядочение политики (save/delete/reorder) | 2 (запись) | alert_policy.create / .update / .delete |
| Подтверждение/закрытие оповещения | 2 | alert.ack / alert.closed |
| Проверить сейчас (run) | 2 | alert.fire при отправке |
| Тестовая отправка (test) | 2 | alert.test |
| Автоматическая отправка по расписанию | (система) | alert.fire |
Шкала уровней: demo=1 · staff=5 · admin=10. Для чтения требуется уровень≥1; для записи и отправки — уровень≥2. Все разрушающие операции и операции отправки записываются в infr_audit_log (см. Журнал аудита). Поставщиков каналов доставки настраивает администратор (уровень≥10).
Устранение неполадок и часто задаваемые вопросы
В. Я включил условие, но оповещения не приходят.
- Убедитесь, что политика активна, а планировщик (
schedule:workили супервизор в промышленной среде) запущен. - Нет поставщика канала — обратите внимание на предупреждение на карточке и настройте поставщика по умолчанию в разделе Почтовые адаптеры/SMS-адаптеры.
- Проверьте, что пересечение
via_mail/via_smsполучателя с каналами политики не пусто, а поля электронной почты и телефона заполнены. - Во время паузы повторная отправка подавляется (
cooldown_min, по умолчанию 30 мин). Кнопка [Проверить сейчас] позволяет проверить это немедленно, но уже отправленное оповещение будет отправлено повторно только после окончания паузы.
В. Мои условия по БД и системе молчат.
- Система: чтобы сервер оценивался, он должен быть в сети (loadavg в последних 2 циклах seq). Серверы офлайн или без данных пропускаются.
- БД: последняя выборка
infr_db_metricдолжна иметь статус ok и давность менее 10 минут. Проверьте в разделе Коллекторы БД, что коллектор работает.
В. Отслеживает ли проверка истечения сертификата только конкретный сайт?
- Нет.
web_cert_on— это глобальное сканирование: оно перебираетinfr_web_certпо всем доменам всех зарегистрированных веб-сервисов, независимо от целевых URL политики.
В. Накапливается ли одно и то же нарушение бесконечно?
- Нет. Оно агрегируется в одном открытом оповещении с ключом
(policy_id, metric, entity_key)(count++). Когда нарушение устраняется, следующее вычисление автоматически переводит его вclosed.
В. Замедляет ли веб-зонд вычисление?
- Число URL ограничено 30 на политику, тайм-аут соединения составляет 4 с, плюс короткий тайм-аут, основанный на задержке. Снимок системы читает только окно seq, чтобы избежать медленных запросов.
Связанные разделы
- Операционная политика — задаёт значения порогов по умолчанию (
alertDefaults()) - Почтовые адаптеры · SMS-адаптеры — поставщики каналов доставки
- Сервисы ▸ Веб — источник данных о сертификатах и доступности (
infr_web_cert) - Коллекторы БД — источник условия по БД (
infr_db_metric) - Серверы · Состояние — источник системного условия (
server_status) - Угрозы · Блок-лист — источники условий безопасности
