Карта сервисов и страница сервиса

Карта сервисов показывает, как устроен стек на самом деле: какие сервисы вызывают друг друга, в какие базы данных, брокеры сообщений и внешние API они ходят и откуда приходят запросы. Карта строится сама по собранным трассам OpenTelemetry — рисовать и настраивать ничего не нужно.

Карта находится на вкладке «Трассировка» стека, над обзором и списком трасс. Для каждого сервиса есть ещё и своя страница: время ответа, связи, контейнеры, события и поиск причины сбоя.

Как строится карта сервисов

Карта собирается из трасс за выбранный на вкладке период — 1 ч, 6 ч, 24 ч или 7 дн:

Связь По чему определяется
сервис → сервис по передаче контекста трассы: заголовок traceparent ставит HTTP- или gRPC-инструментация клиента
сервис → база данных по атрибутам db.system и server.address
сервис → брокер сообщений по атрибуту messaging.system
сервис → внешний API по peer.service, server.address или адресу клиентского спана
сервис → сервис без трассировки по сетевым соединениям, которые видит агент сервера (см. ниже)

Если вместо стрелки к вашему сервису на карте виден внешний адрес, значит у вызываемого сервиса нет трассировки или контекст не передаётся.

Узел карты — это сервис стека. При наведении видно, какой контейнер стоит за узлом. С агентом 0.12 и новее Наблюдатель узнаёт контейнер-отправитель трасс по сетевому адресу, поэтому связь точная, даже если OTEL_SERVICE_NAME не совпадает с именем контейнера (auth и auth-api). Со старым агентом связь ищется по имени. Базы и сервисы стека, к которым обращаются по адресу (например, ClickHouse по HTTP), показываются как узлы стека, а не как внешние API.

Что значат линии, цвета и значки

Карта читается слева направо: входящие запросы → сервисы → базы данных и внешние адреса.

Узлы. Тип узла подписан под его названием:

  • Сервис — ваш сервис с трассировкой. Под названием — частота запросов и p95.
  • База данных и Брокер сообщений — куда ходят ваши сервисы.
  • Внешний адрес — в пунктирной рамке: у этого адреса нет своих трасс.
  • Входящие запросы — запросы извне в стек.
  • HTTP-проверка — проверка сайта Наблюдателя, если она приходит в сервис с трассировкой.

Цвета сервисов нужны только чтобы их различать. Красного и жёлтого среди них нет — эти цвета заняты под ошибки.

Здоровье узла. Кольцо вокруг значка показывает долю ошибок входящих запросов: зелёная часть — успешные, красная — ошибки. Рамка узла становится жёлтой, если ошибок 1% и больше, и красной — от 5%.

Линии. Чем толще линия, тем чаще вызовы. По линии бегут точки в сторону вызова, красные точки — ошибки, и их тем больше, чем выше доля ошибок. Если сервисы вызывают друг друга по кругу, обратная связь рисуется дугой снизу.

Подсказка при наведении на узел показывает контейнер, метрики, которые отдаёт этот сервис (свои метрики), потоки событий, которые он пишет (события и логи), число вызовов и их частоту, ошибки и p95. Связи наведённого узла подсвечиваются, остальное приглушается. Выбранный в общей панели сервис подсвечивается так же.

Клик по узлу показывает его трассы в списке ниже: по сервису — трассы сервиса, по базе или брокеру — трассы с этими запросами.

Управление. Карту можно двигать мышью. Масштаб — Ctrl + колесо мыши, щипок на тачпаде или кнопки в углу карты; там же кнопки «Вписать карту в окно» и «Развернуть окно карты» почти на весь экран.

Связи по сети: сервисы без OpenTelemetry

Базы, очереди и сервисы без SDK OpenTelemetry тоже могут появиться на карте — по сетевым соединениям. Агент сервера видит, какие контейнеры и поды на его машине с кем соединяются, и Наблюдатель рисует такие связи пунктирной линией без бегущих точек, а узел — приглушённым, с подписью «без трасс, по сети». В подсказке узла написано «Трассы: нет — связь видна по сетевым соединениям».

Для этого нужны агент сервера 0.14 или новее на машине, где работает стек, и агент стека 0.14 или новее; стек должен быть связан со своим сервером (см. мониторинг сервера). Содержимое трафика агент не читает — только адреса, порты и число соединений. Поэтому у таких связей нет времени ответа и ошибок: на странице сервиса они подписаны «по сети, без трасс» с портом и числом соединений.

Туман: сервисы без трассировки

Под картой перечислены сервисы стека, которых на карте нет: у них нет трассировки, сервисы с трассировкой их не вызывают и связь по сети тоже не видна. Они нарисованы «туманом» — пунктиром и приглушённо. Их запросы и связи Наблюдатель не видит.

Подключите к ним OpenTelemetry в первую очередь, если они принимают HTTP-запросы или читают очереди, — тогда на карте появятся их связи. Базам данных и брокерам трассировка не нужна: их видно по вызовам ваших сервисов, а состояние самих баз удобнее отдавать своими метриками.

Тот же туман есть и на карте проекта — там он показывает стеки без агента, стеки без сервера и сервисы без трасс во всём проекте.

Если за период нет ни одного вызова между сервисами, к базам или внешним API, вместо карты будет надпись об этом — проверьте период и что трассы приходят.

Страница сервиса

Чтобы открыть страницу сервиса, выберите его в общей панели вкладки «Трассировка» и нажмите «Страница сервиса →». На странице:

  • Шапка — имя сервиса, контейнер стека за ним, серверы, на которых он работает, и потоки событий, которые пишет сервис (клик открывает поток). Период — 1 ч, 6 ч или 24 ч.
  • Цель сервиса — см. ниже.
  • Плитки обзора — входящие запросы, время ответа p95, ошибки и запросы к базе с изменением к прошлому периоду.
  • Карта сервисов с этим сервисом в центре внимания.
  • «Вызывают сервис» и «Сервис вызывает» — кто ходит в сервис и куда ходит он сам: частота, доля ошибок и p95 каждой связи. Входящие запросы извне и HTTP-проверки тоже видны здесь.
  • Контейнеры сервиса — работает ли каждый, на каком узле, CPU, память, число перезапусков и на каком диске сервера лежат его тома.
  • Операции сервиса — как на вкладке «Трассировка».
  • События сервиса за сутки — аномалии, выкатки, падения, нездоровые контейнеры, перезапуски, заполненный диск, OOM и перезагрузки сервера, ошибки.

Цель сервиса: время ответа и доля ошибок

У каждого сервиса есть цель: p95 времени ответа за минуту и допустимая доля ошибок, например «p95 минуты ≤ 300 мс · ошибок ≤ 1%». Наблюдатель выводит её из истории запросов сервиса сам — цель появляется, когда наберутся сутки истории. Кнопкой «Задать» или «Изменить» можно указать свою цель, а «Вернуть автоматическую» — вернуться к выведенной.

В карточке «Цель сервиса» видно, как сервис держал цель за сутки и за неделю: какая доля минут была в цели по времени ответа, какая доля ошибок и сколько осталось запаса. Запас — 1% плохих минут за 30 дней. Если запас сейчас сгорает быстрее нормы, карточка это показывает; иначе пишет «Сейчас в цели».

Уведомление «Цель сервиса нарушена» приходит, только когда запас сгорает быстро — в 14,4 раза быстрее нормы за час или в 6 раз за 6 часов. Короткие всплески его не вызывают, а долгое тихое ухудшение ловится. Аномалии сервиса — «стал медленнее обычного», «чаще ошибается» — остаются в ленте событий и помогают найти причину, но в Telegram и на почту по умолчанию не приходят. Подробнее — в статье аномалии.

Кнопка «Проверить сейчас»: поиск причины

Кнопка «Проверить сейчас» на странице сервиса запускает расследование. Наблюдатель идёт от сервиса вниз по его зависимостям — сервисам, базам, внешним адресам, их контейнерам, дискам и серверам — и собирает улики за последний час: замедления и ошибки, в том числе запросов к базе, выкатки, падения и нехватку памяти контейнеров, заполненный диск, перезагрузки серверов. Проверяются и сервисы, связанные только по сети, например база, которую сервис вызывает напрямую, а также ответы 5xx из журналов запросов сервиса, если они приходят потоком с trace_id.

В блоке «Расследование» видно:

  • цепочку от симптома к вероятной причине — например, сервис медленный, потому что база не проходит проверку здоровья; путь причины подсвечивается на карте;
  • другие версии причины, если их несколько;
  • все улики с временем начала и ссылками;
  • какие сервисы заденет: те, кто вызывает этот сервис.

Если причина не нашлась, так и будет написано. Когда сервис нарушает цель или начинает тормозить и ошибаться, Наблюдатель проводит такое расследование автоматически и пишет причину в событие и уведомление — см. аномалии.

Карту и связи можно разбирать и с ИИ-ассистентом: например, «кто вызывает сервис заказов и где растут ошибки». Ассистент видит, какой контейнер стоит за узлом карты, и сразу проверяет его память, перезапуски и логи.

Что дальше

Попробуйте Наблюдатель

Первый сервер или стек подключается за пару минут. Бесплатно в раннем доступе.

Создать аккаунт

Нашли неточность или не хватает ответа? Напишите в поддержку