目录

🌐 Система мониторинга сайтов

GitHub Actions Bash Telegram Google Apps Script

Автоматизированная система мониторинга доступности сайтов с уведомлениями в Telegram и стабильным расписанием проверок через Google Apps Script.

Содержание

Обзор

Система предназначена для регулярного мониторинга доступности веб-сайтов. При обнаружении недоступности сайта система отправляет уведомление в Telegram, а при восстановлении доступа также отправляет соответствующее уведомление.

Особенностью системы является использование Google Apps Script для обеспечения стабильного расписания проверок, что решает проблему задержек при использовании встроенного планировщика GitHub Actions.

Функциональность

  • Мониторинг нескольких сайтов — одновременная проверка нескольких доменов
  • Уведомления в Telegram — мгновенные оповещения о недоступности и восстановлении сайтов
  • Стабильное расписание — точные интервалы проверок благодаря Google Apps Script
  • Гибкая настройка — легкое добавление и удаление сайтов через переменные GitHub
  • Ведение логов — подробное логирование всех проверок и их результатов
  • Автоматическая очистка — удаление старых запусков для экономии места
  • Без серверная архитектура — работает полностью на GitHub Actions

Архитектура

Система состоит из следующих компонентов:

  1. GitHub Actions Workflow — выполняет проверку доступности сайтов
  2. Bash-скрипт — основная логика проверки сайтов и отправки уведомлений
  3. Google Apps Script — обеспечивает стабильное расписание запусков
  4. Telegram Bot — канал для отправки уведомлений

Процесс работы:

  1. Google Apps Script запускает GitHub Actions Workflow по расписанию
  2. Workflow запускает bash-скрипт для проверки сайтов
  3. Скрипт проверяет доступность каждого сайта и сравнивает с предыдущим статусом
  4. При изменении статуса отправляется уведомление в Telegram
  5. Результаты проверок сохраняются в логах
  6. Workflow автоматически очищает старые запуски

Настройка

Настройка GitHub Repository

  1. Клонируйте репозиторий:

    git clone https://github.com/ваше_имя/check-sites.git
    cd check-sites
  2. Настройте переменные репозитория:

    • Перейдите в настройки репозитория: Settings → Secrets and variables → Actions
    • На вкладке “Secrets” добавьте:
      • TELEGRAM_BOT_TOKEN — токен вашего Telegram бота
      • CHAT_ID — ID чата для отправки уведомлений
      • ACTIONS_DELETE_TOKEN — Personal Access Token с правами repo и workflow
    • На вкладке “Variables” добавьте:
      • SITES — список доменов через пробел (например: example.com site2.org site3.net)

Настройка Google Apps Script

  1. Создайте новый проект на script.google.com

  2. Вставьте следующий код:

    function triggerGitHubWorkflow() {
      // Настройки вашего репозитория
      var owner = "ваше_имя_пользователя_github";
      var repo = "check-sites";
      var workflow_file = "monitor.yml";
      var branch = "main";
      
      // URL для запуска workflow
      var url = "https://api.github.com/repos/" + owner + "/" + repo + "/actions/workflows/" + workflow_file + "/dispatches";
      
      // Настройки запроса
      var options = {
        "method": "POST",
        "headers": {
          "Authorization": "token ваш_github_token",
          "Accept": "application/vnd.github.v3+json"
        },
        "payload": JSON.stringify({"ref": branch}),
        "muteHttpExceptions": true
      };
      
      // Выполняем запрос
      var response = UrlFetchApp.fetch(url, options);
      
      // Логируем результат
      Logger.log("Статус ответа: " + response.getResponseCode());
      if (response.getResponseCode() == 204) {
        Logger.log("Workflow успешно запущен!");
      } else {
        Logger.log("Ошибка запуска workflow!");
      }
    }
  3. Настройте триггер:

    • Нажмите на значок часов в левой панели
    • Добавьте новый триггер:
      • Выберите функцию: triggerGitHubWorkflow
      • Выберите событие: “Временной триггер”
      • Выберите тип триггера: “Минутный таймер”
      • Выберите интервал: “Каждые 5 минут”
    • Сохраните триггер

Настройка Telegram бота

  1. Создайте нового бота через @BotFather
  2. Получите токен бота и сохраните его в секретах GitHub
  3. Определите ID чата:
    • Добавьте бота в чат
    • Отправьте сообщение в чат
    • Перейдите по URL: https://api.telegram.org/bot<ваш_токен>/getUpdates
    • Найдите значение chat.id в ответе
  4. Сохраните ID чата в секретах GitHub

Использование

После настройки система будет автоматически проверять доступность указанных сайтов каждые 5 минут.

Добавление новых сайтов для мониторинга

Чтобы добавить новые сайты для мониторинга:

  1. Перейдите в настройки репозитория: Settings → Secrets and variables → Actions
  2. На вкладке “Variables” найдите переменную SITES
  3. Отредактируйте значение, добавив новые домены через пробел
  4. Сохраните изменения

Ручной запуск проверки

Вы можете запустить проверку вручную:

  1. Перейдите на вкладку Actions в вашем репозитории
  2. Выберите workflow “Server Monitor”
  3. Нажмите “Run workflow”
  4. Подтвердите запуск

Логи и мониторинг

Система ведет два основных лог-файла:

  1. site_monitor.log — подробный лог всех проверок и действий
  2. site_status.log — текущий статус каждого сайта (UP/DOWN)

Логи автоматически обновляются в репозитории после каждой проверки.

Устранение неполадок

Проверка не запускается по расписанию

  1. Проверьте логи Google Apps Script: откройте проект → View → Logs
  2. Убедитесь, что GitHub токен действителен и имеет необходимые права
  3. Проверьте, что триггер активен: раздел “Триггеры” в Google Apps Script

Уведомления не приходят в Telegram

  1. Проверьте правильность токена бота в секретах GitHub
  2. Убедитесь, что бот добавлен в чат и имеет права на отправку сообщений
  3. Проверьте правильность ID чата в секретах GitHub

Ошибки в логах

Если в логах появляются ошибки:

  1. Проверьте доступность API GitHub из Google Apps Script
  2. Убедитесь, что формат переменной SITES корректен (домены через пробел)
  3. Проверьте права доступа токена GitHub

Лицензия

MIT

关于
24.6 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号