Просто прочитайте эту статью, чтобы начать работу с OpenTelemetry|Открытый курс
Просто прочитайте эту статью, чтобы начать работу с OpenTelemetry|Открытый курс

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

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

Давайте сначала разберемся, что такое распределенная трассировка и зачем она нам нужна.

Зачем нам нужно отслеживание?

Зачем нужна Распределенная трассировка? Почему мы не можем просто использовать индексибревно? Предположим, у вас есть архитектура микросервисов, как показано ниже.

Теперь представьте запрос от клиента.

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

Когда что-то идет не так с нашим приложением, нам приходится многое решать.

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

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

Трассировка начинается с момента взаимодействия пользователя с приложением, и мы должны иметь возможность видеть весь запрос до последнего уровня.

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

Если вы хотите узнать больше о распределенной трассировке, прочтите Руководство для начинающих по распределенной трассировке, чтобы узнать, как отслеживать архитектуру микросервисов.

Как реализовать отслеживание?

Чтобы реализовать отслеживание, нам необходимо сделать следующее:

  1. Обнаружьте наше приложение
  2. Сбор и обработка данных
  3. Хранение и визуализация,чтобы мы могли запросить его

Для этого мы можем использовать два открытых исходных кодапроект:OpenTelemetry и Jaeger

Что такое OpenTelemetry?

OpenTelemetry Может использоваться для сбора данных из приложений. Это набор инструментов и API. и SDK собирать,Мы можем использовать их для обнаружения, генерации, сбора и экспорта данных телеметрии (индекс, краткая трассировка).,Чтобы помочь проанализировать производительность и поведение приложений.

Опен Телеметрия — это:

  • Открытый исходный код из
  • Принято лидерами отрасли в области наблюдаемости
  • Проект CNCF
  • Независимость от поставщикаиз

OpenTelemetry Он включает в себя три столпа наблюдаемости: отслеживание и отслеживание. (В центре внимания данной статьи Волясосредоточиться на Отслеживание)

  • Распределенная трассировкаэто запрос на услугу отслеживаниясуществовать От начала до конца в распределенных системахизметод。
  • индекспредназначен для деятельности в течение определенного периода временииз Измерение,чтобы понять системуили Приложенияпроизводительность。
  • бревноЭто системаилиприложениесуществовать Происходит в определенный момент времениизсобытиеизтекстовая запись。

OpenTelemetry не зависит от поставщика

OpenTelemetry предусмотрена одна Независимость от поставщикаизСтандарт наблюдаемости,потому что оно направленосуществовать Стандартизированное отслеживаниеизгенерировать。проходить С помощью OpenTelemetry мы можем отделить точки обнаружения от серверной части. Это означает, что мы не зависим ни от какого инструмента (или поставщика).

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

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

OpenTelemetry Нам предоставлены инструменты для создания данных трассировки. Чтобы получить эти данные, нам сначала необходимо настроить приложение для сбора данных. Для этого нам нужно использовать OpenTelemetry SDK

Обнаружение (скрытые точки)

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

Автоматическое обнаружение

Использование Автоматическое обнаружение — хороший способ использовать Автоматическое обнаружение.,Потому что это просто и легко,Не требуется много изменений кода.

Этот подход идеален, если у вас нет необходимых знаний (или времени) для создания кода отслеживания, адаптированного к вашему приложению.

при использовании Автоматическое Обнаружение, Воля создает набор предопределенных пролеты и заполните соответствующие свойства.

Ручное обнаружение

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

коммуникатор

может быть W3C tracecontextbaggage иb3 и т.д. В Конфигурацию добавлен коммуникатор (Пропагаторы).

Другой коммуникатор определяет конкретные поведенческие спецификации для распространения через границы процесса с контекстными данными.

  • Trace Context:используется длясуществовать HTTP headers Среднее кодирование trace данные для передачи этих данных между различными сервисами.
  • Baggage:используется длясуществовать span Передавать пары ключ-значение между данными, например пользователями. идентификатор, запрос ID ждать.
  • B3:используется длясуществовать HTTP headers Среднее кодирование trace данные, так что существующие могут передавать эти данные между различными службами (в основном используются для Zipkin или Он совместим с системой).

выборка

выборка - это метод сокращения сбора и отправки назад частьиз отслеживать количество образцов для контроля OpenTelemetry Представляем шумовой и накладной механизм.

могу сказать OpenTelemetry Осуществить выборку по количеству отправляемого трекинга/трафика. (например, только выборка 10% данные отслеживания).

Двумя распространенными методами выбора являются выбор головы и выбор хвоста.

Протокол открытой телеметрии (OTLP)

Протокол открытой телеметрии Спецификация (OTLP) описывает источник данных телеметрии, Коллектор телеметрии сзади. из механизма кодирования, передачи и доставки между частями.

SDK для каждого языка предоставляет экспортер OTLP, который можно настроить для экспорта данных через OTLP. Затем пакет OpenTelemetry SDK преобразует события в данные OTLP.

OTLP — это связь между актером (конфигурация как отправитель) и сборщиком (конфигурация как получатель).

OpenTelemetry Collectors

Данные телеметрии приложения можно отправлять в сборщики OpenTelemetry.

Коллектор — это компонент OpenTelemetry, который получает данные телеметрии (промежутки, метрики, журналы и т. д.), обрабатывает (предварительно обрабатывает данные) и экспортирует данные (отправляет их на нужный коммуникационный сервер).

Receivers

Приемники Приемники — это способ поступления данных в сборщик: принудительная или вытягивающая. Сборщики OpenTelemetry могут получать данные телеметрии в различных форматах.

Ниже приведен приемник в порту 4317(gRPC) и 4318(http) принять на OTLP Пример конфигурации данных:

Язык кода:javascript
копировать
otlp:
  protocols:
    http:
    grpc:
      endpoint: "0.0.0.0:4317"

То же, что и в примере ниже, который может получать данные телеметрии по протоколу HTTP Jaeger Thrift.

Язык кода:javascript
копировать
jaeger: # Jaeger протоколполучатель  protocols: # Определение получателя поддерживается из протокола
    thrift_http: # проходить Jaeger Thrift HTTP Согласие полученное
      endpoint: "0.0.0.0:14278"

Processors

После получения данных,Коллекционер может обрабатывать данные. Процессор существует для получения и экспорта между обработками данных. Процессор не является обязательным из,Но некоторые рекомендуются из.

например batch Процессор настоятельно рекомендуется из. Пакетный процессор получает интервалы, индекс или бревно, и объединяет их в пакеты. Пакетная обработка помогает лучше сжимать файлы и уменьшать количество исходящих соединений, необходимых для передачи файлов. Этот процессор поддерживает на основе размера и времени и пакетной обработки.

Язык кода:javascript
копировать
processors:
  batch:

Обратите внимание, что настройка процессора не включает его. нужно пройти service частичный pipelines Давать возможность.

Язык кода:javascript
копировать
service:
  pipelines:
    traces:
      receivers: [jaeger]
      processors: [batch]
      exporters: [zipkin]

Exporters

Для визуализации и анализа телеметрии нам также понадобится использовать экспортер. Экспортер OpenTelemetry Компонент и способ отправки данных в разные системы/серверы.

например console exporter является общимизэкспортер,для задач разработки и отладки очень полезны,Он выведет на консоль «Воляданные».

существовать exporters раздел, чтобы добавить дополнительные пункты назначения. Например, если вы хотите отправить данные отслеживания на Grafana Tempo, просто добавьте конфигурацию, как показано ниже:

Язык кода:javascript
копировать
exporters:
  logging:
  otlp:
    endpoint: "<tempo_endpoint>"
    headers:
      authorization: Basic <api_token>

Конечно, для того, чтобы в конечном итоге подействовать, ему также необходимо существовать. service частичный pipelines середина Давать возможность.

Язык кода:javascript
копировать
service:
  pipelines:
    traces:
      receivers: [otlp]
      processors: []
      exporters: [logging, otlp]

OpenTelemetry Поставляется с различными экспортерами, существуют OpenTelemetry Коллекционер Contrib можно найти в репозитории.

Extensions

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

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

Язык кода:javascript
копировать
extensions:
  health_check:
  pprof:
  zpages:
  memory_ballast:
    size_mib: 512

Режимы/стратегии развертывания OpenTelemetry Collector

OpenTelemetry Коллекционер можно сделать разными способами, поэтому нам нужно подумать, как это сделать. Какую стратегию выбрать, зависит от вашей команды и организационной ситуации.

Режим агента

В этом случае существует OpenTelemetry Обнаружить из приложения Воляданные, отправленные из (Коллекционер) актерского мастерства, которое находится вместе с приложением мастерство。Затем,Долженактерское мастерствопрограмма Воля Возьмите на себя и обработайте все запросы от Приложенияотслеживатьданные。

Коллекционер Можетпроходить sidecar Способразвертыватьдляактерское мастерство,sidecar Можно настроить для отправки данных непосредственно в хранилище.

Режим шлюза

Вы также можете решить отправить данные другому OpenTelemetry Коллекционер и затем из (центра) Коллекционер далее Воляданные отправляются на склад сзади. часть。существовать Этот вид Конфигурациясередина,У нас есть один Центр из Коллекционера OpenTelemetry., он использует deployment модельразвертывать,Имеет много преимуществ,Например, автоматическое расширение.

Некоторые преимущества использования центра Коллекционериз:

  • Устранить зависимость от команды
  • Принудительная пакетная обработка、Попробуйте еще раз、шифрование、Сжатие из Конфигурация/Стратегия
  • существуют Центральное место для аутентификации
  • Богатая изданная информация
  • Принимайте решения по выборке
  • проходить HPA Расширять

развертыватьмодель Подвести итог

Ниже мы подведем итоги некоторых стратегий развертывания.

Базовая версия — использование OTLP-клиента для обнаружения авторизованных данных, отправляемых группе сборщиков.

могут быть данные Отправить нескольким экспортерам.

существовать Kubernetes начальстворазвертывать OpenTelemetry Collector режимы, которые можно использовать, когда

режим коляски:

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

режим демонсета:

Агент действует как DaemonSet, поэтому у нас есть один модуль агента на каждый узел Kubernetes.

Балансировка нагрузки — балансировка нагрузки на основе идентификатора трассировки:

Несколько кластеров - актерское мастерство、рабочая нагрузкаиплоскость управления Коллекционер:

Мультиарендная модель

Два арендатора, у каждого свой егерь.

Режим сигнала

Два Коллекционера, каждый Коллекционер соответствует типу данных телеметрии.

Серверная часть OpenTelemetry

OpenTelemetry Коллекционер не предлагает себе иззаднюю часть, поэтому можно использовать продукт любого поставщика или продукт с открытым исходным кодом!

Хотя OpenTelemetry не предоставляет собственную серверную часть, используя ее, мы не зависим от какого-либо инструмента или поставщика, поскольку она не зависит от поставщика. Мы не только можем использовать любой язык программирования, который хотим, но также можем выбрать серверную часть хранилища и легко переключиться на другую серверную часть/поставщика, просто настроив другой экспортер.

Для визуализации и анализа данных телеметрии,Нам просто нужно существование OpenTelemetry Тип сборщика настраивает экспортер.

например Jaeger — очень популярный продукт с открытым исходным кодом для анализа и запросов.

нас Можетсуществовать OpenTelemetry Коллекционерсередина Конфигурация Jaeger экспортер для отправки данных Jaeger。

Язык кода:javascript
копировать
exporters:
  jaeger:
    endpoint: "http://localhost:14250"

OpenTelemetry on Kubernetes

существовать Kubernetes Использовать на OpenTelemetry,В основномразвертывать OpenTelemetry Коллекционер. Мы рекомендуем использовать OpenTelemetry Operator Приходите на развертывание, так как это помогает нам легко управлять развертыванием. OpenTelemetry Коллекционер,возвращаться Может Автоматическое обнаружениеприложение.

развертывать

Здесь мы используем Helm Chart Приходитьразвертывать OpenTelemetry Оператор, добавьте сначала Helm Chart склад:

Язык кода:javascript
копировать
$ helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
$ helm repo update

По умолчанию для проверки используется развертывание одного контроллера допуска. OpenTelemetry Operator Конфигурация правильная? Для того, чтобы сделать? APIServer умеющий работать с Webhook Компоненты взаимодействуют с веб-перехватчиками нужен APIServer Настроить как доверенный TLS Сертификат.

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

Язык кода:javascript
копировать
$ helm upgrade --install --set admissionWebhooks.certManager.enabled=false --set admissionWebhooks.certManager.autoGenerateCert=true opentelemetry-operator open-telemetry/opentelemetry-operator --namespace kube-otel --create-namespace

После завершения обычной развертывания вы увидите соответствующий из Pod Уже работает нормально:

Язык кода:javascript
копировать
$ kubectl get pods -n kube-otel -l app.kubernetes.io/name=opentelemetry-operator
NAME                                      READY   STATUS    RESTARTS   AGE
opentelemetry-operator-6f77dc895c-4wn8z   2/2     Running   0          33s

Кроме того, для нас будут автоматически добавлены два CRD, связанные с OpenTelemetry:

Язык кода:javascript
копировать
$ kubectl get crd |grep opentelemetry
instrumentations.opentelemetry.io           2023-09-05T03:23:28Z
opentelemetrycollectors.opentelemetry.io    2023-09-05T03:23:28Z

Иди сюда OpenTelemetry Operator Сразуразвертыватьзаконченный。

Тогда мы решили использовать центр здесь OpenTelemetry Коллекционер и пусть другие OpenTelemetry актерское Мастерство мастера отправлено коллекционеру мастерство получает и зданные Волясуществовать этот Коллекционер обрабатывается и проходит, экспортер отправляет на склад часть. Весь рабочий процесс показан ниже:

Создайте его, как показано ниже. OpenTelemetryCollector Экземплярный объект:

Язык кода:javascript
копировать
# central-collector.yaml
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
  name: simplest
spec:
  config: |
    receivers:
      otlp:
        protocols:
          grpc:
          http:
    processors:
      memory_limiter:
        check_interval: 1s
        limit_percentage: 75
        spike_limit_percentage: 15
      batch:
        send_batch_size: 10000
        timeout: 10s

    exporters:
      logging:
      otlp:
        endpoint: "<tempo_endpoint>"
        headers:
          authorization: Basic <api_token> # echo -n "<your user id>:<your api key>" | base64

    service:
      pipelines:
        traces:
          receivers: [otlp]
          processors: [memory_limiter, batch]
          exporters: [logging, otlp]

существоватьздесь OpenTelemetry Collector проходить grpc и http Два протокола для получения данных телеметрии и передачи записей для экспорта и Grafana Tempo записать эти Спан, это будет Span написать получить Span из OpenTelemetry Collector Пример изConsole и Grafana Tempo Перейти к бэкэнду.

Тогда мы будем использовать Sidecar модельразвертывать OpenTelemetry актерское мастерство。Долженактерское Мастерство Воля Приложение по отслеживанию отправлено в наш центр (шлюз) OpenTelemetry Коллекционер。

Язык кода:javascript
копировать
# sidecar.yaml
apiVersion: opentelemetry.io/v1alpha1
kind: OpenTelemetryCollector
metadata:
  name: sidecar
spec:
  mode: sidecar
  config: |
    receivers:
      otlp:
        protocols:
          grpc:
          http:
    processors:
      batch:
    exporters:
      logging:
      otlp:
        endpoint: "<path_to_central_collector>.<namespace>:4317"
    service:
      telemetry:
        logs:
          level: "debug"
      pipelines:
        traces:
          receivers: [otlp]
          processors: []
          exporters: [logging, otlp]

Автоматическое обнаружение

OpenTelemetry Operator Можно вводить и Конфигурация OpenTelemetry Автоматическое Обнаружение библиотеки. В настоящее время поддерживается DotNet、Java、NodeJS、Python и Golang (необходимо включить вручную).

Чтобы использовать Автоматическое Обнаружения, нужно быть SDK и Обнаружение Конфигурациядобавить водин Instrumentation ресурс.напримердля Java приложение, настроенное следующим образом.

Язык кода:javascript
копировать
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
  name: java-instrumentation
spec:
  propagators:
    - tracecontext
    - baggage
    - b3
  sampler:
    type: always_on
  java:

Если это приложение Python, конфигурация следующая:

Язык кода:javascript
копировать
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
  name: python-instrumentation
spec:
  propagators:
    - tracecontext
    - baggage
    - b3
  sampler:
    type: always_on
  python:

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

Язык кода:javascript
копировать
annotations:
  instrumentation.opentelemetry.io/inject-java: "true"
  sidecar.opentelemetry.io/inject: "true"

Образец заявления

Здесь мы используем имя один вместо Воля. Petclinic из Java приложение, которое представляет собой использование Maven или Gradle Построить из Spring Boot Приложение. Приложение, которое использует Воля. OpenTelemetry Сгенерируйте данные.

для Java Приложения, которые мы можем скачать OpenTelemetry Предоставить из opentelemetry-javaagent этот jar пакет для использования OpenTelemetry Автоматическое обнаружениеприложение.

Просто Воляэтот jar Сумкадобавить вприезжать Приложения Команда запускасередина Вот и все,например:

Язык кода:javascript
копировать
java -javaagent:opentelemetry-javaagent.jar -jar target/*.jar

Java Автоматическое Обнаружение использования может быть прикреплено к любому Java 8+ Приложения Java актерское мастерство БАНКА. Он динамически внедряет байт-код для сбора данных телеметрии из многих популярных библиотек и платформ. Его можно использовать для захвата «границы» приложения или службы из данных телеметрии, таких как входящие запросы, исходящие HTTP вызов、данные Библиотекавызовждать.проходить Запустить какначальство Заказ,Мы можем инструментировать приложение,и сгенерировать данные ссылки,И в нашем приложении нет никаких изменений.

особенносуществовать Kubernetes среду, мы можем использовать OpenTelemetry Operator внедрить и Конфигурацию OpenTelemetry Автоматическое Обнаружение библиотеки, так что подключайтесь javaagent Нам больше не нужно вводить вручную.

Мы сначаларазвертывать Petclinic приложение.

Язык кода:javascript
копировать
apiVersion: apps/v1
kind: Deployment
metadata:
  name: petclinic
spec:
  selector:
    matchLabels:
      app: petclinic
  template:
    metadata:
      labels:
        app: petclinic
    spec:
      containers:
        - name: app
          image: cnych/spring-petclinic:latest

Тогда мы делаем Java Приложение добавляет Instrumentation ресурс.

Язык кода:javascript
копировать
# java-instrumentation.yaml
apiVersion: opentelemetry.io/v1alpha1
kind: Instrumentation
metadata:
  name: java-instrumentation
spec:
  propagators:
    - tracecontext
    - baggage
    - b3
  sampler:
    type: always_on
  java:
    image: ghcr.io/open-telemetry/opentelemetry-operator/autoinstrumentation-java:latest

Чтобы включить Автоматическое Обнаружение, нам необходимо обновить развернутый файл и добавить к нему аннотации. Таким образом мы можем сказать OpenTelemetry Operator Воля sidecar и java-instrumentation Внедрён в наше приложение. Исправлять Deployment Конфигурация следующая:

Язык кода:javascript
копировать
# petclinic.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: petclinic
spec:
  selector:
    matchLabels:
      app: petclinic
  template:
    metadata:
      labels:
        app: petclinic
      annotations:
        instrumentation.opentelemetry.io/inject-java: "true"
        sidecar.opentelemetry.io/inject: "sidecar"
    spec:
      containers:
        - name: app
          image: cnych/spring-petclinic:latest

а затем создайте еще один NodePort Тип из Service Сервисы по выставлению приложения.

Язык кода:javascript
копировать
# petclinic-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: petclinic
spec:
  selector:
    app: petclinic
  type: NodePort
  ports:
    - protocol: TCP
      port: 80
      targetPort: 8080

Просто примените приведенный выше список ресурсов напрямую:

Язык кода:javascript
копировать
$ kubectl apply -f central-collector.yaml
$ kubectl apply -f sidecar.yaml
$ kubectl apply -f java-instrumentation.yaml
$ kubectl apply -f petclinic.yaml
$ kubectl apply -f petclinic-svc.yaml

После завершения обычной развертывания вы увидите соответствующий из Pod Уже работает нормально:

Язык кода:javascript
копировать
$ kubectl get pods
NAME                                 READY   STATUS    RESTARTS   AGE
petclinic-6fdd56f4d7-qfff7           2/2     Running   0          62s
simplest-collector-87d8bf9bf-dh8pl   1/1     Running   0          36m
$ kubectl get svc
NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)                        AGE
petclinic                       NodePort    10.103.6.52      <none>        80:30941/TCP                   46s
simplest-collector              ClusterIP   10.102.131.126   <none>        4317/TCP,4318/TCP              17m
simplest-collector-headless     ClusterIP   None             <none>        4317/TCP,4318/TCP              17m
simplest-collector-monitoring   ClusterIP   10.98.65.171     <none>        8888/TCP                       17m

Тогда мы сможем провести http://<node_ip>:30941 прийти в гости Petclinic приложение.

Когда мы получаем доступ к приложению,Приложение генерирует следы на Воляданных,и Воляпришлите это намизсередина Сердце Коллекционер。нас Можетпроходитьдоступ Grafana Tempo Чтобы просмотреть данные отслеживания, вы также можете посетить консоль центра Коллекционериз для просмотра данных отслеживания. Потому что мы существуем Центр Коллекционер в Конфигурация экспортера записей и Grafana Tempo Два экспортера, конечно, можно настроить и другие экспортеры.

Язык кода:javascript
копировать
$ kubectl logs -f petclinic-6fdd56f4d7-qfff7 -c otc-container
# ......
2023-09-10T04:11:41.164Z        info    TracesExporter  {"kind": "exporter", "data_type": "traces", "name": "logging", "resource spans": 1, "spans": 76}
2023-09-10T04:12:11.012Z        info    TracesExporter  {"kind": "exporter", "data_type": "traces", "name": "logging", "resource spans": 1, "spans": 3}
2023-09-10T04:12:16.221Z        info    TracesExporter  {"kind": "exporter", "data_type": "traces", "name": "logging", "resource spans": 1, "spans": 23}
^C
$ kubectl logs -f simplest-collector-677f4779ff-x8h2m
# ......
2023-09-10T04:11:09.221Z        info    service/service.go:161  Everything is ready. Begin running and processing data.
2023-09-10T04:11:49.222Z        info    TracesExporter  {"kind": "exporter", "data_type": "traces", "name": "logging", "resource spans": 1, "spans": 76}
2023-09-10T04:12:19.224Z        info    TracesExporter  {"kind": "exporter", "data_type": "traces", "name": "logging", "resource spans": 2, "spans": 26}

Таким образом, Grafana Tempo также может видеть соответствующие данные трассировки:

Аналогично, если вы добавите еще один Jaeger из экспортера, то вы также можете существовать Jaeger См. соответствующие данные трассировки в.

Если у вас возникнут какие-либо проблемы в процессе развертывания, мы можем провести просмотр приложения и контейнера и своевременно устранить неполадки.

Подвести итог

существуют В этой статье,Мы демонстрируем, как реализовать отслеживание в приложении с помощью оператора OpenTelemetry.,без изменения какого-либо кода.

Конечно, есть много другого контента, который не был охвачен. OpenTelemetry используется в Prometheus Приходитьсобиратьиндексданные,каксуществовать OpenTelemetry используется в Loki Приходите и собирайте бревноданные и многое другое, в том числе некоторые стратегии выбора, коммуникаторы, пакетные процессоры, Ручное обнаружениеждатьждать.

Справочная документация

  • https://medium.com/@magstherdev/opentelemetry-up-and-running-b4c58eaf8c05
  • https://medium.com/@magstherdev/opentelemetry-on-kubernetes-c167f024b35f
  • https://medium.com/@magstherdev/opentelemetry-in-action-fc61263c852
  • https://github.com/open-telemetry/opentelemetry-go-instrumentation
boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose