WP: мониторинг аптайма и ошибок PHP с алертами в Telegram

Мониторинг аптайма и ошибок PHP с уведомлениями в Telegram

WP: мониторинг аптайма и ошибок PHP с алертами в Telegram

Самая честная проверка сайта приходит не из метрик, а в 3:07 ночи, когда клиент пишет в мессенджер с лаконичным вопросом: у вас всё ок? Сайт не открывается. Если у вас был такой звонок в голове, вы понимаете, как хочется нажать одну кнопку и получить тихий, аккуратный телеграм алерт с нормальной формулировкой: сайт упал, код ответа 502, время реакции 14 секунд, проверьте PHP-FPM. А не взрывать чат сопливыми скриншотами и паникой. Я Артур Хорошев, делаю автоматизации, и сегодня покажу аккуратный, рабочий способ для WordPress: аптайм и PHP-ошибки улетают в Telegram через Make, без серверной магии и с нормальной логикой, чтобы не спамить по десять раз подряд.

Сразу развею путаницу со словом алерт. В Telegram полно каналов, где слово alert фигурирует в разных смыслах, и кто-то даже ищет лиза алерт телеграм, телеграм канал Лиза Алерт и всё такое. Это важная волонтерская история, но мы здесь про сугубо технические уведомления, чтобы вовремя ловить падения и критические ошибки, а не путать наши алерты с чужими задачами. Если хотите, шутите в команде фразой лиза алерт красноярск телеграм при каждом фальш-срабатывании, но внутренняя дисциплина дороже мемов. Сигналы должны быть чёткими, редкими и полезными, иначе команда просто перестаёт реагировать, а бизнес платит за простои.

Бот для телеграма - уведомления об аптайме и ошибках

Из чего состоит система и почему Telegram

Сердце схемы простое: Make делает регулярные проверки доступности сайта, ловит коды ответа и таймауты, а также читает или получает критические ошибки PHP. На стороне WordPress мы включаем логирование или добавляем короткую прослойку, которая шлёт событие в вебхук. Telegram выступает как идеальный канал оповещений: быстро, привычно, можно вкинуть в командный чат, закрепить правила реакции и не зависеть от ещё одного почтового сервера, который услышит письмо завтра утром. Важно не превратить это в карусель уведомлений, поэтому в сценарии добавим антиспам: если сайт уже в статусе down, не дёргаем всех каждую минуту, шлём первое сообщение и тихо мониторим до восстановления. Плюс сводка утром, если ночью был трэш, но об этом ниже.

Чем хорош Make для этой задачи. Он даёт визуальную логику, быстрый старт и нормальное расписание, а на бесплатном тарифе у вас 1 000 операций в месяц и 2 активных сценария. Этого хватает, чтобы держать руку на пульсе одного-двух проектов, особенно если проверки делать не каждую минуту. Ссылка для регистрации вот здесь, чтобы не искать по меню: Make.com. Под капотом мы используем HTTP для аптайма, Telegram Bot для сообщений, и либо SFTP для чтения логов, либо вебхук, куда WordPress сам отправит свежую ошибку. Второй путь приятнее и экономит операции, признаюсь, я чаще делаю именно его.

Аптайм по человечески: простой пинг с головой

С аптаймом все ожидаемо, а скука нам на руку. В Make создаём сценарий, ставим модуль HTTP с запросом к главной или к лёгкой технической странице, которая грузится без тяжелых баннеров и сторонних скриптов. Настраиваем таймаут в районе 8-12 секунд, чтобы не ловить ложные срабатывания при случайных задержках провайдера. В ответе смотрим код и время, и если что-то не так, через роутер отправляем Telegram сообщение. Чтобы не спамить, на входе ставим небольшой дедупликатор: если предыдущая проверка тоже упала, то молчим и ждём светлого момента восстановления. Хранить состояние удобно в Data Store внутри Make, там одна запись last_status и timestamp, всё по взрослому. Проверки каждые 2-5 минут достаточны для большинства проектов, а если e-commerce в прайм-тайм, можно и по минуте, но следите за квотой операций, она не резиновая.

Сообщение в Telegram лучше формировать компактно: домен, код ответа, время, короткая подсказка. Например, если 502 и время запроса больше 5 секунд, в тексте сразу упоминаем PHP-FPM или перегретый кэш. При восстановлении шлем зелёное уведомление в том же чате, чтобы команда закрыла мысленную вкладку тревоги. Кстати, кто боится забыть включить уведомления на телефон, просто добавьте бота в ваш рабочий чат и дайте ему право писать, а ещё можно включить упоминание ответственного по дежурству, но без фанатизма, иначе весь день будете ловить @username в обед.

Критические ошибки PHP: ловим точечно, не листаем гигабайты

Теперь к тому, что в реальности причиняет боль. Ошибки PHP. У WordPress есть лог WP_DEBUG_LOG, можно хранить его в отдельном файле и по крону дергать SFTP, вытягивая только свежие строки. Но такой подход прожорлив, особенно если лог пухнет от предупреждений. Я обычно иду более элегантным путём: мини-плагин перехватывает error_log для уровня error и выше, формирует компактное сообщение и отправляет вебхук в Make. Это экономит операции и нервы, а вы видите только то, что действительно важно. Ниже минимальный пример, который можно положить в wp-content/mu-plugins, чтобы он всегда был активен. Если му-плагины не по душе, поставьте как обычный плагин, лишь бы не забыть галочку.

<?php
/*
Plugin Name: KV Error Hook
Description: Отправляет критические PHP-ошибки в вебхук Make
*/
add_action('init', function() {
  if (!defined('WP_DEBUG') || !WP_DEBUG) return;
  set_error_handler(function($severity, $message, $file, $line){
    if (!($severity & (E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR))) return false;
    $payload = [
      'site' => home_url(),
      'type' => 'php_error',
      'message' => mb_substr($message, 0, 500),
      'file' => $file,
      'line' => $line,
      'time' => date('c')
    ];
    wp_remote_post('https://hook.integromat.com/your-webhook-id', [
      'timeout' => 5,
      'body' => json_encode($payload),
      'headers' => ['Content-Type' => 'application/json']
    ]);
    return false;
  });
});

На стороне Make ставим модуль Webhooks — Custom webhook, принимаем JSON, добавляем фильтр по type, а дальше формируем сообщение для Telegram. Можно дополнить сценарием маленькую дедупликацию по файлу и строке, чтобы при лавине одинаковых ошибок в чате не крутился сломанный кинопроектор. Если разработка ведётся активно, советую отмечать окружение в теге окружения, чтобы не путать staging и прод: в Telegram это одна строка, но экономит много нервов. И да, помним о приватности: в тексте не выводим пароли и токены, иногда стек-трейсы любят болтать лишнее, сократите сообщение до сути и прикрепляйте ссылку на задачу, если она уже заведена.

Make - инструменты для мониторинга и алертов

Телеграм бот без боли и шаманства

С Telegram всё обычно, но есть пара хитростей. Через BotFather создаём бота, копируем токен, в Make добавляем подключение Telegram Bot. Чтобы слать в канал, сначала добавьте бота в канал и назначьте администратором, затем используйте @username канала как chat_id. Для групп найдите chat_id через модуль getUpdates или используйте сервис-ботов, но проще один раз поймать ID и записать его в переменную. Сообщения лучше оформлять без килотонн Markdown, а критичность передавать словами и кратко, иначе в мобильном чате всё ломается. Если сообщения не доходят, обычно проблема в правах бота или в том, что у вас включен режим privacy и бот не видит контекст в группах. Снимите privacy, если нужно, и перезапустите сценарий, там нет никакой магии, просто галочки.

Если хочется совсем навести красоту, делаем два уровня уведомлений. Критика уходит сразу, а ворчание по мелочам собирается в утреннюю сводку. Это два сценария в Make и одна Data Store таблица. Вам на завтрак прилетает краткий digest: 2 ошибки в wp-includes/pluggable.php, 1 таймаут на /checkout, аптайм за ночь 99.3 процента. Ничего драматичного, просто отметили и идём дальше. Такой подход помогает не превращать чат в шумовой забор, а люди в команде не выгорают от постоянных push-ов.

Собираем единую схему в Make

Чтобы не расползлось в разные стороны, держим всё в одном сценарии с роутерами или в двух связанных. В первом поток на аптайм: HTTP запрос, проверка кода, сравнение с предыдущим статусом в Data Store и Telegram при смене состояния. Во втором поток на ошибки: Webhook вход, фильтр по критике, шаблон сообщения с указанием домена, файла и строки, а также быстрая ссылка для ответственного. Тестируем оба потока отдельно, чтобы понять, где утекают операции. Если вам хочется посмотреть на референсы, у меня есть готовые наработки и обучающие материалы. Курсы и проекты под это заточены, с примерами и поддержкой, вот раздел с программой обучения: Обучение по make.com. Если нужна база из готовых сценариев, загляните в библиотеку шаблонов, там легко стартовать без ковыряния неделями: Блюпринты по make.com.

Автоматизация публикаций и техстраниц в WordPress

Российские реалии и пару приземлённых нюансов

Если сайт живёт на shared-хостинге, где доступ к логам есть только по SFTP и без tail, возьмите лёгкий крон в Make раз в 10 минут, выкачивайте хвост лога на 50-100 килобайт, парсите новые строки по последнему офсету, который храните в Data Store. Это чуть сложнее, но работает даже там, где плагин ставить нельзя. При балансировке через Cloudflare не забывайте проверять не только корень, но и эндпоинт, который отдаётся напрямую, иначе вы увидите красивый кэш, когда бэкенд уже плачет. Для WooCommerce сделайте отдельную проверку на /checkout или API эндпоинт, который не кэшируется, это спасает продажу когда всё остальное молчит. И ещё мелочь: на виртуальных серверах иногда DNS ночью замирает, поэтому в Make можно пинговать по IP техническую страницу, а не только домен. Такой дублирующий путь помогает отличать реальную проблему от хулиганства DNS.

Кстати про слова. Когда вы обсуждаете в чате, что нужен телеграм алерт, не удивляйтесь, если кто-то внезапно вспомнит лиза алерт усольцевы телеграм или лиза алерт красноярск усольцева телеграм. Люди живые, ассоциации скачут. Просто договоритесь о терминах в своём рабочем пространстве и запишите это в README проекта. Прозрачность в мелочах экономит десятки минут каждую неделю, а из этого складываются и деньги, и спокойствие. В итоге мониторинг перестаёт быть плакатом на стене и превращается в привычный, тихий инструмент, который не мешает жить, а спасает в нужный момент.

Хочется внедрить быстро и с нужными тонкостями

Если хочется руками и сегодня, регистрируйтесь в Make.com, соберите базовый сценарий и проверьте его на тестовом домене. Если нет времени разбираться в каждом фильтре, приходите учиться, у нас вся эта система разобрана по шагам с черновиками сообщений, Data Store схемами и антиповторами. Кто любит идти от готовых решений, берите пакеты шаблонов, где аптайм, ошибки, сводки и эскалации сделаны под разные роли и нагрузки. И чтобы не пропускать новые связки с нейросетями и кейсы для бизнеса, подписывайтесь на мой канал, там всё по делу и без показухи: Хотите научиться автоматизации рабочих процессов с помощью сервиса make.com и нейросетей ? Подпишитесь на наш Telegram-канал.

Справедливости ради, не все поломки решаются бравым алертом. Иногда нужно открыть админку в шесть утра, сделать глоток холодного кофе и честно пофиксить конфликт плагинов. Но приятно, когда вы узнали об этом первыми и клиенты спят дальше. Меньше драматургии, больше нормальной инженерии, и Telegram не превращается в сирену городской службы спасения, а остаётся просто хорошим инструментом.

FAQ

Как часто ставить проверку аптайма в Make, чтобы не сжечь бесплатную квоту
Для обычного корпоративного сайта раз в 5 минут вполне достаточно, получится около 8 640 операций в месяц на один HTTP запрос, это уже платный уровень. На бесплатном тарифе практично ставить 10-15 минут либо объединять проверки с другим потоком. Если нужен частый мониторинг, сделайте проверку только в рабочие часы чаще, а ночью реже, расписание в Make это позволяет.

Как получить chat_id для канала или группы в Telegram
Добавьте бота в канал и сделайте админом, укажите @username канала в модуле Telegram в Make. Для групп проще один раз кинуть сообщение, затем через getUpdates поймать числовой chat_id. Сохраните его в переменную Connection или в Data Store, чтобы не бегать по логам в следующий раз.

Что делать, если у меня shared-хостинг и нет доступа к системным логам PHP
Используйте мини-плагин с вебхуком, как в примере выше, он перехватывает критические ошибки и отправляет краткий payload в Make. Такой путь не требует SFTP, работает быстро и фильтрует мусор. Важно включить WP_DEBUG и аккуратно ограничить уровни, чтобы не ловить notice и deprecated.

Можно ли слать уведомления в несколько чатов сразу
Да, просто добавьте несколько веток отправки или сделайте массив получателей. Я люблю разделять: в техничный чат идёт полная версия ошибки, в чат менеджеров короткое алертовое сообщение о статусе, без кода и стеков, чтобы никого не пугать лишними деталями.

Сообщения не доходят, бот молчит, где копать
Проверьте токен в подключении Make, права бота в канале или группе, и не включен ли режим privacy, который блокирует реакции в группах. Запустите сценарий вручную в режиме отладки, посмотрите журнал, Telegram обычно говорит почему отказал. Иногда виноват лимит на стороне Telegram, стоит поставить небольшую задержку между несколькими сообщениями.

Сколько операций тратит такая система
Одна проверка аптайма — одна операция, плюс ещё одна при отправке сообщения. Вебхук с ошибкой PHP стоит ноль на приёме и одну операцию на отправку в Telegram. Плюс мелочи вроде записи в Data Store. В среднем получается очень экономно, если не ставить проверку каждую минуту и не сыпать тонны отладочных сообщений.

Можно ли использовать это для нескольких сайтов сразу
Да, просто заведите Data Store с ключом по домену и храните для каждого статусы отдельно. Сообщения формируйте с префиксом домена, а роутер в Make разделит логику приёма ошибок. По аптайму удобно делать один сценарий на все сайты, чтобы не плодить клонов и легче было обновлять.

Где посмотреть обучение и готовые шаблоны по Make
Полная программа и разбор сценариев лежит тут: Обучение по make.com. Если хотите стартануть с готовых решений и донастроить под себя, берите подписку на шаблоны: Блюпринты по make.com. А зарегистрироваться с бонусами можно по ссылке Make.com, это тот самый конструктор, на котором вся схема держится.

Интересное