Оповещение о падении сервера через SMS своими руками
После переезда на другой сервер из-за кривых настроек дважды возникла ситуация, при которой сайты оказвались в дауне, а я это замечал только спустя 10-12 часов. Такая ситуация, конечно, недопустима, и, помимо исправления настроек, я задумался, как избегать таких длинных даунтаймов. Логичное решение — оповещение по sms.
Да, есть куча сервисов, которые позволяют мониторить ваши сайты/сервера/демоны, отправляя вам как e-mail, так и SMS при возникновении проблем. Однако, ни в одном из них нет возможности бесплатного использования SMS в качестве уведомлений, везде предлагается подписка. Как правило, речь идет о суммах порядка 5-10$ в месяц. Мне это показалось слишком нерациональным — даже за пару СМС в течение месяца платить такую сумму неразумно. Поэтому я решил, что справлюсь сам, и справился :)
Итак, нам надо:
1. Сервис отправки СМС с API-интерфейсом
2. Любой хостинг, позволяющий использовать функцию fsockopen (95% хостингов это позволяют), с которого мы будем проверять наш сервер на доступность.
Я использовал сервис sms16.ru. Одна СМСка у них стоит 50 коп, есть api и куча другого функционала, который нам не понадобится. Регаемся, кидаем на счет 20-30 руб (хватит за глаза :)), идем в раздел API, качаем простой пример на PHP. Заходим на свой хостинг, заливаем пример в файл, скажем, send.php. Создаем еще один файл, примерно такого содержания:
<? $url = "mycoolsite.ru"; //сайт на сервере, который будем мониторить $myphone = "79998887766"; //наш телефонный номер $mylogin = "login"; //логин на sms19.ru $mypasswd = "passwd"; //парольт на sms19.ru $fp = fsockopen ($url, 80, $errno, $errstr, 5); if ($fp) { echo "server is ok"; $message = ""; } else { $fps = fsockopen ($url, 80, $errno, $errstr, 20); if ($fps) { $message = "server is very slow"; } else { $message = "server is down"; } } if ($message) include_once ("send.php"); ?>
Тут мы пытаемся подключиться к нашему сайту, если он отвечает в течение 5 секунд — значит все ок, дальше мы ничего не делаем. Если он отвечает между 5 и 20 секундами — сообщение будет информировать нас об очень медленной работе сервера. Если же сервер не отвечает более 20 секунд — значит, он в дауне. В конце мы отправляем sms-ку, включая соответствующий файл в скрипт с соответствующим сообщением.
В файле send.php мы меняем только шаблон xml:
$xml = '<?xml version="1.0" encoding="utf-8" ?> <request> <message type="sms"> <sender>inet2sms</sender> <text>'.$message.'</text> <abonent phone="'.$myphone.'"/> </message> <security> <login value="'.$mylogin.'" /> <password value="'.$mypasswd.'" /> </security> </request>';
Вместо логина и пароля можно использовать xml-api-ключ, чтобы не светить данные входа. Но т.к. у меня там лежит 20 руб, пусть светятся, не страшно :)
Вот, в принципе, и все, надо только потестить получившийся результат, вбив несуществующий url в переменную $url, вам должна прийти смска с соответствующим сообщением.
Ах да, под конец, надо получившийся скрипт добавить в cron. Я настроил запуск проверки доступности сайта раз в полчаса.
[Ответить]
Цитата: Однако, ни в одном из них нет возможности бесплатного использования SMS в качестве уведомлений, везде предлагается подписка.
Ну да, правильно про ping-admin написали в комментах. У него как раз нет подписки и все уведомления бесплатны и есть фича «голосовые уведомления» (хорошо будят ночью :D )
[Ответить]
Инструмент с бесплатными уведомлениями есть! Назыается Яндекс.Метрика!
[Ответить]
Соглашусь с комментарием выше, Яндекс с радостью уведомляет о падении сайта и его восстановлении. Притом есть настройка в какие дни недели и время суток уведомлять.
[Ответить]
Нормальный админ использует GSM-шлюз с COM1, великий админ использует VOIP-шлюз и заставляет сервер звонить на свой сотовый и ласковым женским голосом будит по-утрам отчитываясь сколько DDoS отfail2banил и какую нагрузку выдерживал=)
[Ответить]
спасибо, Drunk. это именно та информация, которая была мне нужна
[Ответить]