Skip to content
Эта страница переведена с помощью ИИ и может содержать неточности. Помогите улучшить перевод на GitHub.

Центр уведомлений ​

Центр уведомлений подписывается на внутреннюю шину событий Gately и по правилам отправляет события — смену DDNS, истечение сертификатов, блокировки WAF, аварии процессов и другие — в Webhook, Telegram, Bark, ntfy, Gotify, Pushover, Discord, Slack, ServerChan, PushPlus, WeCom, DingTalk, Feishu и по электронной почте. Интерфейс находится в боковой панели: группа «Система» → «Уведомления».

Принцип работы ​

  1. При смене состояния модули публикуют события в шину событий внутри процесса; публикация не блокирует основную работу.
  2. Получив событие, центр уведомлений последовательно сопоставляет его с правилами: правило включено, уровень события не ниже минимального уровня правила, тип события соответствует списку событий правила.
  3. Сработавшие правила проходят подавление дубликатов, после чего сообщение отправляется во включённые каналы, выбранные в правиле. Если событию соответствует несколько правил, в один канал сообщение уходит один раз.
  4. Результат каждой отправки (успех или причина ошибки) записывается в «Недавние отправки»; в памяти хранятся последние 200 записей, ошибки дополнительно попадают в журнал модуля.

Таймаут одной отправки — 45 секунд.

Каналы ​

Нажмите «Добавить канал», выберите тип и заполните поля. У каждого канала есть имя (обязательно), заметка и переключатель включения. Секретные поля после сохранения не отображаются; при редактировании пустое значение означает сохранение прежнего.

ТипОбязательные поляНеобязательные поля
WebhookURL запросаМетод запроса (по умолчанию GET, доступны GET, POST, PUT, PATCH), заголовки (по одному в строке в формате Key: Value), тело запроса, содержимое для признания успеха, таймаут (секунды, по умолчанию 20), пропуск проверки сертификата
TelegramBot Token, Chat IDURL API (если оставить пустым, используется https://api.telegram.org)
BarkКлюч устройстваURL сервиса (если оставить пустым, используется https://api.day.app)
WeComURL ботаНет
DingTalkURL ботаСекрет подписи (заполняется, если у бота включена «подпись»)
FeishuURL ботаСекрет подписи (заполняется, если у бота включена «проверка подписи»)
Эл. почтаСервер, получатели и хотя бы одно из полей «отправитель» или «имя пользователя»Шифрование, порт, имя пользователя, пароль
ntfyТема (topic)Адрес сервера (пусто — https://ntfy.sh), токен доступа
GotifyАдрес сервера, токен приложенияНет
PushoverТокен приложения, User KeyНет
DiscordАдрес webhookНет
SlackАдрес webhookНет
ServerChanSendKeyНет
PushPlusTokenНет

Поля с адресами требуют полный адрес, начинающийся с http:// или https://.

Переменные шаблона Webhook ​

В URL запроса и теле запроса можно использовать следующие переменные: имя переменной записывается в фигурных скобках (также поддерживается запись с префиксом #):

ПеременнаяСодержимое
titleЗаголовок в формате [Gately] заголовок события
messageПодробное описание события
textПолный текст: описание, источник, уровень, время
typeТип события, например ddns.changed
sourceИсточник события
levelУровень: info, warn или error
timeВремя в формате RFC 3339

Дополнительные поля самого события (например, ip, container) тоже можно использовать как переменные; при совпадении имён приоритет у переменных из таблицы выше. Значения переменных в адресе экранируются как URL.

Эл. почта ​

ШифрованиеЗначениеПорт по умолчанию
STARTTLSstarttls587
SSL/TLStls465
Без шифрованияnone25

Если указать порт 0, берётся порт по умолчанию для выбранного шифрования. Получателей может быть несколько, через запятую. Письма отправляются простым текстом в кодировке UTF-8; если сервер поддерживает AUTH и указано имя пользователя, применяется аутентификация PLAIN; если отправитель пуст, используется имя пользователя.

Подпись и коды ответа ​

  • DingTalk: если указан секрет подписи, к запросу автоматически добавляются timestamp и sign.
  • Feishu: если указан секрет подписи, к телу запроса автоматически добавляются timestamp и sign.
  • Для WeCom, DingTalk, Feishu и Bark проверяется прикладной код ответа: если HTTP вернул 200, но на уровне сервиса произошла ошибка, отправка также считается неудачной.

Правила ​

Нажмите «Добавить правило»:

ПолеОписание
НазваниеОбязательно
СобытияХотя бы одно. Можно выбрать конкретные типы событий; * означает все события, также можно ввести шаблон, например ddns.*. Шаблоны используют синтаксис Go path.Match
Минимальный уровеньinfo (информация), warn (предупреждение), error (ошибка); если оставить пустым, то информация. События с более низким уровнем не отправляются
КаналыХотя бы один
Подавление (с)Для одного правила однотипные события от одного источника отправляются только один раз за указанное время, повторы в этот период отбрасываются. 0 отключает подавление дубликатов
ВключеноПереключатель

Подсказка

Блокировки WAF и смены состояния upstream могут происходить очень часто, поэтому для таких правил рекомендуется задавать подавление не менее 300 секунд.

Шаблоны правил ​

При создании правила можно нажать на шаблон, чтобы заранее заполнить события, уровень и время подавления, а затем выбрать каналы и сохранить:

ШаблонСобытия
Критические сбоиСбой обновления DDNS, сбой продления сертификата, upstream недоступен, аварийное завершение дочернего процесса, сбой резервного копирования, контейнер завершился
Срок действия сертификатовСертификат скоро истечёт, сбой продления (подавление 24 часа)
Смена адресаЗапись DDNS обновлена, адрес STUN изменился
Состояние сервисовUpstream недоступен и восстановлен, контейнер завершился, дочерний процесс завершился
Безопасность и входыНеудачный вход, IP заблокирован, успешный вход, доступ к чувствительным данным
Изменения конфигурацииКаждое изменение конфигурации в панели управления

Типы событий ​

Тип событияНазваниеУровеньУсловие срабатывания
ddns.changedДинамический DNS: запись обновленаИнформацияЗадание DDNS успешно обновило запись
ddns.failedДинамический DNS: ошибка обновленияОшибкаЗадание DDNS не смогло обновить запись
stun.changedSTUN: изменился адрес обхода NATИнформацияИзменился внешний адрес правила STUN
ssl.expiringСертификат: скоро истекаетПредупреждениеДо окончания срока действия сертификата осталось менее 7 дней; по одному сертификату напоминание не чаще раза в 24 часа
ssl.renew_failedСертификат: ошибка продленияОшибкаНе удалось выпустить или продлить сертификат
waf.blockedWAF: запрос заблокированПредупреждениеWAF заблокировал запрос; прилагаются поля ip, host, path
upstream.downОбратный прокси: upstream недоступенОшибкаОдин из бэкендов веб-службы признан недоступным
upstream.upОбратный прокси: upstream восстановленИнформацияНедоступный бэкенд восстановился
docker.exitedDocker: контейнер завершилсяПредупреждение или ошибкаКонтейнер завершился с ненулевым кодом выхода (предупреждение) или был убит из-за нехватки памяти (ошибка)
process.exitedАварийное завершение дочернего процессаОшибкаДочерний процесс, управляемый Gately, аварийно завершился и будет автоматически перезапущен; источником служит имя процесса в журнале
backup.doneРезервное копирование: завершеноИнформацияПлановое или ручное резервное копирование успешно записано во все назначения, см. Резервное копирование конфигурации
backup.failedРезервное копирование: ошибкаОшибкаНе удалось упаковать копию или записать её в любое из назначений
auth.failedАутентификация: подряд неудачные попыткиПредупреждениеНеудачные попытки входа в панель управления; прилагается поле ip
auth.bannedАутентификация: IP заблокированПредупреждениеСерия неудачных аутентификаций в веб-службе привела к автоматической блокировке
login.successПанель управления: успешный входИнформацияУспешный вход в панель управления; прилагаются поля ip, user
audit.changeПанель управления: изменение конфигурацииИнформацияЛюбое изменяющее действие в панели управления; прилагаются поля actor, ip, method, path, см. Аудит и история конфигурации
audit.accessПанель управления: доступ к чувствительным даннымПредупреждениеСкачивание резервной копии, диагностического пакета, закрытого ключа сертификата, открытие терминала и т. п.; поля те же
notify.testТестовое уведомлениеИнформацияСоздаётся кнопкой «Тест» канала, в сопоставлении с правилами не участвует

Тестовая отправка ​

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

Соответствующий интерфейс — POST /api/notify/channels/{key}/test, его можно вызвать с правом notify:write у API-токена.

Распространяется по лицензии Apache-2.0.