Respan Dataset Explorer

Select one behavior. Every returned turn has one binary label: Present or Absent. Source: final dense boolean release.

5,167,182physical rows
86shards
0.00%qualified row coverage
0.00%qualified cell coverage
Random row JSON API

turns-00027.parquet:36063

2b041c8873a61f16a339e9ce
turn 61/108gpt-4o-2024-08-06RussianRussia65 words
degenerate_repetitionAbsentFinal dense release
USER
"## Что такое визуализация и путь выполнения запроса

Путь запроса представлен в виде операций, в трейсинге они называются спанами. Спан — это базовый элемент распределённой трассировки, который представляет собой одну операцию."
ASSISTANT
## Что такое визуализация и путь выполнения запроса

Путь выполнения запроса отображается в виде операций, которые в трейсинге называются спанами. Спан представляет собой элементарную единицу распределённой трассировки, описывающую одну операцию в процессе выполнения запроса.

turns-00027.parquet:36064

8b8e1cc386b5ecfc8777e5e1
turn 62/108gpt-4o-2024-08-06RussianRussia303 words
degenerate_repetitionAbsentFinal dense release
USER
"Представим, что мы разрабатываем сервис, который принимает пользовательские заказы. Чтобы их обрабатывать, нужно сохранять определённую информацию из базы данных. Эти две операции — обработка заказа и сохранение информации из базы данных — и становятся нашими спанами. У них появляется родственная связь: отношения родитель — ребёнок. Выстраивается логика: спан **принятие заказа** выполнится тогда, когда выполнится операция по сохранению данных из базы.

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

Из этих спанов мы можем собрать трейс. Трейс, по сути, — это множество спанов, ко которые представляет собой путь выполнения конкретного запроса. Благодаря трейсу мы можем чётко ответить, как именно выполнялся запрос: через какие микросервисы он прошёл, в какие базы данных заходил, где были основные тормоза при обработке запроса."
ASSISTANT
Представьте, что идет разработка сервиса для обработки пользовательских заказов. Для их выполнения необходимо сохранять определённую информацию в базу данных. Эти две операции — обработка заказа и сохранение информации в базу данных — становятся спанами. Они имеют взаимосвязь в виде отношений родитель—ребёнок. Логика выполнения такова: спан **принятие заказа** завершится только после успешного выполнения операции сохранения данных в базе.

У каждого спана есть своё название, которое помогает понять, что именно происходило в процессе выполнения запросов. Помимо этого, у спанов заданы время начала и завершения, что позволяет анализировать продолжительность каждой операции. Дополнительная метаинформация представлена в виде тегов, логов и ссылок на другие спаны.

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

turns-00027.parquet:36065

c73db959fb5f26c39986507c
turn 63/108gpt-4o-2024-08-06RussianRussia135 words
degenerate_repetitionAbsentFinal dense release
USER
"Этой системой в Яндексе уже пользуются в более чем 180 проектах, среди которых Такси, Маркет, Инфраструктура, Вертикали и другие. Каждую секунду в систему прилетает 11 млн спанов, чей суммарный трафик составляет 10 ГБ в секунду.  ##{red}(Данные на февраль 2024)##

Интерфейс трейсинга  доступен во внутренней инсталляции Мониторинга по адресу [m.yandex-team.ru](http://m.yandex-team.ru). В облачной инсталляции он тоже скоро появится. Пока там можно воспользоваться интерфейсом Jaeger по адресу [tracing.cloud.yandex.ru](http://tracing.cloud.yandex.ru)."
ASSISTANT
Эту систему в Яндексе уже используют более чем в 180 проектах, включая Такси, Маркет, Инфраструктуру, Вертикали и другие. Каждую секунду в неё поступает около 11 миллионов спанов, общий объём трафика которых составляет 10 ГБ в секунду. 

Интерфейс трейсинга доступен во внутренней установке Мониторинга по адресу [m.yandex-team.ru](http://m.yandex-team.ru). В ближайшее время планируется его появление в облачной инсталляции, где пока можно использовать интерфейс Jaeger по адресу [tracing.cloud.yandex.ru](http://tracing.cloud.yandex.ru).

*(Данные актуальны на февраль 2024 года.)*

turns-00027.parquet:36066

fc3538402963111e39a6f87b
turn 64/108gpt-4o-2024-08-06RussianRussia82 words
degenerate_repetitionAbsentFinal dense release
USER
"В левой части — операции, которые отражают, что в каком микросервисе выполнялось. В правой части появляются так называемые колбаски, которые показывают, сколько времени заняла та или иная операция. Каждый сервис обозначен своим цветом, что позволяет легко ориентироваться и понимать контекст выполнения запросов."
ASSISTANT
В левой части интерфейса отображаются операции, показывающие, какие действия выполнялись в каждом микросервисе. С правой стороны представлены так называемые "колбаски", визуализирующие длительность выполнения каждой операции. Каждый сервис обозначен уникальным цветом, что облегчает ориентацию и помогает быстро понять контекст выполнения запросов.

turns-00027.parquet:36067

a8ab8203310dc4e34fdde6c7
turn 65/108gpt-4o-2024-08-06RussianRussia391 words
degenerate_repetitionAbsentFinal dense release
USER
перепиши для документации, как технический писатель. пиши от третьего лица "## Что такое инструментирование сервисов

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

Для этого есть стандарт OpenTelemetry — он определяет, как поставлять и обрабатывать данные телеметрии, в нашем случае — данные трассировок. Задачи визуализации, обработки и хранения решает система трейсинга, а вам остаётся лишь поставить данные телеметрии.

Трейсинг живёт по такой же проектной модели, как в Мониторинге. В ней есть:

1. Проект — логическое разделение для группировки сущностей (квотирования, прав доступа и т.д.).

2. Кластер — окружение или инсталляция приложения, в которой оно было запущено (pre-prod, testing, production и т. д.).

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

Пример — наша команда Observability из 45 человек. Мы разделены на независимые проекты: UI, трейсинга, Соломона, логов. У каждого проекта независимые дежурства, релизы и ответственность. Помимо этого, в рамках этих проектов у нас есть свои микросервисы, за которые мы отвечаем. Например, в трейсинге есть Collector и Query."
ASSISTANT
## Что такое инструментирование сервисов

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

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

Трейсинг основывается на проектной модели, аналогичной такой в системе Мониторинга, которая включает следующие компоненты:

1. **Проект** — это логическая единица, используемая для группировки сущностей, таких как квотирование и контроль прав доступа.

2. **Кластер** — представляет собой окружение или инсталляцию приложения, где оно выполняется, например, pre-prod, testing, production и т. д.

3. **Сервис** — это наименование приложения, микросервиса или базы данных, использующего трейсинг.

В качестве примера рассмотрим команду Observability, состоящую из 45 человек. Команда разделена на независимые проекты: UI, трейсинг, Соломон, и логи. Каждый проект имеет собственные дежурства, релизы и зоны ответственности. Внутри этих проектов у команды есть свои микросервисы, за которые они отвечают. Например, в проекте трейсинга имеются такие компоненты, как Collector и Query.

turns-00027.parquet:36068

ef198fd5216166b1254477ff
turn 66/108gpt-4o-2024-08-06RussianRussia45 words
degenerate_repetitionAbsentFinal dense release
USER
"Конечно, Collector и Query запущены не только в проде, есть и препрод-инсталляция. Чтобы пометить ту или иную инсталляцию, используется Cluster — аналогично с трейсами."
ASSISTANT
Collector и Query запускаются не только в продакшене, но и в препрод-инсталляции. Чтобы различать различные инсталляции, используется элемент `Cluster`, аналогичный трейсам.

turns-00027.parquet:36069

29ad851e53005e49c3639351
turn 67/108gpt-4o-2024-08-06RussianRussia202 words
degenerate_repetitionAbsentFinal dense release
USER
"# **Пример: инструментируем приложение**

Представим, что мы разработчики проекта из трёх микросервисов: user-info-сервис, который отдаёт информацию по определённому пользователю. Сам он получает эту информацию из location-сервиса, где по IP-адресу определяет местонахождение пользователя. Дополнительно user-info-сервис получает рейтинг пользователя из базы данных Redis.

![image.png](/solomon/observability-days/recepty-slozhnyx-alertov/tracing-v-kazhdyjj-dom/.files/image-2.png =600x)

Запустили проект, смотрим графики. Большинство запросов обрабатывается успешно, но есть небольшой фон ошибок.

![image.png](/solomon/observability-days/recepty-slozhnyx-alertov/tracing-v-kazhdyjj-dom/.files/image-11.png =500x)

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

![image.png](/solomon/observability-days/recepty-slozhnyx-alertov/tracing-v-kazhdyjj-dom/.files/image-12.png =600x)

![image.png](/solomon/observability-days/recepty-slozhnyx-alertov/tracing-v-kazhdyjj-dom/.files/image-13.png =600x)

*Сверху — код HTTP-сервера, в нижней — код HTTP-клиента*"
ASSISTANT
# **Пример: инструментируем приложение**

Представим проект, состоящий из трёх микросервисов: `user-info-сервис`, предоставляющий информацию о пользователе, `location-сервис`, определяющий местоположение пользователя по IP-адресу, и база данных Redis, используемая `user-info-сервисом` для получения рейтинга пользователя.

![Схема микросервисов](https://example.com/image.png =600x)

После запуска проекта видно, что большинство запросов обрабатывается успешно, но существует небольшой фон ошибок.

![График с ошибками](https://example.com/image.png =500x)

Для устранения ошибок внедряется трейсинг. Поскольку наши микросервисы взаимодействуют через HTTP, ниже приводится код на Go. Синим цветом выделены изменения, которые необходимо внести в код микросервиса для интеграции трейсинга в приложение.

![Код HTTP-сервиса](https://example.com/image.png =600x)

![Код HTTP-клиента](https://example.com/image.png =600x)

*Верхний фрагмент кода относится к HTTP-серверу, а нижний — к HTTP-клиенту.*

turns-00027.parquet:36070

b344aa2a9bcd9e36b1398198
turn 68/108gpt-4o-2024-08-06RussianRussia136 words
degenerate_repetitionAbsentFinal dense release
USER
"Сервер и клиент будут работать по-прежнему. Нужно лишь добавить несколько строчек кода, чтобы запустить процесс автоинструментации. Тут не создаются спаны — их за нас создаст фреймворк OpenTelemetry при помощи выделенных синим строк кода.

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

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

turns-00027.parquet:36071

c7c262bddc6ffd74a767f5a5
turn 69/108gpt-4o-2024-08-06RussianRussia48 words
degenerate_repetitionAbsentFinal dense release
USER
"После этого переходим в интерфейс Monitoring UI и используем поиск. В поиске можно искать трейсы по проектам, сервисам, продолжительности. "
ASSISTANT
После этого необходимо перейти в интерфейс Monitoring UI и воспользоваться функцией поиска. В этом поиске можно искать трейсы по множеству критериев, таким как проекты, сервисы и продолжительность выполнения.

turns-00027.parquet:36072

8c9171f8c8c261cfd154225d
turn 70/108gpt-4o-2024-08-06RussianRussia76 words
degenerate_repetitionAbsentFinal dense release
USER
"Язык поиска в трейсинге такой же, как в Мониторинге: указываем проект, сервис и ищем там спан с ошибкой. Находим трейс и начинаем его анализировать. Несколько спанов подсвечены красным — это значит, что в них что-то не так."
ASSISTANT
Язык поиска в трейсинге аналогичен используемому в Мониторинге. Необходимо указать проект, сервис и выполнить поиск спанов с ошибками. После нахождения трейса можно приступать к его анализу. Если несколько спанов подсвечены красным, это указывает на наличие в них каких-либо проблем.