December 21, 2024
Простой скрипт для отслеживания доступности сайта с уведомлением в Telegram
Современные системы мониторинга позволяют гибко настроить мониторинг сайта и уведомления к нему, но что если вам нужно просто знать доступен ли ваш сайт на данный момент и посылать уведомление в телеграм-чат если что-то не так? Для этого можно использовать данный php-скрипт который можно разместить на сервере и запускать его по крону
Шаг 1. Устанавливаем необходимые зависимости
composer require guzzlehttp/guzzle telegram-bot/api
Шаг 2. Создаем файл site_health_checker.php
<?php require 'vendor/autoload.php'; use GuzzleHttp\Exception\ConnectException; use GuzzleHttp\Exception\RequestException; use TelegramBot\Api\BotApi; use GuzzleHttp\Client; function checkSite($url) { $client = new Client([ 'timeout' => 30, //время ожидания ответа 30 секунд 'connect_timeout' => 30, ]); $start = microtime(true); try { $response = $client->request('HEAD', $url); $httpCode = $response->getStatusCode(); } catch (RequestException $e) { $httpCode = $e->getCode() ?: 0; } catch (ConnectException $e) { $httpCode = 0; } $totalTime = microtime(true) - $start; return [ 'httpCode' => $httpCode, 'responseTime' => $totalTime, ]; } function sendTelegramNotification($token, $chatId, $message) { $bot = new BotApi($token); $bot->sendMessage($chatId, $message); } $telegramToken = 'ваш телеграм токен'; $telegramChatId = 'id чата телеграмм'; $sites = [ 'https://example.ru', 'https://google.com', //ваш список сайтов ]; foreach ($sites as $site) { $result = checkSite($site); $httpCode = $result['httpCode']; $responseTime = $result['responseTime']; //если код ответа отличается от успешного (200) или время ответа больше 30 секунд посылаем уведомление в телеграмм чат if ($httpCode != 200 || $responseTime > 30) { $message = "❗ Проблема с сайтом: $site\n"; $message .= "HTTP-код: $httpCode\n"; $message .= sprintf("Время ответа: %.2f секунд\n", $responseTime); sendTelegramNotification($telegramToken, $telegramChatId, $message); } else { echo "✅ Сайт $site работает нормально (HTTP $httpCode, время ответа: " . sprintf("%.2f", $responseTime) . " секунд).\n"; } }
Шаг 3. Настраиваем задачу cron (команда в консоли crontab -e) чтобы ваш скрипт запускался, к примеру, раз в 3 минуты
*/3 * * * * php site_health_checker.php
Готово! Теперь в случае неполадок вы будете получать подобные сообщения в свой телеграмм-чат
❗ Проблема с сайтом: https://example.ru