Експортери
Надсилайте телеметрію до 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, який використовується в цьому підручнику.
Відгук
Чи це було корисним?
Дякуємо. Ми цінуємо ваші відгуки!
Будь ласка, дайте нам знати як ми можемо покращити цю сторінку. Ми цінуємо ваші відгуки!