
Вводные: пинги живые, а интернета как будто нет
Две недели подряд ловил одинаковую картину: «интернета нет», а пинги бодрые. Браузер — унылый, мессенджеры — кое-как, игры и апдейты — рандом. Где-то пробивалось, где-то всё падало разом, будто кто-то водит шторку по списку доменов. Пропадали точечно — кептив-порталы, DoT, игровые логины, AI и облака. Типичный «фильтр-рондо». Пока включишь голову и гонишь connect-check руками — волна уже ушла, журнал пустой, виноватых нет.
Разовые прогоны хороши как «температура прямо сейчас», но бессильны против турбулентности. Мне нужна была история. Причём не в виде личных записей «кажется, около двух ночи падал OAuth у BNET и тормозил Steam CM», а нормальная хронология: кто упал, во сколько и сколько длилось.
Сел и перевёл connect-check в постоянный мониторинг на Uptime Kuma с публичной статус-страницей. Хотел, чтобы и самому видеть, и друзьям дать «смотри сюда» вместо десяти скриншотов.
Как делал: хроника работ
1) База: список ресурсов из resources.conf
У меня уже был аккуратный список ресурсов для connect-check — группами: РФ-сервисы, банки, зарубежные платформы, игры (HTTPS и отдельные портовые пробы), инфраструктура (облака/IX), обновления систем и пакетных менеджеров, AI/LLM. Его и взял за основу. В терминах Kuma это — канарейки: маленькие, но громкие.
2) Площадка: Uptime Kuma в контейнере на зарубежном VPS
Поднял Uptime Kuma в Docker: образ louislam/uptime-kuma:2. Спереди — Caddy, чтобы не думать про сертификаты: авто-TLS и редиректы. Корень сайта уехал на /status/netscan, чтобы не путать гостей и себя: открыл — сразу видишь общее состояние.
3) Импорт: Socket.IO API вместо REST
У Kuma нет REST, у неё Socket.IO. Написал небольшой импортёр под свой resources.conf: пробегает по секциям, создаёт мониторы, присваивает теги по группам, задаёт параметры:
– интервал 120 секунд (две минуты);
– timeout 45 секунд;
– HTTP и TCP по типу цели;
– расширенные HTTP-коды успеха: не только 200, но и 400/429/500/503 в ряде точек — чтобы увидеть «жив ответ сервера» вместо ложной тревоги от временного 500;
– ignoreTls там, где встречаются self-signed у банков/внутренних шлюзов;
– expected_block/пауза для платформ, где блок-страницы и редиректы — это норма (YouTube, Meta, Telegram, Discord), чтобы не маячили фальшивые «зелёные» от их капч и заглушек.
Часть госсайтов принудительно гоню на HTTP: у ряда из них :443 формально «жив», но по сути мёртв, а реальный сервис отдают по 80-му.
4) Публичная статус-страница: /status/netscan
Собрал страницу через addStatusPage и saveStatusPage. Имя: «Netscan — доступность ресурсов». Описание: «Публичная статистика проверок ресурсов (netscan / ConnectCheck). Интервал ~2 мин.» Поставил автообновление на 60 секунд, добавил подпись: «Источник списков: netscan resources.conf». Без логина, только статусы. Каждая секция из resources.conf стала группой на странице.
5) Алерты в Telegram
Без этого мониторинг — просто музей графиков. Подключил Telegram-уведомления: падение — пилик, восстановление — тоже пилик. Волну фильтрации видно не только на дашборде: телефон сам шепчет «что-то с банками» или «просели AI-шлюзы».
6) Тонкая настройка под точку проверки
Важно: все проверки идут С зарубежного VPS. Это картина «с этой точки». Для «как видит абонент в РФ» я оставил локальный connect-check — сравниваем две линии. Где расхождение — там и ответ: фильтрует дорога в/из страны или локальные сети.
Что получилось: живая, публичная картина сети
На странице /status/netscan сейчас 346 мониторов, разбитых на 11 групп. HTTP/HTTPS и TCP-пробы примерно в пропорции 228 к 118. Интервал ~2 минуты — это около 720 проверок в сутки на каждый монитор. Получается плотная, ритмичная лента событий. Если кто-то «присел» даже на 5–10 минут — видно.

Группы и состав
1) RU popular — 89
Государственные и популярные сервисы: Госуслуги, Президент/Правительство/Госдума, Яндекс/VK/OK/Mail/Дзен, медиа (Rutube, IVI, Okko, Кинопоиск, РБК, ТАСС, РИА, Известия, Ведомости), маркетплейсы (Ozon, Wildberries, Avito, HH), транспорт (РЖД, Туту, 2ГИС), операторы (МТС, МегаФон, Билайн, t2, Ростелеком), ритейл и прочее.
2) Banks — 17
Сбербанк, СберБанк Онлайн, Т-Банк×2, ВТБ, Альфа, Газпромбанк, РСХБ, Совкомбанк, МТС Банк, ПСБ, Райффайзен, Росбанк, плюс Bitrix24/Zoom (деловые сервисы в контексте бэкофиса), DNS Shop и ЦИАН — маркеры «жизни вокруг платежей».
3) Significant — 15
Большие публичные платформы: Google/Gmail/Play, App Store, Microsoft/Teams, YouTube, Instagram, Facebook, X, Discord, Telegram, WhatsApp, Wikipedia.
4) Video — 6
IVI, Okko, Rutube, VK Видео, Кинопоиск, Яндекс Видео.
5) Games HTTPS — 44
Battle.net/Blizzard/BNET login, Steam CDN (Dota/CS2), Epic×4, Riot, Ubisoft×2, Xbox, PSN×3, Nintendo, EA, Roblox×3, Minecraft, GOG, VK Play, War Thunder, Мир танков×2, Мир кораблей, Lesta, Tarkov, Genshin/HoYoverse×4, Twitch×3, Kick×3, loot.farm×2.
6) Games TCP — 66
Портовые пробы и узлы сессий: Battle.net HTTPS/account/OAuth/EU/US/version/download, BNET login :1119 EU/US/KR, CDN Akamai, Steam CM, Epic :443, GOG, Faceit, Xbox Live, PSN и т.д. Это те точки, где «логин не проходит» и «матчмейкинг крутится вечность».
7) Infra HTTPS — 12
Служебные веб-интерфейсы и точки проверки инфраструктуры.
8) Infra TCP — 26
Облака и CDN на портах: AWS S3 EU-North, Azure×4, Cloudflare×3, DigitalOcean×2, Hetzner×2, OVH×3, Selectel×6, GitHub×3. Хорошая лакмусовая бумажка для «облако целиком просело» против «упал только чей-то фронт».
9) Geo / IX — 10
DE-CIX, AMS-IX, LINX, DATAIX, Eurasia Peering, HE Looking Glass, Selectel speed. Тут и латентность видна, и «зевки» обменных узлов.
10) Updates — 35
Обновления всего, чем живёт домашняя инфраструктура: Debian/Ubuntu/Arch/Fedora/Kali/Alma/Rocky/openSUSE, Alpine, Docker Hub×2, PyPI/npm/crates/Maven/NuGet, Homebrew, Flathub, Snapcraft, Windows Update/Winget/VS Code, Chrome Omaha, Apple mesu/configuration/gdmf, Mozilla, Microsoft download CDN, Yandex mirror×2. Когда это краснеет — админ страдает.
11) AI / LLM — 26
OpenAI/ChatGPT/API, Anthropic×3, Cursor×2, Gemini×3, Grok/xAI×3, DeepSeek×2, Mistral×2, Hugging Face, Groq, Together, Perplexity, Poe, Copilot, GigaChat, YandexGPT/Алиса. Если тут краснеет пачкой — это не «случайно лёг таб», это волна по AI.
Поведение и «волны»
– Интервал 2 минуты даёт ~720 точек в сутки на каждый монитор. Любая точечная фильтрация больше пары минут засвечивается на дашборде — не через день, а почти сразу.
– Вчерашняя волна 28.07 по банкам РФ в такой конфигурации выглядела бы как красные карточки в группе Banks в реальном времени. Алерт в Telegram, потом спокойная зелень, а в истории — чёткий коридор времени для разбирательства.
– В группах Games TCP хорошо видно, когда «ломит логин»: краснеют именно :1119 у BNET или CM-узлы Steam, при этом витрина магазинов по HTTPS — зелёная. Можно сразу говорить пользователю: «играть — да, логиниться — нет».
– В Infra TCP и Geo/IX ловятся скачки латентности и мимолётные недоступности на уровне облаков/обменников. Если одновременно краснеют Cloudflare и пара IX — это уже сетевое, а не «у сервиса рука дрогнула».
– В Updates — отдельная боль. Когда PyPI/npm и Docker Hub дружно уходят в «серое», любые CI/CD и домашние апдейты превращаются в квест.
Технические детали, чтобы всё честно
– Контейнер: louislam/uptime-kuma:2.
– Перед ним Caddy с авто-TLS. Корень сайта редиректит на /status/netscan.
– Импорт мониторов через Socket.IO API: создаю monitors с тегами по секциям, интервал 120с, timeout 45с, тип HTTP/TCP по ресурсу.
– Публичная страница собрана addStatusPage + saveStatusPage: группы совпадают с секциями resources.conf.
– Страница автообновляется каждые 60 секунд. Внизу подпись: «Источник списков: netscan resources.conf».
– Подстройка под реальные условия:
– гос-ресурсы — чаще HTTP; :443 иногда «ждёт лучшей жизни»;
– банки — ignoreTls для мест с самоподписанными цепочками;
– расширенные acceptedstatuscodes (400/429/500/503) там, где сам факт ответа важнее «строгой 200»;
– для YouTube/Meta/Telegram/Discord — пауза и expectedblock, чтобы не считать заглушки «здоровьем».
– Проверки идут с зарубежного VPS — это важно для интерпретации. Для российского абонента картинка может отличаться: держу локальный connect-check как второй взгляд с земли.
– Алерты — в Telegram. Этого хватает для «вскипает чайник — посмотрел — понятно».
Живые цифры
– 346 мониторов в 11 группах: примерно 228 HTTP и 118 TCP.
– Интервал ~2 минуты — около 720 проверок/сутки на каждый монитор.
– Суммарно это сотни тысяч проверок в день. Хватает, чтобы увидеть и «пульс» сервисов, и редкие, но показательные «провалы».
– Публикация статуса: «Netscan — доступность ресурсов» по пути /status/netscan. Описание на странице: «Публичная статистика проверок ресурсов (netscan / ConnectCheck). Интервал ~2 мин.» Автообновление — 60 секунд.
Что это даёт в быту
– Когда «интернета нет» при живых пингах — захожу на /status/netscan и сразу вижу, кого именно «подстригли»: кептивы, банки, игровые логины, AI, облака, репозитории обновлений.
– Можно аргументированно разговаривать с поддержкой: «в 13:42–13:58 пачкой шли ошибки на PSN и Xbox Live, при этом Cloudflare и IX — зелёные, проблема, похоже, на маршруте до конкретной AS».
– Для своих — одна ссылка вместо поэмы в мессенджере. Для себя — история для ретроспективы и автоматические алерты, а не «кажется, это было позавчера».
– Для лабы — набор «канареек» по всем категориям. Если зеленеют не там, где надо, или внезапно краснеет банк/облако/AI — собираюсь быстрее.
Грабли и почему именно так
– Разовый connect-check — отличная диагностика «прямо сейчас», но он не ловит всплески и не даёт истории. А фильтрация сегодня — это волны. Они приходят и уходят быстрее, чем ты успеваешь сделать первый скриншот.
– Почему Uptime Kuma? Простая, самодостаточная, контейнером завернул, Socket.IO — и поехали. Плюс приятная публичная страница, которую не стыдно показывать.
– Зачем расширенные коды и ignoreTls? Чтобы не путать «сервер отвечает, но ругается» с «канал физически закрыт». Для сетевой картины важнее факт досягаемости, чем идеальный HTTP-ритуал.
– Почему 2 минуты? Компромисс: волна видна в течение минут, а не дней, и при этом не жрёт VPS до костей. Меньше интервал — шумнее и дороже, больше — зияют дыры.
Дальше по плану
– Вторую точку мониторинга хочу запустить из домашней сети: сравнивать «зарубежный взгляд» и «домашний абонент». Либо второй зарубежный VPS — для географии.
– Добавить несколько UDP-мониторов для игр (где это адекватно), но аккуратно: Kuma тут не всесилен.
– Свести «красные всплески» к недельным сводкам: какие группы страдали чаще, в какие часы. Это полезно не только для цифровой гигиены, но и для планирования обновлений.
Выводы
– Разовый прогон — фотоснимок. Постоянный мониторинг — хроника с таймкодами и будильником.
– При «интернета нет» и живых пингах публичная /status/netscan даёт конкретику: фильтруются ли кептивы, падают ли банки, захлебнулся ли OAuth у игр, дергают ли AI/облака или задушили репозитории апдейтов.
– Волны фильтрации становятся видны сразу — на шкале минут, а не «вчера где-то в районе вечера».
– Алерты в Telegram снимают главную боль: не надо сидеть и таращиться в зелёные кирпичики — телефон сам позовёт, когда надо вмешаться.
❓ Вопрос
Какие канарейки добавить в netscan, чтобы ловить «нет интернета при живых пингах» точнее? Отдельные проверки DoT/DoH/QUIC, больше игровых узлов, UDP-пробы, больше зеркал обновлений — или, наоборот, реже, но точнее? И из какой точки мира/сети вы бы хотели вторую (третью) перспективу?
#monitoring