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

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

Что такое корреляции трассировок?

Корреляции трассировок позволяют определять правила, которые внедряют контекстно-зависимые ссылки в ваши промежутки трассировки. При просмотре трассировок в Explore или на панели Traces пользователи могут нажимать на эти ссылки, чтобы переходить непосредственно к соответствующим запросам или URL. Корреляции похожи на ссылки trace to logs, metrics и profiles, которые вы можете настроить для источника данных Tempo, но более гибкие.

Использование корреляций для трассировки

Перед началом

Чтобы использовать корреляции трассировок, вам нужно:

  • Grafana 12 или более поздняя версия
  • Источник данных Tempo, настроенный в Grafana
  • Доступ администратора к настройкам конфигурации или файлам провижининга в Grafana

Настройка корреляции трассировки

  1. Войдите в Grafana с учётной записью администратора.

  2. Перейдите в Configuration > Plugins & data > Correlations.

  3. Выберите Add correlation или Add new.

  4. На шаге 1 укажите label для корреляции и необязательное description.

  5. На шаге 2 настройте target корреляции.

    • Выберите раскрывающийся список Type и выберите Query, чтобы связать с другим источником данных, или выберите External для пользовательского URL.

    • Для Target типа query выберите раскрывающийся список target и выберите источник данных, который должен быть запрошен при нажатии на ссылку. Определите целевой запрос.

    • Для Target типа external введите External URL.

    • Как для целей query, так и для внешних целей вы можете использовать следующие переменные на основе данных трассировки. Объектные переменные должны быть преобразованы в переменную-значение с помощью преобразования регулярным выражением.

    Переменная Тип Описание
    traceId String Идентификатор трассировки
    spanID String Идентификатор промежутка
    parentSpanID String Идентификатор родительского промежутка
    serviceName String Имя службы
    serviceTags Object Атрибуты ресурса
    tags Object Атрибуты промежутка
    logs Object События трассировки
    references Object Ссылки трассировки
    Настройка корреляции для цели Loki с использованием переменных трассировки
  6. На шаге 3 настройте источник данных корреляции:

    • Выберите ваш источник данных Tempo в раскрывающемся списке Source.

    • Введите переменную данных трассировки, которую вы используете для корреляции, в Results field.

    • При необходимости добавьте одно или несколько Transformations, чтобы преобразовать данные трассировки в дополнительные переменные. Вы можете использовать эти переменные для настройки Target корреляции.

    Настройка корреляции для источника данных Loki
  7. Выберите Save, чтобы сохранить корреляцию.

Проверка корреляций в Explore

  1. Откройте Explore и выберите ваш источник трассировки Tempo.

  2. Выполните запрос, чтобы загрузить промежутки.

  3. Наведите курсор на меню ссылок промежутка или откройте детали промежутка, чтобы увидеть кнопки ссылок корреляции.

    Использование корреляций для трассировки
  4. Нажмите на ссылку корреляции, чтобы открыть разделённое представление или перейти к вашей целевой системе или запросу.

Примеры

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

Пример 1: Trace to logs по имени службы и идентификатору трассировки

В этом примере вы настраиваете trace to logs по имени службы и идентификатору трассировки.

  1. На шаге 1 добавьте новую корреляцию с меткой Logs for this service and trace и необязательным описанием.

    Использование корреляций для трассировки
  2. На шаге 2 настройте цель корреляции:

    • Выберите тип цели Query и выберите ваш источник данных Loki в качестве Target.

    • Определите запрос Loki, используя serviceName и traceID в качестве переменных, производных от данных промежутка:

      {service_name="$serviceName"} | trace_id=`$traceID` |= ``

      В этом запросе service_name — единственная метка потока, используемая внутри {}. Метки потока должны быть значениями с низкой кардинальностью, которые описывают источник ваших журналов. Поле trace_id появляется после конвейера | как фильтр конвейера, который выполняет поиск по содержимому журнала или структурированным метаданным без создания дополнительных потоков. Не используйте ID трассировок или другие значения с высокой кардинальностью в качестве меток потока, потому что каждое уникальное значение создаёт отдельный поток, что ухудшает производительность Loki. Дополнительную информацию см. в разделах Рекомендации по меткам и Кардинальность.

      Использование корреляций для трассировки
  3. На шаге 3 настройте источник корреляции:

    • Выберите ваш источник данных Tempo в качестве Source.

    • Используйте traceID в качестве Results field.

    • Добавьте новое преобразование, чтобы извлечь serviceName из serviceTags промежутка, используя регулярное выражение:

      {(?=[^\}]*\bkey":"service.name")[^\}]*\bvalue":"(.*?)".*}
    Использование корреляций для трассировки
  4. Сохраните корреляцию.

Пример 2: Trace to custom URL

В этом примере вы настраиваете корреляции трассировок с пользовательским URL.

  1. На шаге 1 добавьте новую корреляцию с меткой Open custom URL и необязательным описанием.

  2. На шаге 2 настройте цель корреляции:

    • Выберите тип цели External.

    • Определите ваш целевой URL, используя переменные, производные от данных промежутка. В этом примере мы используем serviceName и traceID.

      https://my-server.example.com/service=$serviceName&trace=$traceID
  3. На шаге 3 настройте источник корреляции:

    • Выберите ваш источник данных Tempo в качестве Source.

    • Используйте traceID в качестве Results field.

    • Добавьте новое преобразование, чтобы извлечь serviceName из serviceTags промежутка, используя регулярное выражение:

      {(?=[^\}]*\bkey":"service.name")[^\}]*\bvalue":"(.*?)".*}
  4. Сохраните корреляцию.

Рекомендации

  • Давайте понятные имена: используйте описательные имена, указывающие источник и цель. Например: Trace to errors in logs.

  • Используйте метки потока с низкой кардинальностью: при нацеливании на Loki используйте только значения с низкой кардинальностью, такие как service_name, namespace или cluster, внутри селектора потока {}. Помещайте значения с высокой кардинальностью, такие как ID трассировок, в фильтры конвейера (после |) или храните их как структурированные метаданные. Использование ID трассировок в качестве меток потока создаёт чрезмерное количество потоков и ухудшает производительность Loki. Дополнительную информацию см. в разделах Кардинальность и Рекомендации по меткам. Подробные рекомендации по сопоставлению атрибутов промежутка с метками Loki см. в разделе Настройка корреляции trace to logs.

  • Продуманно используйте шаблоны: используйте несколько токенов $variable, если вам нужно внедрить более одного поля.

Дальнейшие шаги