/ Адаптивность / Мониторинг работоспособности сайтов

Мониторинг работоспособности сайтов

HIT

Когда сайтов в обслуживании становится довольно много, появляется необходимость системного подхода к мониторингу работоспособности. Хотя бы на примитивном уровне — доступен ли сайт.
Идея следующая — сделать специальный шаблон в котором, при загрузке страницы, генерируются скриншоты сайтов.

Создание шаблона мониторинга

Создаем типа записи — сайт (это необязательно, но добавит автоматизации процессу добавления новых сайтов, чтобы не прописывать вручную). Если делать на отдельном сайте, то это не потребуется, можно использовать стандартные записи. Далее создаем шаблон в котором и будет происходить мониторинг, привязываем его к конкретной странице. Использую Api сервиса по созданию скриншотов www.s-shot.ru размечаем вывод динамических скриншотов во фрейме.

<iframe src="https://mini.s-shot.ru/?https://site.ru" width="400" height="300"></iframe>
Возникли некоторые проблемы использования сервиса www.s-shot.ru: во-первых он кэширует изображения, во вторых игнорирует на сайтах просроченный сертификат SSL

Как вариант, можно в iframe грузить весь сайт, причем скорость загрузки страницы довольно высока. Но тут есть другая проблема: если наш сайт работает по протоколу https, то он не даст загрузить через iframe сайты с протоколом http.

Как получить изображение страницы целиком

При создании скриншотов, возник параллельный вопрос, связанный с другими целями — как получить полное изображение страницы во всю длину (не только скриншот). Недолгим поиском удалось найти несколько решений:

1. В FireFox есть встроенная функция. Вызываем командную строку Shift + F2 и пишем команду

screenshot file.png --fullpage

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

Если нужен скриншот а не вся страница: screenshot file.png

2. Расширение Chrome — Full Page Screen Capture. Пока не использовал.

В Chrome также можно сделать скриншот через инструменты разработчика. Вызываем DevTools (ctrl+shift+i ), вызываем консоль (ctrl+shift+p), пишем Capture full size screenshot нажимаем Enter. Скриншот автоматически загрузится.

Коды ответов протокола HTTP

1XX — Информационные.
2XX — Успех. 200 — страница существует и загружена.
3XX — Перенаправления.
4XX — Ошибки клиента.
5XX — Ошибки сервера. 500 — запущен сценарий, при выполнении которого произошла ошибка.

Действенные методы мониторинга

С кодом ответа сервера

Создаём шаблон на каком-либо своём сайте, с перечнем сайтов которые нужно мониторить.

$urls = Array(
    'Сайт 1' => 'https://site1.ru/',
    'Сайт 2' => 'https://site2.com/',
    'Сайт 3' => 'https://site3.ru/',
);

И ниже прописываем функцию получения ответов циклом:

echo '<table>';
foreach($urls as $site => $url) {

    // Получение данных
	$handle = curl_init($url);
	curl_setopt($handle, CURLOPT_NOBODY, 1);
	$response = curl_exec($handle);
	$httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE)."\n\r";
	
	if($httpCode != 200) {
		echo '<tr>';
		echo '<td>'.$site.' (<a href="'.$url.'" target="_blank">'.$url.'</a>)</td><td class="red">'.$httpCode.'</td>';
		echo '</tr>';

        // Отправляем письмо админу о том что сайт не работает
        $mail_to = 'mail@mail.ru';

        $theme = "Сайт $site не работает";

        $msg  = "<p>Доброго времени суток!</p><br/>";
        $msg  .= "<p>Уважаемый администратор, <br/>по каким-то причинам сайт $site ($url) не работает.</p>";
        $msg  .= "<p>Код ответа сервера: <strong>$httpCode</strong>.</p>";

        $headers = "Content-Type: text/html; charset=utf-8\n";
        $headers .= 'From: '.get_bloginfo().' <no-replay@'.$_SERVER['HTTP_HOST'].'>' . "\r\n";	
        
        wp_mail($mail_to, $theme, $msg, $headers);

	} else {
		echo '<tr>';
		echo '<td>'.$site.' (<a href="'.$url.'" target="_blank">'.$url.'</a>)</td><td class="green">'.$httpCode.'</td>';
		echo '</tr>';
	}
	
	curl_close($handle);

}
echo '</table>';

Шаблон привязываем к странице и вешаем на полученный url CRON-задачу. Например проверять каждый час:

wget -O /dev/null -t 1 -q ‘https://site.ru/test-sites/’

Более быстрый способ проверки, без кода ответа (требует доработки)

Делаем все тоже самое, только в перечне сайтов указывает только домены:

$urls = Array(
    'Сайт 1' => 'site1.ru',
    'Сайт 2' => 'site2.com',
    'Сайт 3' => 'site3.ru',

);

И функция проверки будет следующая:

echo '<table>';
foreach($urls as $site => $url) {

    if($socket =@ fsockopen($url, 80, $errno, $errstr, 30)) {
		echo '<tr>';
		echo '<td>'.$site.' (<a href="https://'.$url.'" target="_blank">'.$url.'</a>)</td><td class="green">Доступен</td>';
		echo '</tr>';
        fclose($socket);
    } else {
		echo '<tr>';
		echo '<td>'.$site.' (<a href="https://'.$url.'" target="_blank">'.$url.'</a>)</td><td class="red">Не доступен</td>';
		echo '</tr>';

        // Отправляем письмо админу о том что сайт не работает
        $mail_to = 'mail@mail.ru';

        $theme = "Сайт $site не работает";

        $msg  = "<p>Доброго времени суток!</p>";
        $msg  .= "<p>Уважаемый администратор, <br/>по каким-то причинам сайт $site ($url) не работает.</p>";

        $headers = "Content-Type: text/html; charset=utf-8\n";
        $headers .= 'From: '.get_bloginfo().' <no-replay@'.$_SERVER['HTTP_HOST'].'>' . "\r\n";	
        
        wp_mail($mail_to, $theme, $msg, $headers);
    }    

}
echo '</table>';

Будет отправлено письмо на указанный e-mail в случае кода ответа сервера отличного от 200 (в первом методе) или недоступности сайта (во втором методе).

Все таки второй метод проявил себя не лучшим образом на деле. Когда сайт был вовсе не доступен, он показывал что сайт работает. Этот метод требует доработки.
[site-socialshare]
  • Комментарии
  • Вложения

Добавить комментарий

Пока нет комментариев. Будь первым!

Мониторинг работоспособности сайтов Мониторинг работоспособности сайтов
Ограничение длины текста
Рекомендации для васОграничение длины текстаOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.