Полный процесс и идеи доступа Golang к OpenTelemetry (исходный код прилагается)
Рекомендуется нажать Посмотреть исходный текст Ознакомьтесь с последним контентом.
Оригинальная ссылка: https://typonotes.com/posts/2023/08/14/golang-opentelemetry-notes/
Для более удобного просмотра кода рекомендуется перейти непосредственно в репозиторий Github: https://github.com/tangx/opentelemetry-gin-demo
используется здесь app -> collector-contrib
вперед, 应用不直接верносерверная частьхранилище。Адаптивность выше.
collector-contrib
Два наиболее распространенных протокола grpc / http(s)
。传入 endpoint адрес для инициализации Provider, Справочный код grpcExporter и httpExporter
c.Set(k,v)
Воля provider Путин gin Контекст реализован самостоятельно середина.tracer.Start
начал первый Span, и создано Волей ctx вставить Request 中向下传递。После этого мы Воляот Запросим Накатори провайдера трассировки。httpconv.XXXXX
метод span состояниенастраивать。httpconv
даон OpenTelemetry осуществленный Стандарт/Шаблон метод, для обработки http Запрос в различных ситуациях. Вы можете следить за мной больше.При использовании, Нужно использовать Context безразличный функция/метод прошло между Провайдер. каждый функция/метод Создайте свой собственный Span, Чтобы добиться этого Называются отношения родитель-ребенок。
Span(xxxx)
предлагать context в provider и начать tracer.Start(xxx)
。существовать #L21 середина, верно ctx
вынес решение, если ctx да gin.Context
Если так, Необходимо начать с Request внесли context, Этот пункт существует апелляция 2.4. Причина объяснена в .
некоторые дополнительные Публичная собственность настройки, Например, имя хоста, на котором он работает.
Span(xxx)
Следите за текущими ситуациями.При возникновении необходимости (например, возникает ошибка доступа), нужно TraceID Вернуться к пользователю. Таким образом, пользователи могут предоставить его, когда сообщают об ошибке. TraceID может быть быстрым debug。
существовать otel/response_traceid.go Создал Gin Middleware, Воля TraceID от Context извлечено из и положить Response Header середина.
использован в нем propagation
стандартная библиотека, Легко и быстро.
существовать Изображение выше App2 середина, в состоянии получить App переходный Traceparent header, Это гарантирует, что принимающая сторона TraceID согласованность.
otelgin
середина, предоставил Option инъекция, otel/propagation, использовать otelgin.WithPropagators(pptc)
чтобы гарантировать TraceID согласованность Кроме принимающей стороны (Приложение 2). существовать отправляющая сторона App1 Также необходимы соответствующие операции.
от Context Читать в TraceParent и ввели в HTTP Request Header середина.
propagation
стандартный Библиотека Воля Header Найдите поле.Стандартное использование API.
span.RecordError
Отправить журнал ошибокspan.SetStatus
настраивать trace span состояние. атмосфера error и okspan.SetAttributes
атрибут настройки, поиск можно проводить по атрибуту. (Все атрибуты индекс)。существовать Tracer Проходит при запуске. После запуска Span Невозможно установить. может пройти Kind тип, Указывает текущий тип шага, послесуществовать Поиск/запрос является более интуитивным.
internal, server, client, producer, consumer
Это можно увидеть в коде существования.trace.WithSpanKind
, существовать trace.Start
время как opt входящий. Не могу потом пройти span настраивать。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