Експортери

Надсилайте телеметрію до OpenTelemetry Collector, щоб переконатися, що вона експортується правильно. Використання Collector у виробничих середовищах є найкращою практикою. Щоб візуалізувати вашу телеметрію, експортуйте її до бекенду, такого як Jaeger, Zipkin, Prometheus або бекенд, специфічний для постачальника.

Доступні експортери

Реєстр містить список експортерів для Erlang/Elixir.

Серед експортерів, експортери OpenTelemetry Protocol (OTLP) розроблені з урахуванням моделі даних OpenTelemetry, що передають дані OTel без втрати інформації. Крім того, багато інструментів, які працюють з телеметричними даними, підтримують OTLP (таких як Prometheus, Jaeger і більшість постачальників), надаючи вам високий ступінь гнучкості, коли це потрібно. Щоб дізнатися більше про OTLP, дивіться Специфікацію OTLP.

Ця сторінка охоплює основні експортери OpenTelemetry Erlang/Elixir та як їх налаштувати.

Експорт до OpenTelemetry Collector

Collector надає незалежний від постачальника спосіб отримання, обробки та експорту телеметричних даних. Пакунок opentelemetry_exporter підтримує експорт як через HTTP (стандартно), так і через gRPC до колектора, який потім може експортувати Відрізки до самостійно розміщених сервісів, таких як Zipkin або Jaeger, а також до комерційних сервісів. Для повного списку доступних експортерів, дивіться реєстр.

Налаштування Collector

Для тестування ви можете почати з наступної конфігурації Collector в корені вашого проєкту:

# otel-collector-config.yaml

# Конфігурація OpenTelemetry Collector, яка отримує OTLP і експортує до Jager
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: '0.0.0.0:4317'
      http:
        endpoint: '0.0.0.0:4318'
exporters:
  debug:
  otlp/jaeger:
    endpoint: jaeger-all-in-one:4317
    tls:
      insecure: true
    sending_queue:
      batch:
service:
  pipelines:
    traces:
      receivers: [otlp]
      exporters: [debug, otlp/jaeger]

Для більш детального прикладу ви можете переглянути конфігурацію яку opentelemetry-erlang використовує для тестування.

Для цілей цього підручника ми запустимо Collector як образ docker поряд з нашим застосунком. Для цього підручника ми продовжимо з прикладом Dice Roll з розділу Початок роботи

Додайте цей файл docker-compose до кореня вашого застосунку:

# docker-compose.yml
version: '3'
services:
  otel:
    image: otel/opentelemetry-collector-contrib:0.98.0
    command: ['--config=/conf/otel-collector-config.yaml']
    ports:
      - 4317:4317
      - 4318:4318
    volumes:
      - ./otel-collector-config.yaml:/conf/otel-collector-config.yaml
    links:
      - jaeger-all-in-one

  jaeger-all-in-one:
    image: jaegertracing/all-in-one:latest
    ports:
      - '16686:16686'

Ця конфігурація використовується в docker-compose.yml для запуску Collector з приймачами для HTTP та gRPC, які потім експортують до Zipkin також запущений за допомогою docker-compose.

Щоб експортувати до запущеного Collector, пакунок opentelemetry_exporter повинен бути доданий до залежностей проєкту перед залежностями opentelemetry:

{deps, [{opentelemetry_exporter, "~> 1.8"},
        {opentelemetry_api, "~> 1.4"},
        {opentelemetry, "~> 1.5"}]}.
def deps do
  [
    {:opentelemetry_exporter, "~> 1.8"},
    {:opentelemetry_api, "~> 1.4"},
    {:opentelemetry, "~> 1.5"}
  ]
end

Потім його слід додати до конфігурації Release перед SDK Application, щоб забезпечити запуск залежностей експортера перед тим, як SDK спробує ініціалізувати та використовувати експортер.

Приклад конфігурації Release у rebar.config та для завдання Release mix:

%% rebar.config
{relx, [{release, {my_instrumented_release, "0.1.0"},
         [opentelemetry_exporter,
	      {opentelemetry, temporary},
          my_instrumented_app]},

       ...]}.
# mix.exs
def project do
  [
    releases: [
      my_instrumented_release: [
        applications: [opentelemetry_exporter: :permanent, opentelemetry: :temporary]
      ],

      ...
    ]
  ]
end

Нарешті, конфігурація часу виконання opentelemetry та opentelemetry_exporter Applications налаштована на експорт до Collector. Нижче наведені конфігурації показують стандартні значення, які використовуються, якщо жодні не встановлені, а саме протокол HTTP з точкою доступу localhost на порту 4318. Зверніть увагу:

  • Якщо використовується grpc для otlp_protocol, кінцеву точку слід змінити на http://localhost:4317.
  • Якщо ви використовуєте файл docker compose з вище, слід замінити localhost на otel.
%% config/sys.config.src
[
 {opentelemetry,
  [{span_processor, batch},
   {traces_exporter, otlp}]},

 {opentelemetry_exporter,
  [{otlp_protocol, http_protobuf},
   {otlp_endpoint, "http://localhost:4318"}]}]}
].
# config/config.exs
config :opentelemetry,
  resource: %{service: %{name: "roll_dice_app"}},
  span_processor: :batch,
  traces_exporter: :otlp

config :opentelemetry_exporter,
  otlp_protocol: :http_protobuf,
  otlp_endpoint: "http://localhost:4318"
  # otlp_endpoint: "http://otel:4318" якщо використовується файл docker compose

Ви можете побачити свої трасування, запустивши docker compose up в одному терміналі, потім mix phx.server в іншому. Після надсилання кількох запитів через застосунок, перейдіть до http://localhost:16686 і виберіть roll_dice_app зі списку Service, потім натисніть “Find Traces”.

Підводні камені

Деякі середовища не дозволяють контейнерам виконуватися як root користувачі. Якщо ви працюєте в такому середовищі, ви можете додати user: "1001" як ключ/значення верхнього рівня до сервісу otel у файлі docker-compose.yml, який використовується в цьому підручнику.


Востаннє змінено December 26, 2024: [uk] Ukrainian documentation for OpenTelemetry (2a3c5648)