Перейти к основному содержимому
Перейти к основному содержимому

Event deltas в ClickStack

Event deltas сочетает тепловую карту задержек с автоматическим анализом атрибутов, чтобы вы могли видеть структуру данных своего трейса и понимать, чем отличаются медленные спаны, без написания запросов. Есть три способа его использовать:

  • Режим распределения (всегда включён): когда на тепловой карте нет выделения, для текущего набора спанов показывается распределение значений каждого атрибута. Полезно для выявления доминирующих или необычно редких значений (выбросов по мощности).
  • Режим сравнения: перетащите прямоугольник на тепловой карте, чтобы сравнить спаны внутри него (Selection) со всеми спанами снаружи (Background). Полезно для выявления отклонений.
  • Последовательная детализация: нажмите на любой столбец, чтобы отфильтровать по этому значению (или исключить его). Тепловая карта перестраивается для отфильтрованного набора, поэтому вы можете продолжать сужать выборку, пока причина не станет очевидной.
Обзор Event deltas для платёжного сервиса: яркая полоса поднимается к середине окна и в рамке окна восстановления не видно

На снимке экрана выше правый край тепловой карты находится примерно на уровне 10 мс, а не вернулся к базовому уровню 1 мс, который сохранялся всё утро. Деградация всё ещё продолжается, поэтому мы наблюдаем ситуацию в разгар инцидента.

Предварительные требования

Для Event deltas требуется источник данных Трейс с выражением длительности. Подойдет любой сервис с инструментированием OpenTelemetry, который генерирует данные спанов. Функция доступна во всех развертываниях ClickStack (Managed, Open Source, ClickHouse Cloud).

Начало работы

  1. В раскрывающемся списке Источник данных выберите источник, в котором есть трейсы. Названия источников произвольны; важно, чтобы для источника был задан тип трейса. Вкладка Event Deltas доступна только для таких источников.
  2. В разделе Analysis Mode нажмите вкладку Event Deltas.

Event deltas — это отдельный режим анализа наряду с Таблицей результатов и Шаблонами событий. При переключении на него отображаются тепловая карта и сетка анализа атрибутов, при этом ваши поисковые фильтры и временной диапазон сохраняются, и вы можете в любой момент переключиться обратно.

Тепловая карта

Тепловая карта отображает спаны в двух измерениях:

  • Ось X — время
  • Ось Y — числовое значение; по умолчанию это длительность спана в миллисекундах (логарифмическая шкала)

Интенсивность цвета показывает количество событий в бакете: чем ярче, тем больше спанов.

По тепловой карте можно сразу увидеть закономерности: бимодальное распределение задержки, всплески задержки в определённые моменты времени, полосу стабильно медленных спанов или медленную полосу, которая со временем смещается вверх (постепенно нарастающая регрессия). Чтобы исследовать область, нажмите и протяните на ней прямоугольник — он станет вашей Selection и переведёт анализ ниже в режим сравнения.

Режим распределения: аномалии мощности

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

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

Используйте режим распределения, когда хотите понять характер мощности ваших данных:

  • Пики: какие сервисы, конечные точки, коды состояния или хосты преобладают в вашей совокупности спанов? Часто это помогает выявить одного арендатора, версию или маршрут, на которые приходится основная часть трафика.
  • Редкие значения: значения, которые встречаются, но редко. Код состояния, который появляется лишь в 0.5% спанов, или хост, который почти не встречается, могут оказаться самым интересным сигналом. Именно в длинном хвосте скрываются регрессии и вредоносная активность.

Комбинируйте этот режим со строкой поиска, чтобы сначала сузить совокупность (например, только спаны с ошибками, только клиентские спаны, только одна конечная точка), а затем анализировать распределения для этого подмножества.

Режим сравнения: отклонения от нормы

Щёлкните и протяните прямоугольник на тепловой карте, чтобы перейти в режим сравнения. Выбранные спаны становятся Selection (оранжевые столбцы); всё, что вне выделения, становится Background (зелёные столбцы). После этого каждая диаграмма атрибутов показывает обе совокупности рядом, отсортированные так, что первыми идут атрибуты с наибольшим расхождением. Значение, которое встречается почти только в одной из групп или отсутствует в одной из них, с наибольшей вероятностью указывает на источник различий.

Форма нарисованного прямоугольника меняет вопрос, на который вы хотите ответить. Ниже описаны две распространённые формы.

Сценарий использования 1: До и после регрессии

Когда тепловая карта показывает, что задержка со временем растет (медленная полоса утолщается, яркая полоса поднимается вверх или четкая точка перегиба отделяет нормальный период от деградировавшего), протяните прямоугольник от точки перегиба роста до правого края окна. Чтобы сделать сравнение точнее, задайте нижнюю границу прямоугольника на уровне нормального базового значения, а не по нижней границе оси: так вы выделите спаны, которые в деградировавшем окне действительно работают медленнее обычного, не захватывая при этом по-прежнему нормальные быстрые спаны, просто попавшие в тот же временной диапазон.

Режим сравнения в сервисе payment с прямоугольником, проведенным от точки перегиба роста до правого края, с нижней границей на уровне базового значения 1 мс

Панели атрибутов под тепловой картой отсортированы так, что на первом месте идут самые большие расхождения. В этом примере диаграммы в верхней строке показывают самые сильные сигналы: SpanKind, SpanName и ScopeName демонстрируют резкое оранжево-зеленое разделение между медленной Selection и нормальным Background. Вместе они дают характерную картину того, что изменилось в точке перегиба.

Это подходящая форма, когда вы хотите ответить на вопрос «что изменилось?». Более точный вариант использует тот же подход: когда небольшой узел медленных спанов находится внутри в остальном спокойной полосы (короткий всплеск у правого края, кластер в середине стабильного периода), вместо этого нарисуйте небольшой прямоугольник только вокруг этого кластера. Форма меняет сам вопрос: вертикальная полоса спрашивает что изменилось во времени; небольшой сфокусированный прямоугольник спрашивает что особенного в этом кластере.

Сценарий 2: медленные и быстрые

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

Сравнение медленных и быстрых на frontend-proxy, где прямоугольник охватывает только четко отделенную верхнюю полосу, заметно выше плотной основной массы

Нарисуйте прямоугольник плотно вокруг верхней полосы, чтобы между ней и плотной основной массой оставался видимый горизонтальный зазор. Слишком широкий прямоугольник, заходящий в область быстрой группы, размывает различия.

Линия потолка на уровне 100 s сама по себе информативна: постоянная горизонтальная линия на круглом значении — признак фиксированного тайм-аута. Если ни один атрибут спана не позволяет четко различить эти две группы, это тоже полезный результат: он указывает на метрики уровня хоста и среды выполнения (паузы GC, конкуренцию за I/O, задержки планировщика, эффекты холодного кэша, noisy neighbors), а не на атрибуты спанов.

Это правильная картина, когда вы хотите ответить на вопрос «чем медленные спаны отличаются от быстрых?», а не ищете конкретную аномалию. Расходящийся атрибут указывает на причину в кодовом пути или входных данных; ровное сравнение — на системную причину.

Итеративная детализация

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

  • Фильтр — оставить только спаны с этим значением
  • Исключить — убрать спаны с этим значением
  • Копировать — скопировать значение в буфер обмена
Всплывающее меню на столбце ScopeVersion с отображением процентов Selection и Background, а также действий фильтрации, исключения и копирования

После применения фильтра или исключения выделение на тепловой карте сбрасывается, тепловая карта перестраивается для новой выборки, а режим распределения продолжается уже для этого отфильтрованного набора. Следите за тем, как меняется тепловая карта: успешный фильтр заметно убирает медленную полосу, схлопывает бимодальное разделение или выравнивает восходящий дрейф. Повторяйте: найдите следующее подозрительное значение, отфильтруйте его, посмотрите на новую тепловую карту, посмотрите на новые распределения. Несколько итераций обычно позволяют локализовать регрессию до одного-двух атрибутов.

Примечание

Агрегированные бакеты Other (N), в которые сворачиваются низкочастотные значения, не кликабельны. Чтобы отфильтровать конкретное значение внутри такого бакета, используйте строку поиска напрямую.

Когда выборка станет достаточно небольшой, переключитесь на вкладку Таблица результатов, чтобы изучить отдельные трейсы; ваши фильтры сохранятся.

Настройка тепловой карты

Значок шестеренки в правом верхнем углу тепловой карты открывает выдвижную панель Display Settings.

Выдвижная панель Display Settings с полями Scale, Value и Count
ПараметрПо умолчаниюОписание
ScaleLogLog подходит для широких диапазонов задержки; Linear лучше для узких, равномерных распределений.
Value(Duration)/1e6Любое числовое выражение: размер ответа, частота ошибок или пользовательский атрибут спана.
Countcount()Агрегация для цвета. Переключите на avg(), sum(), p95() или выражения вроде countDistinct(field).

Нажмите Apply, чтобы обновить тепловую карту; анализ атрибутов ниже также будет обновлен.

Тепловая карта на дашбордах

Та же тепловая карта также доступна как плитка дашборда, что удобно, если вы хотите отслеживать форму распределения с течением времени вне сценария детализации Event Deltas.

Распространенные сценарии, когда стоит изменить эти значения по умолчанию:

  • Переключите Scale на Linear, когда диапазон задержки узкий (например, для сервиса, у которого все спаны укладываются в интервал от 5 до 50 мс). Логарифмическая шкала впустую расходует вертикальный диапазон в верхней части, где данных нет.
  • Постройте по оси Y что-то другое, а не длительность. Если задать Value как SpanAttributes.http.response.size, можно исследовать медленные крупные ответы; выражение вроде if(StatusCode = 'Error', 1, 0) показывает частоту ошибок во времени для разных сервисов.
  • Задайте цвет по чему-то другому, а не по count. Если задать Count как p95(Duration), каждый бакет будет окрашен по хвостовой задержке, а не по объему, что позволяет выявить редкие, но медленные области, которые скрывает представление на основе count. countDistinct(TraceId) помогает отличать объем трейсов от объема спанов, когда один трейс порождает много спанов.

Советы по эффективному использованию

Несколько приемов помогут сделать Event deltas значительно полезнее:

  • Сначала отфильтруйте данные до одного сервиса. Задержка сильно различается между сервисами, и если смешивать их вместе, полезный сигнал теряется. Прежде чем начинать, используйте строку поиска, чтобы сузить выборку до одного ServiceName (или одной конечной точки), — тогда тепловая карта и распределения будут отражать сопоставимый набор данных.
  • Выбирайте участки с явным визуальным контрастом. Режим сравнения работает лучше всего, когда полоса Selection заметно отличается от Background, например если это период деградации, начинающийся в легко узнаваемый момент, или медленный хвост, явно отделенный от основной массы. Если выбранные данные сильно пересекаются с остальной выборкой, обычно это выявляет скорее шум, чем реальное отклонение.
  • Повторяйте цикл: фильтр, тепловая карта, фильтр. Одного выделения редко достаточно, чтобы найти причину. Рассматривайте первое сравнение как гипотезу, применяйте фильтр по значению с наибольшим расхождением и заново анализируйте тепловую карту и распределения. Две-три итерации обычно позволяют сузить регрессию до одного-двух атрибутов.
  • Используйте режим распределения без выделения, когда контраст еще не виден (вы знаете, что проблема есть, но тепловая карта выглядит однородной). Примените фильтр для проверки гипотезы, например только спаны с ошибками, только клиентские спаны или только одну конечную точку, и позвольте распределениям атрибутов указать на значения с наибольшим влиянием, прежде чем рисовать какой-либо прямоугольник.

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

Вкладка Event deltas не отображается

Вкладка Event deltas в разделе Analysis Mode появляется только при выборе источника трейсов с выражением длительности. Убедитесь, что ваш источник данных настроен как источник типа трейс и содержит данные спанов с информацией о длительности.

Графики атрибутов показывают мало результатов или не показывают их вовсе

Если выборка слишком мала (меньше нескольких десятков спанов), распределения могут быть статистически нерепрезентативными. Расширьте временной диапазон или смягчите поисковые фильтры.