InfraGuard

Обзор сервисов — подобранная доска в реальном времени

Подобранная доска сервисов в реальном времени: оператор сам выбирает сервисы (веб, базы данных, сессии, прокси, Docker) в виде карточек приоритета и наблюдает за ними через шкалу доступности и живые временные ряды.

Обзор — что делает этот экран

Обзор сервисов — первый экран раздела верхнего уровня «Сервисы» (/service), то есть подобранная эксплуатационная доска реального времени для работающих сервисов (демонов). Оператор вручную отбирает интересующие его сервисы и раскладывает их в виде карточек приоритета. Каждая карточка показывает свой набор живых метрик в зависимости от типа, первая (наиболее приоритетная) карточка web/db/session питает шкалу доступности, а нижняя полоса рисует живые временные ряды выбранных карточек.

Ключевые особенности:

Эта доска — не демонстрационный парк: здесь всё построено на реальных данных. Источники метрик — таблицы, которые коллекторы уже наполняют: infr_web_metric, infr_db_metric, infr_redis_metric и infr_service (Каталог).

Когда использовать

Устройство экрана

Верхняя полоса KPI

Сводка по всей организации, рассчитываемая методом realKpi() (обновляется опросом раз в 30 секунд):

KPI Значение Источник
Веб-трафик Суммарный RPS + полоса пропускания по всем зарегистрированным веб-сервисам WebMetricService::kpi(dashboard())
Нагрузка БД Сумма последних сохранённых QPS + общее число соединений по коллекторам access=database DbCollectorService::latest()
Доступность веба Доступность за 24 ч WebProbeService::availabilityOrPassive() (сначала активная проба)
Задержка Средний отклик пробы (мс) то же
Инциденты Инциденты, открытые за последние 7 дней InfrIncident created_at ≥ now-7d

Доступность веба и задержка отдают предпочтение активной синтетической пробе. Пассивные счётчики трафика vts сами по себе неверно диагностируют сбои без трафика, ошибки 5xx, скрытые за 3xx, и сбросы счётчиков, поэтому доска использует результаты реальных HTTP-проб WebProbeService. Если проба ещё не отрабатывала (покрытия нет), выполняется откат к пассивному способу (web24h).

Шкала доступности сервиса

Строится по первой карточке web/db/session в порядке приоритета (если ни одного из этих трёх типов на доске нет, показывается подсказка-заглушка).

Тип карточки Форма шкалы Значение в центре Правило окраски
web кольцо кодов ответа из 4 сегментов REQ (текущий RPS) 2xx=good · 3xx=info · 4xx=warn · 5xx=crit
database дуга насыщения соединений (conn_pct) QPS ≥90 crit · ≥70 warn · иначе good
session дуга доли попаданий в кэш OPS ≥90 good · ≥70 warn · иначе crit

Доска сервисов (сетка карточек)

Выбранные сервисы раскладываются карточками в порядке приоритета. Каждая карточка показывает свой набор KPI в зависимости от типа:

Тип Демон по умолчанию Заголовок (алиас) Основные KPI
web nginx представительный домен задержка · RPS · открытые сессии (активные соединения) · накопленные запросы за 24 ч · доля ошибок
database mysql/mariadb/postgres/mongo алиас коллектора QPS · места (занято/максимум) · насыщение · выполняется · блокировки (среднее время блокировки строки, мс) · всего slow · ожидают
session redis алиас узла OPS · доля попаданий · клиенты (текущие сессии) · ключи · насыщение (использование памяти, %)
proxy software_key/proxy алиас экземпляра зависимости (+N) · задержка · прослушиваемые порты
docker software_key/docker алиас экземпляра зависимости (+N) · задержка · прослушиваемые порты

Сервисы в реальном времени (временной ряд внизу)

Выбранные карточки, у которых есть ряд (web/db/session), рисуются как SVG-спарклайны «область + линия» в сетке из 2 колонок. У каждого графика есть линейка (вертикальные линии сетки и подписи HH:MM для начала, середины и конца), позволяющая читать временную ось. Расположенный сверху переключатель диапазона (1h · 6h · 1d) меняет окно наблюдения (по умолчанию 1h).

Элементы управления в заголовке

Как пользоваться

1) Выберите сервисы

  1. Нажмите [Выбрать сервисы] / [Добавить сервис] в заголовке доски, чтобы открыть модальное окно выбора.
  2. Окно группирует все доступные сервисы по типам (web → database → session → proxy → docker).
  3. Включайте (✓) и выключайте сервисы. Выбор немедленно отражается на доске и сохраняется в localStorage.

Значение по умолчанию при первом визите = автоматически выбирается первый элемент из web, database и session, чтобы шкала доступности заработала сразу. Если это не нужно, снимите отметки в модальном окне.

2) Настройте приоритет

3) Смените временное окно

// Пример запроса POST /service/series
{ "keys": ["web:12", "db:db@blue", "session:blue"], "range": "6h" }

Соглашение о ключах карточек:

web:{infr_web_service.id}
db:{infr_collector.key}      напр. db@blue
session:{node_alias}         напр. blue
proxy:{infr_service.id}
docker:{infr_service.id}

4) Полноэкранная доска обстановки

Источники данных

Тип карточки Построитель Фактические таблицы
web WebMetricService::dashboard() + WebProbeService::overlayStatus() infr_web_metric (счётчики vts) · infr_web_check (активная проба) · infr_web_service
database InfrCollector(access=database) + DbCollectorService::latest()/series() infr_db_metric · infr_collector
session RedisMetricService::dashboard() infr_redis_metric · infr_instance
proxy/docker InfrService(kind IN proxy,container) infr_service · infr_instance
Инциденты KPI — infr_incident (последние 7 дней)

Источники временных рядов:

Токены состояния

Токен Значение
up исправен
degraded деградация
down сбой (реальный отказ подключения или пробы)
pending ожидание (решение отложено, например из-за отставания данных)

Как избегается ложный красный цвет карточки БД — в режиме сбора economy, если сбор ненадолго отстаёт и последняя выборка старше 5 минут, statusOf возвращает down по причине устаревания. С базой данных при этом всё в порядке, но вы увидели бы красную тревогу, поэтому доска понижает устаревший down до pending и оставляет down только для реального отказа подключения (ok=false). Кроме того, исключительно для присутствующего пользователя, который смотрит на доску, при последней выборке старше 45 секунд выполняется единичная точечная выборка через ensureFresh(45) (это no-op без подключения, если планировщик и так ведёт сбор), причём этот сборщик закрывает соединение в блоке finally, чтобы не допустить утечек.

Права доступа

Ключи localStorage:

infr:svcboard:sel:v1        массив ключей выбранных сервисов (порядок = приоритет)
infr:svcboard:h:v1          значения ползунков высоты доски и живых графиков
infr:range:service-overview диапазон нижнего временного ряда (1h/6h/1d)

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

Доска пуста. Воспользуйтесь кнопкой [Добавить сервис] в заголовке, чтобы разместить интересующие вас сервисы. Если доступных сервисов нет вовсе (коллекторы ещё не наполнили данные), группы в окне выбора могут выглядеть пустыми — сначала проверьте регистрацию в разделе Коллекторы и конвейер сбора.

Шкала доступности не появляется. Шкале нужна первая по приоритету карточка web/db/session. Если вы выбрали только proxy/docker, вы увидите подсказку-заглушку. Поместите хотя бы одну карточку web/db/session ближе к началу.

Нижний временной ряд пуст. Ряд есть только у карточек web/db/session; proxy/docker исключены. Кроме того, если в исходной таблице нет данных за выбранное окно (1h/6h/1d), график останется пустым.

Карточка БД красная, хотя с базой всё в порядке. Отставание данных понижается до pending (серый цвет, ожидание). Если состояние остаётся down, это реальный отказ подключения — проверьте экран База данных и состояние коллектора access=database в разделе Коллекторы.

Карточки сохраняются после обновления страницы / на другом ПК выглядят иначе. Выбор и порядок принадлежат localStorage браузера, а не настройке учётной записи на сервере. Они независимы для каждого браузера и устройства.

Мне нужно окно в 5 минут. Текущая реализация предлагает окна 1h · 6h · 1d (по умолчанию 1h). Для более коротких наблюдений используйте специализированные экраны, такие как Серверы или База данных.

Связанные материалы

서비스 개요 — 큐레이션 라이브 보드
서비스 개요 — 큐레이션 라이브 보드