Аптайм вахтер: мониторинг веб-сервисов с помощью Globalping и уведомлениями в Telegram

от автора

это не тащ мойор следит за вами, а вахтер бдит и уведомляет

это не тащ мойор следит за вами, а вахтер бдит и уведомляет

Представьте: ваш сервис должен работать безотказно 24/7, быть доступным из любой точки мира, а любые проблемы нужно обнаруживать мгновенно. Как убедиться, что сайт одинаково быстро работает в Нью-Йорке, Токио и Москве? Как отследить проблемы маршрутизации или цензуры в разных странах?

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

Что такое Globalping

Globalping — это проект команды jsDelivr, экспертов с 10-летним опытом в сфере CDN. Они предоставляют бесплатное API для проведения сетевых тестов (ping, traceroute, dns, mtr, http) из точек по всему миру. На момент написания статьи сеть включает:

  • 82 страны

  • 338 городов

  • 1103 узла

Особенности проекта:

  • Открытый исходный код, ознакомиться можно здесь

  • Активное сообщество

  • Возможность добавить собственный узел через Docker или ARM-устройство

  • Система кредитов для расширенного использования(заработок на своем узле)

Так выглядит ARM-устройство

Так выглядит ARM-устройство

API: просто и эффективно

API Globalping предоставляет 4 основных метода:

  1. POST /v1/measurements — создание теста с указанными параметрами

  2. GET /v1/measurements/{id} — получение результатов по ID

  3. GET /v1/probes — список доступных узлов с метаданными

  4. GET /v1/limits — информация о текущих лимитах

Базовое использование API не требует аутентификации, но через дашбоард можно выпустить токен для расширенного доступа.

Uptime Wachter: создаем систему мониторинга

При разработке были поставлены следующие цели:

  1. Максимальная гибкость тестов

    — Прямая передача JSON-параметров в API

    — Никаких лишних абстракций

  1. Регулярное выполнение

    — Настройка через cron-выражения

    — Мгновенный запуск при старте

  1. Надежные уведомления

    — Интеграция с Telegram

    — Мгновенная доставка

    — Доступность с любого устройства

  1. Подробное логирование

    — Сохранение всех результатов

    — Различные уровни детализации

  1. Открытый исходный код

    — Возможность кастомизации

    — Добавление новых способов уведомлений

Технические детали

Проект реализован на TypeScript и требует Node.js 18+. Конфигурация следующая:

TELEGRAM_TOKEN= # Токен бота  NOTIFICATION_LIST= # Список ID получателей, можно указать групповой чат  LOG_LEVEL= # Уровень логирования (0-3)  NOTIFICATION_LEVEL= # Уровень уведомлений (0-3)  TIMEZONE= # Часовой пояс  MEASUREMENTS_PATH= # Папка для результатов

Про уровни логирования и уведомлений:

  • 3 — только ошибки

  • 2 — ошибки и предупреждения

  • 1 — ошибки, предупреждения и информация о выполнении

  • 0 — все выше перечисленное

Основной класс Wachter включает три ключевых метода:

  1. loadMeasurements — загрузка тестов из файловой системы

  2. runMeasurement — выполнение теста через globalping-ts(typescript обертка API доступная в npm)

  3. notify — обработка и рассылка уведомлений

Система покрывает различные типы тестов:

  • ping: проверяется количество потерянных пакетов и среднее время приема-передачи RTT(round-trip time);

  • traceroute: вычисляем среднее RTT на основе данных по каждому прыжку(hop) и происходит тоже самое, что и в типе ping;

  • dns: тут ситуация немного сложнее, сам тип делится на 2 подтипа: простой днс тест и с включенной трассировкой. В обоих проверяется среднее время жизни TTL(time to live);

  • mtr: проверяется количество потерянных пакетов, среднее время приема-передачи RTT и среднее число нежелательных фазовых или частотных отклонений передаваемого сигнала(jitter);

  • http: проверяются различные тайминги(они перечисляются в документации API), наличие и валидность TLS-сертификата, а также уведомления приходят каждую итерацию теста об окончании сертификата или приближении этой даты.

    Сами тесты хранятся в папке measurements, добавим какой-нибудь тест, вполне подойдет любой из документации к API, единственное что нам нужно это добавить cronExpression, к примеру */2 * * * *, измерение будет выполняться каждые 2 минуты. Название файла может быть любым, главное сохранить его в формате JSON.
    Получается следующее:

    {     "type": "ping",     "target": "cdn.jsdelivr.net",     "locations": [         {             "country": "DE"         },         {             "country": "PL"         }     ],     "cronExpression": "*/2 * * * *" }

    Теперь можно сделать билд и запустить приложение:

    npm run buildAndGuard

Примерно так выглядят уведомления

Примерно так выглядят уведомления

Итоги

Uptime Wachter — приложение для демонстрации возможностей Globalping API и не более.

Возможно оно будет полезно для команд, которым критично важен постоянный мониторинг сервисов из разных точек мира без развертывания собственной инфраструктуры. Исходный код доступен в Github. Буду рад вашим вопросам и предложениям по улучшению в комментариях!


ссылка на оригинал статьи https://habr.com/ru/articles/853774/


Комментарии

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *