- PVSM.RU - https://www.pvsm.ru -
Представьте: ваш сервис должен работать безотказно 24/7, быть доступным из любой точки мира, а любые проблемы нужно обнаруживать мгновенно. Как убедиться, что сайт одинаково быстро работает в Нью-Йорке, Токио и Москве? Как отследить проблемы маршрутизации или цензуры в разных странах?
Стандартные системы аналитики могут помочь с базовым мониторингом доступности, но что если вам нужно больше? Что если нет возможности установить счетчик или вас не устраивает способ доставки уведомлений?
Globalping [1] — это проект команды jsDelivr [2], экспертов с 10-летним опытом в сфере CDN. Они предоставляют бесплатное API для проведения сетевых тестов (ping, traceroute, dns, mtr, http) из точек по всему миру. На момент написания статьи сеть включает:
82 страны
338 городов
1103 узла
Особенности проекта:
Открытый исходный код, ознакомиться можно здесь [3]
Активное сообщество
Возможность добавить собственный узел через Docker или ARM-устройство
Система кредитов для расширенного использования(заработок на своем узле)
API Globalping [4] предоставляет 4 основных метода:
POST /v1/measurements — создание теста с указанными параметрами
GET /v1/measurements/{id} — получение результатов по ID
GET /v1/probes — список доступных узлов с метаданными
GET /v1/limits — информация о текущих лимитах
Базовое использование API не требует аутентификации, но через дашбоард [5] можно выпустить токен для расширенного доступа.

При разработке были поставлены следующие цели:
Максимальная гибкость тестов
- Прямая передача JSON-параметров в API
- Никаких лишних абстракций
Регулярное выполнение
- Настройка через cron-выражения
- Мгновенный запуск при старте
Надежные уведомления
- Интеграция с Telegram
- Мгновенная доставка
- Доступность с любого устройства
Подробное логирование
- Сохранение всех результатов
- Различные уровни детализации
Открытый исходный код
- Возможность кастомизации
- Добавление новых способов уведомлений
Проект реализован на 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 включает три ключевых метода:
loadMeasurements — загрузка тестов из файловой системы
runMeasurement — выполнение теста через globalping-ts(typescript обертка API доступная в npm)
notify — обработка и рассылка уведомлений
Система покрывает различные типы тестов:
ping: проверяется количество потерянных пакетов и среднее время приема-передачи RTT(round-trip time);
traceroute: вычисляем среднее RTT на основе данных по каждому прыжку(hop) и происходит тоже самое, что и в типе ping;
dns: тут ситуация немного сложнее, сам тип делится на 2 подтипа: простой днс тест и с включенной трассировкой. В обоих проверяется среднее время жизни TTL(time to live);
mtr: проверяется количество потерянных пакетов, среднее время приема-передачи RTT и среднее число нежелательных фазовых или частотных отклонений передаваемого сигнала(jitter);
http: проверяются различные тайминги(они перечисляются в документации API [6]), наличие и валидность 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 [7]. Буду рад вашим вопросам и предложениям по улучшению в комментариях!
Автор: wetwipes72
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/nodejs/400681
Ссылки в тексте:
[1] Globalping: https://globalping.io
[2] jsDelivr: https://www.jsdelivr.com/
[3] здесь: https://github.com/jsdelivr/globalping
[4] API Globalping: https://globalping.io/docs/api.globalping.io
[5] дашбоард: https://dash.globalping.io/
[6] документации API: https://globalping.io/docs/api.globalping.io#get-/v1/measurements/-id-
[7] Github: https://github.com/eyepokes/uptime-wachter
[8] Источник: https://habr.com/ru/articles/853774/?utm_source=habrahabr&utm_medium=rss&utm_campaign=853774
Нажмите здесь для печати.