Разрушители мифов наблюдаемости: Насколько сложно начать работу с OpenTelemetry?

Итак, вы новичок в Observability, OpenTelemetry и Lightstep, и вы хотите отправить трассы в Lightstep, чтобы понять, как все происходит. Но вы не уверены, как начать. Многое нужно изучить и принять, и все может стать довольно подавляющим, довольно быстро, не так ли? Я вас понимаю. Со мной такое уже было. Это было со мной в прошлом году. Солидарен!!!

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

Демо-репо OpenTelemetry было создано для того, чтобы снизить барьер для входа в OpenTelemetry и проиллюстрировать ее потрясающие возможности. В нем представлен полностью функционирующий интернет-магазин, состоящий из нескольких микросервисов, написанных на разных языках, поддерживаемых OpenTelemetry, которые могут отправлять трассировки в Observability back end, например, Lightstep. (ОМГ, как много слов!) Самое главное, я обнаружил, что его очень легко настроить и запустить!

В сегодняшнем уроке я покажу вам, как получить трассы, созданные OpenTelemetry Demo, в Lightstep. В примере используется коллектор OpenTelemetry (OTel) для получения трасс и отправки их в Observability back-end, которым в нашем случае будет Lightstep.

Несколько важных замечаний:

  • Я предполагаю, что у вас есть базовое понимание OpenTelemetry и Observability. Если нет, посмотрите этот отличный обзор OpenTelemetry и Observability oberview.
  • Я не буду рассматривать инструментарий приложения с помощью OpenTelemetry — наша цель состоит лишь в том, чтобы получить данные трассировки в Lightstep через OTel Collactor.

Прежде чем мы начнем учебник, давайте сделаем краткий обзор OTel Collector, чтобы вы могли понять, как вы получаете данные в Lightstep!

OTel Collector 101

Коллектор OpenTelemetry (OTel) — это нейтральный сервис, который принимает, преобразует и экспортирует данные в одну или несколько систем Observability.

OTel Collector состоит из 3 основных компонентов:

  • Приемники принимают данные. Примеры источников данных включают: кластеры Kubernetes, Prometheus и код приложений.
  • Процессоры преобразуют данные. Это может включать добавление/удаление данных, изменение данных (например, маскирование данных) и даже фильтрацию данных.
  • Экспортеры отправляют данные на внутренний сервер Observability. В нашем случае это Lightstep. Lightstep принимает данные OTel нативно, используя протокол OpenTelemetry Protocol (OTLP).

Конвейеры используются для определения того, как данные поступают в коллектор OTel и выводятся из него.

Более подробную информацию о коллекторе OTel Collector можно найти на официальном сайте OTel docs.

ПРИМЕЧАНИЕ: Хотя ваш инструментальный код технически может отправлять данные непосредственно в Observability back-end (например, Lightstep) без коллектора, это не совсем правильный способ. Вы всегда должны направлять все данные OTel (независимо от источника) на ваш back-end через OTel Collector.

Запуск OTel Collector

Существует несколько способов развертывания OTel Collector; однако сегодня мы будем действовать просто и локально, используя Docker Compose, который запускает Docker.

Конфигурация

OTel Collector конфигурируется с помощью YAML.

Файл YAML используется для определения приемников, процессоров, экспортеров и конвейеров.

Учебник

А теперь момент, которого вы все так долго ждали — учебник! Давайте сделаем это!

В этом учебнике мы будем использовать модифицированную версию демонстрационного репозитория OpenTelemetry. Это репо было изменено, чтобы продемонстрировать, как отправлять данные в Lightstep с помощью OTel Collector. В то время как исходная версия содержит конфигурации для отправки данных на локальную установку Jaeger, модифицированная версия содержит конфигурации для отправки данных на Lightstep. Мы будем синхронизировать репо Lightstep с репо Upstream.

Предварительные требования

  • Docker и Docker Compose
  • Учетная запись Lightstep
  • Токен доступа Lightstep

Запуск демонстрационного приложения локально

  1. Клонируйте репозиторий

    git clone https://github.com/lightstep/opentelemetry-demo.git
    
  2. Отредактируйте файл конфигурации OTel Collector

    cd opentelemetry-demo
    

    Откройте otelcollector/otelcol-lightstep.yml для редактирования с помощью вашего любимого редактора. Файл выглядит следующим образом:

    receivers:
      otlp:
        protocols:
          grpc:
          http:
    
    exporters:
      logging:
        logLevel: debug
      otlp/ls:
        endpoint: ingest.lightstep.com:443
        headers: 
          "lightstep-access-token": <lightstep_access_token>
    
    processors:
      batch:
    
    service:
      pipelines:
        traces:
          receivers: [otlp]
          processors: [batch]
          exporters: [logging, otlp/ls]
    

    Замените <lightstep_access_token> на свой собственный токен доступа Lightstep и сохраните файл. Токен доступа указывает, в какой проект Lightstep отправлять данные телеметрии.

    Несколько примечательных моментов:

    • Lightstep принимает данные в родном формате OpenTelemetry Protocol (OTLP), поэтому мы будем использовать OTLP Exporter. Экспортер может называться либо otlp, либо следовать формату именования otlp/<something>. Мы можем назвать его otlp/bob, если захотим. Мы называем наш экспортер otlp/ls, чтобы сигнализировать, что мы используем OTLP-экспортер для отправки данных в Lightstep.
    • Хотя это и не обязательно, мы также используем экспортер протоколирования. Это полезно, поскольку он печатает наши трассировки в stdout коллектора. Как вы можете себе представить, это отлично подходит для отладки, особенно если вы видите, что трассировки отправляются в stdout, но не на ваш back-end.
    • Мы должны определить конвейер в разделе service.pipelines конфигурации YAML. В частности, нам нужно определить конвейер для наших интерфейсов. Конвейер указывает сборщику:
      • Откуда он получает данные трассировки (они отправляются через OTLP).
      • Нужно ли выполнить какую-либо обработку (это необязательно).
      • Куда отправить данные. В нашем случае это stdout (через Logging Exporter) и Lightstep (через OTLP Exporter).
    • Коллектор может получать данные, используя HTTP и gRPC. Конфигурация receivers может показаться пустой; однако на самом деле это означает, что мы используем значения по умолчанию для конфигурации receivers. Это фактически то же самое, что сказать:
    receivers:
      otlp:
        protocols:
          grpc:
            endpoint: 0.0.0.0:4317
          http:
            endpoint: 0.0.0.0:4318
    

    СОВЕТ: Если вы обнаружили, что не можете увидеть данные в Lightstep, убедитесь, что вы определили конвейер, и что в экспортере конвейера указан ваш экспортер otlp/ls. Могу сказать, что дважды на этой неделе я забывал добавить свой экспортер в конвейер и сидел перед компьютером в полной панике, пытаясь понять, почему я могу видеть свои трассы в stdout, но не в Lightstep. 😱

  3. Запустите пример приложения

    Если вы еще не в корне репозитория, убедитесь, что вы там:

    cd opentelemetry-demo
    

    Запустите Docker compose

    docker compose -f docker-compose-ls.yml up
    

    ПРИМЕЧАНИЕ: Если вы собираете образы Docker в первый раз, это может занять около 20 минут. Будьте терпеливы. В отличие от меня. 😊

    Когда приложение будет запущено, вы увидите, что текст постоянно прокручивается вниз по экрану. Это ожидаемо!!! Пример вывода выглядит примерно так:

    ASIDE: После запуска приложения я все ждал, когда прокручивающийся текст остановится, и только потом понял, что «О, эта штука работает. Похоже, теперь я могу получить доступ к URL!». 🙄

    Поскольку мы добавили наш Logging Exporter в определение нашего конвейера, вы также увидите, как он прокручивается мимо вас в терминале:

    ПРИМЕЧАНИЕ: Очевидно, что Logging Exporter более полезен, когда он не запущен вместе с кучей других сервисов, конкурирующих за ваше внимание на терминале. Это будет более полезно, если вы запускаете его в Kubernetes или Nomad, или запускаете отдельно с Docker.

    Теперь вы можете получить доступ к демонстрационному приложению: http://localhost:8080.

    Обязательно поиграйте вокруг. Просмотреть. Добавляйте товары в корзину. Удалите товары из корзины. Оформите заказ.

  4. Просмотр следов в Lightstep

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

И это все! Разве я не говорил вам? Довольно просто!

Проблемы

Недавно я обнаружил, что при первом запуске docker compose, он не может получить образы из GHCR (ghcr.io/open-telemetry/demo), и вместо этого пытается собрать Docker-файлы локально, чего лично я хотел бы избежать, если для меня уже есть прекрасный предварительно собранный образ. Если вы обнаружите, что это происходит с вами, вместо этого укажите на образы на Docker Hub в файле .env:

IMAGE_VERSION=v0.3.4-alpha
IMAGE_NAME=otel/demo
Войти в полноэкранный режим Выйти из полноэкранного режима

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

Заключение

Сегодня мы увидели, как легко получить данные трассировки в Lightstep с помощью модифицированной версии демонстрационного веб-магазина OpenTelemetry, в котором используется наш хороший друг, коллектор OTel.

Теперь, когда вы смогли получить данные трассировки в Lightstep, я призываю вас поиграть с ними. Если у вас есть вопросы по Observability или OTel, заходите в Lightstep Community Discord или пишите по электронной почте.

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

Мира, любви и кода. 🦄 🌈 💫


Демонстрационное веб-приложение OpenTelemetry всегда ищет отзывы и участников. Пожалуйста, присоединяйтесь к сообществу OTel, чтобы помочь сделать OpenTelemetry AWESOME!

Оцените статью
devanswers.ru
Добавить комментарий