Трассировка - это способ анализа кода на задержки в течение всего жизненного цикла цепочки вызовов. Go предоставляет пакет golang.org/x/net/trace в качестве минимальной трассировки для каждого узла Go и предоставляет минимальную библиотеку инструментов с простой панелью инструментов. Go также предоставляет трассировщик выполнения для отслеживания событий времени выполнения в течение определенного интервала.
Трассировка позволяет:
- Анализировать задержки приложения в процессе Go.
- Измерять стоимость конкретных вызовов в длинной цепочке вызовов.
- Выяснить улучшения использования ресурсов и производительности. Узкие места не всегда очевидны без отслеживания данных.
В монолитных системах относительно просто собирать диагностические данные из стандартных блоков программы. Все модули живут в одном процессе и совместно используют общие ресурсы, чтобы писать журналы, ошибки и другую диагностическую информацию. Как только ваша система выходит за рамки одного процесса и начинает распределяться, становится сложнее следить за вызовом, начиная с фронт веб-сервера и заканчивая всеми его бэкэндами, пока ответ не будет возвращен пользователю. Именно здесь распределенная трассировка играет важную роль для анализа и анализа ваших производственных систем.
Распределенная трассировка - это способ анализа кода на задержки в течение всего жизненного цикла запроса пользователя. Когда система распределена и когда обычные инструменты профилирования и отладки не масштабируются, вы можете использовать инструменты распределенной трассировки для анализа производительности ваших пользовательских запросов и RPC.
Распределенная трассировка позволяет:
- Профилировать задержки приложения в большой системе.
- Отслеживать все RPC в течение жизненного цикла пользовательского запроса и просматривать проблемы интеграции, которые видны только в рабочей среде.
- Определить улучшения производительности, которые можно применить к системам. Многие узкие места не очевидны до сбора данных трассировки.
Экосистема Go предоставляет различные распределенные библиотеки трассировки для каждой системы трассировки и независимые от бэкэнда.
Есть ли способ автоматически перехватывать каждый вызов функции и создавать трассировки?
Go не предоставляет способ автоматического перехвата каждого вызова функции и создания трассировки. Вам необходимо вручную применить свой код для создания, завершения и аннотирования интервалов.
Как я должен распространять заголовки трассировки в библиотеках Go?
Вы можете распространять идентификаторы и теги трассировки в context.Context. В отрасли пока нет канонического ключа трассировки или общего представления заголовков трассировки. Каждый поставщик трассировки отвечает за предоставление утилит распространения в своих библиотеках Go.
Какие другие низкоуровневые события из стандартной библиотеки или среды выполнения могут быть включены в трассировку?
Стандартная библиотека и среда выполнения пытаются предоставить несколько дополнительных API для уведомления о внутренних событиях низкого уровня. Например, httptrace.ClientTrace предоставляет API-интерфейсы для отслеживания низкоуровневых событий в жизненном цикле исходящего запроса.
Читайте также:
- Профилирование в Golang, профили runtime/pprof
- Исследование утечек памяти в Golang с помощью pprof
- Трассировка HTTP запросов в Golang
Комментариев нет:
Отправить комментарий