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