четверг, 9 апреля 2020 г.

Трассировка в Golang

Трассировка - это способ анализа кода на задержки в течение всего жизненного цикла цепочки вызовов. Go предоставляет пакет golang.org/x/net/trace в качестве минимальной трассировки для каждого узла Go и предоставляет минимальную библиотеку инструментов с простой панелью инструментов. Go также предоставляет трассировщик выполнения для отслеживания событий времени выполнения в течение определенного интервала.

Трассировка позволяет:

  • Анализировать задержки приложения в процессе Go.
  • Измерять стоимость конкретных вызовов в длинной цепочке вызовов.
  • Выяснить улучшения использования ресурсов и производительности. Узкие места не всегда очевидны без отслеживания данных.

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

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

Распределенная трассировка позволяет:

  • Профилировать задержки приложения в большой системе.
  • Отслеживать все RPC в течение жизненного цикла пользовательского запроса и просматривать проблемы интеграции, которые видны только в рабочей среде.
  • Определить улучшения производительности, которые можно применить к системам. Многие узкие места не очевидны до сбора данных трассировки.

Экосистема Go предоставляет различные распределенные библиотеки трассировки для каждой системы трассировки и независимые от бэкэнда.

Есть ли способ автоматически перехватывать каждый вызов функции и создавать трассировки?

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

Как я должен распространять заголовки трассировки в библиотеках Go?

Вы можете распространять идентификаторы и теги трассировки в context.Context. В отрасли пока нет канонического ключа трассировки или общего представления заголовков трассировки. Каждый поставщик трассировки отвечает за предоставление утилит распространения в своих библиотеках Go.

Какие другие низкоуровневые события из стандартной библиотеки или среды выполнения могут быть включены в трассировку?

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


Читайте также:


Комментариев нет:

Отправить комментарий