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

HTTP-код: 503

Время ответа: 45.23 секунд