ГлавнаяПереадресация SMS → SMS-алерты для админов

SMS-алерты для админов: последний канал, когда упал сервер, а Telegram молчит

У каждого админа есть история про ночь, когда упал сервер, а алерт не пришёл: Telegram-бот жил на том же интернете, почта крутилась на том же хосте, а телефон дежурного спокойно спал. SMS остаётся последним каналом, который работает, когда всё остальное уже лежит, при одном условии: телефон, который его отправляет, стоит вне контура, за которым следит.

Почему не Telegram и не почта

Не потому, что они плохие. Потому что они зависят от того же интернета, который в момент сбоя чаще всего и пропадает. Лёг канал провайдера - Telegram-бот молчит, письмо стоит в очереди. Пропал линк на порту коммутатора, за которым сидит сервер мониторинга, - мониторинг знает, что случилось, но сказать некому. SMS идёт по сотовой сети с телефона, у которого своя SIM и своё питание, и доходит на любой телефон дежурного, хоть кнопочный, хоть с отключённым мобильным интернетом.

Как это устроено

Обычный Android-телефон с SIM ставится на зарядку в месте, которое не падает вместе с серверами: дома у дежурного, во втором офисе, у знакомого с отдельным провайдером. На нём приложение-шлюз. Мониторинг при срабатывании триггера делает один POST-запрос к REST API: номер дежурного, текст алерта, ключ. Сервер передаёт команду телефону, телефон отправляет SMS.

Zabbix / Prometheus в контуре API вебхук Телефон с SIM вне контура Дежурный SMS
Мониторинг может стоять хоть в той же стойке. Телефон - нет.

Одна оговорка про честность схемы: запрос от мониторинга к API всё-таки идёт через интернет. Если у сервера мониторинга нет никакого выхода наружу, алерт не уйдёт. Поэтому мониторинг ставят там, откуда сеть до API есть, а телефон - там, где своя сотовая связь. Полностью автономный вариант с GSM-модемом в самой стойке разобран в статье про SMS через модем; у него свои минусы, и для большинства небольших инфраструктур телефон вне контура проще.

Zabbix, Prometheus и всё остальное

В Zabbix заводится способ оповещения типа Webhook: короткий скрипт на JavaScript, который собирает JSON с номером и текстом и делает HttpRequest на API. В Prometheus Alertmanager это receiver с webhook_configs, при желании через крошечный прокси, который превращает формат Alertmanager в запрос API. UptimeRobot, Grafana, самописный скрипт на cron - всё, что умеет отправить HTTP-запрос, умеет отправить SMS. Запрос можно собрать и проверить в песочнице прямо в кабинете, до того как лезть в конфиги мониторинга.

Не заспамить дежурного

Когда падает коммутатор, за ним падают двадцать хостов, и мониторинг честно шлёт двадцать алертов. Двадцать SMS ночью - это способ научить дежурного не читать SMS. Группировку и дедупликацию делайте на стороне мониторинга: у Alertmanager для этого есть group_by и repeat_interval, у Zabbix - зависимости триггеров. Одно сообщение «упал core-sw1, недоступно 20 узлов» полезнее двадцати одинаковых. Лимит бесплатного тарифа, одно сообщение в 30 секунд, здесь скорее помогает, чем мешает.

В обратную сторону: SMS от железа в Telegram

Обратная задача встречается не реже. GSM-сигнализация на объекте, ИБП с модемом, датчик протечки в серверной, домофон - всё это умеет только слать SMS на один номер. Номер обычно живёт в телефоне, который лежит в ящике, и сообщение о протечке читают утром. Если SIM с этим номером стоит в телефоне-шлюзе, входящие SMS переадресуются в Telegram, MAX, на почту или вебхуком в вашу систему мониторинга, и «протечка в серверной» превращается в обычный алерт в общем канале. Переадресация входящих бесплатна на всех тарифах, подробнее в статье про SMS в Telegram.

Что учесть

Телефон-шлюз сам может замолчать: сел, вылетел из сети, оболочка усыпила приложение. Если он не выходит на связь дольше пятнадцати минут, придёт письмо, и мониторить сам шлюз отдельным триггером не нужно. На Xiaomi и похожих оболочках приложение нужно вывести из-под экономии батареи, иначе оно уснёт ночью, ровно тогда, когда нужнее всего; как это сделать, описано отдельно.

SMS о сбое с телефона на своей SIM

Один POST из мониторинга. Телефон стоит отдельно от контура и шлёт сообщение, когда всё остальное уже лежит.

Попробовать бесплатно   Документация API →

Частые вопросы

Зачем SMS, если есть Telegram-бот?

Бот живёт на том же интернете, что и падающий сервер. Когда лёг канал провайдера или роутер, Telegram молчит вместе с ним. SMS идёт по сотовой сети с телефона, который стоит отдельно, и доходит тогда, когда остальные каналы уже недоступны.

Как подключить Zabbix или Prometheus?

Вебхуком: у Zabbix есть тип оповещения Webhook со скриптом на JavaScript, у Prometheus Alertmanager - receiver webhook_configs. В обоих случаях это один POST на API с номером и текстом. Проверить запрос можно в песочнице кабинета, до настройки мониторинга.

Где должен стоять телефон-шлюз?

Не в той стойке, за которой он следит. Если шлюз питается от того же ИБП и ходит через тот же роутер, он упадёт вместе с ними. Дома у дежурного или в другом офисе с отдельным интернетом - нормально.

Мониторинг шлёт десятки алертов за раз - что с лимитами?

На бесплатном тарифе не чаще одного сообщения в 30 секунд, поэтому дедупликацию и группировку алертов лучше делать на стороне мониторинга: одно SMS «упал узел X, 14 проверок» полезнее четырнадцати одинаковых.

А в обратную сторону - SMS от железа в Telegram?

Да, это переадресация входящих. GSM-сигнализация, ИБП с модемом, датчик протечки шлют SMS на SIM в телефоне-шлюзе, а он доставляет их в Telegram, MAX, на почту или вебхуком в вашу систему. Переадресация входящих бесплатна на всех тарифах.