Полный процесс и идеи доступа Golang к OpenTelemetry (исходный код прилагается)
Полный процесс и идеи доступа Golang к OpenTelemetry (исходный код прилагается)

Полный процесс и идеи доступа Golang к OpenTelemetry (исходный код прилагается)

Рекомендуется нажать Посмотреть исходный текст Ознакомьтесь с последним контентом.

Оригинальная ссылка: https://typonotes.com/posts/2023/08/14/golang-opentelemetry-notes/

Для более удобного просмотра кода рекомендуется перейти непосредственно в репозиторий Github: https://github.com/tangx/opentelemetry-gin-demo

Используйте заметки

1. Используйте Otel-Collect-Contrib для инициализации Trace.Provider.

используется здесь app -> collector-contrib вперед, 应用不直接верносерверная частьхранилище。Адаптивность выше.

collector-contrib Два наиболее распространенных протокола grpc / http(s)。传入 endpoint адрес для инициализации Provider, Справочный код grpcExporter и httpExporter

2. Используйте Otelgin для доступа к TraceProvider.

  • [x] 2. использовать otelgin Доступ trace.Provider
  1. Шаг первый. Инициализация. Хорошо. trace.Provider нужно пройти Option прошел, Справочный код otel middleware option
  2. существовать gin реализовал официальный Middleware поддерживать OpenTelemetry. Справочный код gin-gonic/gin/otelgin[1]
  3. существовать #L66 середина, использовать c.Set(k,v) Воля provider Путин gin Контекст реализован самостоятельно середина.
  4. существовать #L88-92 середина, tracer.Start начал первый Span, и создано Волей ctx вставить Request 中向下传递。После этого мы Воляот Запросим Накатори провайдера трассировки
  5. существовать #L73,98, использовать httpconv.XXXXX метод span состояниенастраивать。httpconv даон OpenTelemetry осуществленный Стандарт/Шаблон метод, для обработки http Запрос в различных ситуациях. Вы можете следить за мной больше.
  6. существовать #L71-87 середина, Инициализация имеет некоторый статус.

3. Завершите древовидную структуру трассировки одного сервиса.

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

  1. существовать utils/span.go середина, инкапсулирует функцию Span(xxxx) предлагать context в provider и начать tracer.Start(xxx)

существовать #L21 середина, верно ctx вынес решение, если ctx да gin.Context Если так, Необходимо начать с Request внесли context, Этот пункт существует апелляция 2.4. Причина объяснена в .

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

  1. существовать apis/user/info.go середина, проходить context существоватьдругой функция/метод прошло между tracer provider, звонил везде Span(xxx) Следите за текущими ситуациями.

4. При ответе клиенту в заголовок по умолчанию добавляется TraceID

При возникновении необходимости (например, возникает ошибка доступа), нужно TraceID Вернуться к пользователю. Таким образом, пользователи могут предоставить его, когда сообщают об ошибке. TraceID может быть быстрым debug。

существовать otel/response_traceid.go Создал Gin Middleware, Воля TraceID от Context извлечено из и положить Response Header середина.

использован в нем propagation стандартная библиотека, Легко и быстро.

5. Передача родительской информации

существовать Изображение выше App2 середина, в состоянии получить App переходный Traceparent header, Это гарантирует, что принимающая сторона TraceID согласованность.

  1. существовать otelgin середина, предоставил Option инъекция, otel/propagation, использовать otelgin.WithPropagators(pptc)
  2. существовать gin Зарегистрируйтесь в provider когда, использовать Option Вот и все, otel/register.go#L12

6. Передайте заголовок назад: Traceparent

чтобы гарантировать TraceID согласованность Кроме принимающей стороны (Приложение 2). существовать отправляющая сторона App1 Также необходимы соответствующие операции.

от Context Читать в TraceParent и ввели в HTTP Request Header середина.

  1. существовать utils/carrier.go#L9 середина, проходить propagation стандартный Библиотека Воля Header Найдите поле.
  2. существовать httpclient/client.go#L19 середина, Нашёл Воля Header Поместите все поля во вновь созданный Request Header середина.

7. Добавьте журнал ошибок, статус и атрибут в трассировку.

Стандартное использование API.

  1. span.RecordError Отправить журнал ошибок
  2. span.SetStatus настраивать trace span состояние. атмосфера error и ok
  3. span.SetAttributes атрибут настройки, поиск можно проводить по атрибуту. (Все атрибуты индекс)。

8. Измените тип Kind в Trace. Известно, что значение, предоставляемое Otelngin, — Sever, а значение по умолчанию — внутреннее.

существовать Tracer Проходит при запуске. После запуска Span Невозможно установить. может пройти Kind тип, Указывает текущий тип шага, послесуществовать Поиск/запрос является более интуитивным.

  1. (*) Вид — стандартное поле., да тип перечисления. который содержит internal, server, client, producer, consumer Это можно увидеть в коде существования.
  2. Можетпроходить trace.WithSpanKind, существовать trace.Start время как opt входящий. Не могу потом пройти span настраивать。

9. Добавьте поля настраиваемых атрибутов.

  1. (*) Пользовательское поле (Атрибут) (аналогично хосту).
  2. каждый span Все независимы. поэтому public attributes Необходимость существования, введенная общественная функция utils/span.go
  3. поэтомуиспользовать Context пройти дальше, безразличный метод/функция общественность внутри attr общий。(Это зависит от вашей ситуации)

Todo2: Request Tree

Язык кода:javascript
копировать
nginx/web -> app1----> app2(get balance) -----> app3 (check db)
                   \
                    \-> app4(get cellphone) ----> app5 (check redis)

Обычный значок

Есть значок ошибки

[1]

gin-gonic/gin/otelgin: https://github.com/open-telemetry/opentelemetry-go-contrib/blob/849072ef827b4abab754253e1e63e7b410a31084/instrumentation/github.com/gin-gonic/gin/otelgin/gintrace.go#L42

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода