Pull to refresh

Сторожевой пёс следит за вами (мониторинг хостинга)

Reading time 4 min
Views 15K
Внимание! Данная статья для web-программистов — содержит исходники и техн. подробности.

На страже у качестваУ Вас было такое – что простой вопрос повергал Вас в ступор и глубокие раздумья? У меня такое случается каждый раз, когда клиенты или друзья спрашивают меня:

— Андрей, какой хостинг порекомендуешь для нашего сайта?


И ответить нечего, потому что все (все!) наши замеры не в пользу хостинговых компаний, даже никого конкретно приводить не буду — сами сможете проверить, выполнив рекомендации в этой статье.

Казалось бы, где зарыта собака? Ведь для нас хостинг – это одна из любимейших мозолей, на которую часто наступают, потому что мы – SEOнизаторы. Мы трудимся – чтобы выводить свои сайты и клиентов в топы, а плохой и нестабильный хостинг распугивает сканирующих роботов Яндекса, Гугла и иже с ними. Впрочем, часто хостинг валится и днём, особенно во время пиковых нагрузок около 18:00 из-за наплыва в Интернете зевак под вечер.

Вот самое простое, что бывает – сайт исправно работает днём, пока бдит саппорт хостера. А ночью иногда исправно «лежит» в нокдауне. Например, скрипты хостера делают бекапы и все перегружено. Клиенты спят, покупатели спят, сайт спит. Все довольны, кроме поисковых пауков.

Первое, что мы сделали – купили свой дорогой сервер и отвезли его к Каравану (спасибо ребятам за отличное качество колокейшн). Но сервер у нас не резиновый, и как услугу хостинг мы не предоставляем. Поэтому пустить всех наших и не можем.

Чтобы как-то контролировать ситуацию – я написал пару лет назад монитор стабильности хостинга. Сейчас, когда у нас уже много других конкурентных преимуществ – мы готовы выложить исходники и алгоритм работы для Хабраобщественности, чему и посвящен этот пост.

Итак, ближе к делу


Скрипт прост до безобразия, а исходники сырые и не причесанные, не смотря на помощь нашего хабрадруга Grox'a. Просим не пинать сильно за это.

Итак, архив с сорцами (PHP + MySQL), 11 kb zip. Все открытое, без обфускаторов.

Быстрый старт

1. Распаковываем у себя архив, выкачиваем все к себе на сервер, например на мойсайт.ru/watchdog/
2. Создаем БД для собаки (лучше отдельную), и выполняем sql-файл sql.txt (или закачиваем его в PHPMyAdmin)
3. Прописываем в файле dbconnect.php доступы в базу данных
4. Прописываем в grox_config_users.php себя как пользователя (логин, пароль)
5. Заходим на мойсайт.ru/watchdog/ и добавляем первый – эталонный* сайт
6. Прописываем крон, чтобы дёргал раз в 5 или 20 минут скрипт nip.php, например, так */10 * * * * /usr/bin/wget -q «вашсайт.ru/watchdog/nip.php»
7. Теперь можем добавлять другие сайты на мониторинг
8. Через неделю собираем первые сливки
9. ?????
10. PROFIT

Естественно, так можно эффективно мониторить только другие сервера, но не свой собственный.

*Эталонный (тарировочный) сайт – это чей-то чужой сайт с заведомо качественным хостингом (например, у них много серверов в разных дата-центрах). Тот, который мы используем – специально называть не буду, а то заддосим нечаянно :) Он нужен для того, чтобы исключить погрешность из-за тормозов самого нашего проверяющего сервера. Как это работает? Читаем дальше.

Структура базы данных


bones – «кости», итог кусания сайтов. Самый главный лог-файл
bones_back – куда же без бэкапов. Сюда переносим всё, что старше трёх месяцев.
samples – синхронизация укусов, позволяющая сравнить задержки с тарировочным сайтом.
watch_dogs — это список сайтов, которые сторожевые псы «кусают» для проверки

Как это работает?


Каждый заход крона на проверку хостинга имеет уникальный номер. Сайты опрашиваются в случайном порядке. Это гарантирует работу скрипта в условиях подвисания одного отдельного сайта. Если «тарировочный» сайт сбоит одновременно с проверяемым – делаем вывод, что глючил не проверяемый сайт, а сам наш сервер, и эту выборку отбраковываем. Сравнение выборок делаем по полю sample_id в базе bones.

Вот так выглядит список «собак»

Покусаем

Вот пример сбоев за последние 7 дней

crispo.ru

Статистика достаточно хороша, утренние задержки – как раз запуск бэкапа.

Что можно улучшить/добавить?

1. На register_globals не ругайтесь, этот скрипт для локального доступа (не снаружи)
2. Интерфейс пользователя получше бы
3. Не хватает сведения воедино выборки сайта и торировочного сайта
4. Можно добавить слежение за ключевой фразой на странице, гарантирующей нормальную работу БД проверяемого сайта
5. Уведомлений о сбоях
6. Более «правильный» скрипт очистки от тегов смысловой части сайта
7. Кнопки общей приостановки скрипта watchdog’a в случаях, когда надо экстренно снизить нагрузку на основной сервер

Аналогичные сервисы есть, даже проверяющие почту и доступность ftp, но часто они на западных серверах, и довольно сложны. Наш собственный скрипт мы успешно интегрировали в кабинет клиента, и внутренние отчеты ежемесячные, и вообще довольны его простотой и незамысловатостью.

Скрипт дарим всем, если напишите достойное продолжение, просим им также поделиться со всеми. Можно через нас (прислав исходники на support@webprojects.ru).
Если он окажется полезным Вам – помните и про нас, не удаляйте упоминание авторов из подписей в комментариях и футере.


P.S. Модуль мониторинга назван сторожевым псом (watch dog) в честь замечательного свойства некоторых AMR-контроллеров. Изначально это было прерывание с внутренним счетчиком, которое монотонно уменьшает значение специального регистра. Как только значение достигает нуля – инициируется перезагрузка контроллера, и выполнение программы начинается «с нуля». В основной и надежной части программы происходит сброс в высокие значения контролирующего регистра. Если вдруг софт вашей стиральной машинки или телевизора зависнет из-за какой-то ошибки – сторожевой пёс сам выполнит перезагрузку.
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+53
Comments 29
Comments Comments 29

Articles