- Distribution mode (always on): когда на тепловой карте нет выделения, для текущей совокупности спанов показывается распределение значений каждого атрибута. Это полезно для выявления доминирующих или необычно редких значений (аномалий по мощности).
- Comparison mode: выделите прямоугольник на тепловой карте, чтобы сравнить спаны внутри него (Selection) со всем, что находится снаружи (Background). Это полезно для выявления отклонений.
- Iterative drill-down: нажмите на любой столбец, чтобы отфильтровать по этому значению (или исключить его). Тепловая карта перерисуется для отфильтрованной совокупности, и вы сможете продолжать сужать выборку, пока причина не станет очевидной.
Предварительные требования
Начало работы
- В раскрывающемся списке Data Source выберите источник, содержащий трассировки. Имена источников могут быть любыми; важно, чтобы источник был настроен с типом Trace. Вкладка Event Deltas включена только для таких источников.
- В разделе Режим анализа нажмите вкладку Event Deltas.
Тепловая карта
- Ось X: время
- Ось Y: числовое значение; по умолчанию это длительность спана в миллисекундах (логарифмическая шкала)
Режим распределения: выбросы по мощности
- Частые значения: какие сервисы, конечные точки, коды состояния или хосты доминируют в вашей совокупности спанов? Часто это помогает выявить один тенант, версию или маршрут, на которые приходится основная часть трафика.
- Редкие значения: значения, которые встречаются, но редко. Код состояния, который появляется лишь в
0.5%спанов, или хост, который едва заметен, могут оказаться самым интересным сигналом. Именно в длинном хвосте скрываются регрессии и проблемные источники.
Режим сравнения: отклонения от нормы
Сценарий использования 1: До и после регрессии
SpanKind, SpanName и ScopeName показывают резкое оранжево-зеленое разделение между медленным Selection и здоровым Background. Если рассматривать их вместе, они дают ясное представление о том, что изменилось в точке перегиба.
Это подходящий вариант, когда вы хотите ответить на вопрос «что изменилось?». Есть и более точный вариант с тем же подходом: когда небольшой узел медленных спанов появляется на фоне в остальном спокойной полосы (короткий всплеск у правого края, кластер в середине стабильного периода), вместо этого обведите небольшим прямоугольником только этот кластер. Форма меняет сам вопрос: вертикальная полоса спрашивает что изменилось во времени, а небольшой сфокусированный прямоугольник — что особенного в этом кластере.
Сценарий 2: медленные и быстрые
Итеративный drill-down
- Filter: оставить только спаны с этим значением
- Exclude: исключить спаны с этим значением
- Copy: скопировать значение в буфер обмена
Агрегированные бакеты Other (N), в которые сворачиваются редкие значения, не кликабельны. Чтобы отфильтровать конкретное значение внутри такого бакета, используйте строку поиска напрямую.
Настройка тепловой карты
| Параметр | По умолчанию | Описание |
|---|---|---|
| Scale | Log | Log подходит для широких диапазонов задержки; Linear лучше для узких, равномерных распределений. |
| Value | (Duration)/1e6 | Любое числовое выражение: размер ответа, частота ошибок, произвольный атрибут span. |
| Count | count() | Агрегация для цвета. Переключите на avg(), sum(), p95() или выражения вроде countDistinct(field). |
- Переключите Scale на Linear, когда диапазон задержки узкий (например, для сервиса, у которого все спаны выполняются от 5 до 50 мс). Логарифмическая шкала напрасно занимает вертикальное пространство в верхней части, где данных нет.
- Стройте по оси Y что-то кроме duration. Если задать для Value
SpanAttributes.http.response.size, можно исследовать медленные крупные ответы; выражение вродеif(StatusCode = 'Error', 1, 0)отображает частоту ошибок во времени для разных сервисов. - Используйте для цвета что-то кроме count. Если задать для Count
p95(Duration), каждый бакет будет окрашен по tail latency, а не по объёму, что помогает выявить редкие, но медленные области, которые теряются при представлении на основе count.countDistinct(TraceId)позволяет отличить объём trace от объёма span, когда один trace порождает много спанов.
Советы по эффективному использованию
- Сначала отфильтруйте данные до одного сервиса. Латентность может сильно различаться между сервисами, и если смешать их вместе, сигнал теряется. Перед началом используйте строку поиска, чтобы сузить выборку до одного
ServiceName(или одной конечной точки), тогда тепловая карта и распределения будут отражать сопоставимую совокупность. - Выбирайте участки с явным визуальным контрастом. Режим сравнения работает лучше всего, когда полоса Selection заметно отличается от Background — например, в случае деградировавшего периода, который начинается в легко узнаваемый момент, или медленного хвоста, явно отделённого от основной массы. Если выделение сильно перекрывается с остальными данными, оно чаще выявляет шум, а не реальное отклонение.
- Повторяйте цикл: фильтр, тепловая карта, фильтр. Одно выделение редко позволяет найти причину. Воспринимайте первое сравнение как гипотезу, фильтруйте по значению с наибольшим расхождением и заново анализируйте тепловую карту и распределения. Две-три итерации обычно позволяют сузить регрессию до одного-двух атрибутов.
- Используйте режим распределения без выделения, когда контраст ещё не виден (то есть вы знаете, что проблема есть, но тепловая карта выглядит равномерной). Примените фильтр-гипотезу — например, только спаны с ошибками, только клиентские спаны или только одну конечную точку, — и позвольте распределениям атрибутов указать на значения с наибольшим влиянием, прежде чем рисовать какой-либо прямоугольник.