Exporters
发送遥测数据到 OpenTelemetry Collector,以确保其正确导出。在生产环境中使用 Collector 是一种最佳实践。要可视化您的遥测数据,请将其导出到后端,例如 Jaeger、Zipkin、Prometheus 或 特定厂商 的后端。
可用导出器
注册表包含一个 Erlang/Elixir 的 exporter 列表。
在导出器中,OpenTelemetry Protocol (OTLP) 导出器是按照 OpenTelemetry 数据模型设计的,可以无损地发出 OTel 数据。此外,许多处理遥测数据的工具都支持 OTLP(例如 Prometheus、Jaeger 和大多数 厂商),为您提供高度的灵活性。要了解更多关于 OTLP 的信息,请参阅 OTLP 规范。
此页面介绍了主要的 OpenTelemetry Erlang/Elixir exporter 及其设置方法。
导出到 OpenTelemetry Collector
该 Collector 提供了一种独立于供应商的方式来接收、处理和导出遥测数据。package opentelemetry_exporter 支持通过 HTTP(默认)和 gRPC 导出到 collector,后者可以将 Span 导出到自托管服务(如 Zipkin 或 Jaeger)以及商业服务。有关可用 exporter 的完整列表,请参阅 registry。
设置 Collector
出于测试目的,您可以在项目根目录中使用以下 Collector 配置开始
# otel-collector-config.yaml
# OpenTelemetry Collector config that receives OTLP and exports to 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,通过 docker-compose 启动 Collector,并使用 HTTP 和 gRPC 接收器,然后导出到 Zipkin。
要导出到正在运行的 Collector,必须在项目的依赖项中添加 opentelemetry_exporter package,早于其他 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 之前,以确保 exporter 的依赖项在 SDK 尝试初始化和使用 exporter 之前启动。
rebar.config 中 Release 配置以及 mix 的 Release 任务的示例
%% 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。注意
- 如果为
otlp_protocol使用grpc,则端点应更改为https://:4317。 - 如果您使用的是上面的 docker compose 文件,则应将
localhost替换为otel。
%% config/sys.config.src
[
{opentelemetry,
[{span_processor, batch},
{traces_exporter, otlp}]},
{opentelemetry_exporter,
[{otlp_protocol, http_protobuf},
{otlp_endpoint, "https://: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: "https://:4318"
# otlp_endpoint: "http://otel:4318" if using docker compose file
您可以通过在一个终端中运行 docker compose up,然后在另一个终端中运行 mix phx.server 来查看您的 traces。在向应用程序发送一些请求后,转到 https://:16686,从 Service 下拉列表中选择 roll_dice_app,然后单击“Find Traces”。
注意事项
某些环境不允许容器以 root 用户身份执行。如果您在这样的环境中工作,可以在本教程中使用的 docker-compose.yml 文件的 otel 服务中,将 user: "1001" 添加为顶层键/值对。