Exporters

You are viewing the English version of this page because it has not yet been fully translated. Interested in helping out? See Contributing.

将遥测数据发送到 OpenTelemetry Collector,以确保其被正确导出。 在生产环境中使用 Collector 是最佳实践。若要可视化你的遥测数据,可将其导出到后端系统,例如 JaegerZipkinPrometheus,或某个特定厂商的后端。

可用的导出器

镜像仓库中包含一份 Ruby 可用导出器的列表

在所有导出器中,OpenTelemetry 协议 (OTLP) 导出器是以 OpenTelemetry 数据模型为基础设计的, 能够无信息丢失地输出 OTel 数据。此外,许多处理遥测数据的工具都支持 OTLP (例如 PrometheusJaeger 和大多数厂商),在你需要时为你提供高度的灵活性。 若要了解更多关于 OTLP 的信息,请参阅 OTLP 规范

本页面介绍了主要的 OpenTelemetry Ruby 导出器以及如何进行配置。

OTLP endpoint

To send trace data to a OTLP endpoint (like the collector or Jaeger) you’ll want to use an exporter package, such as opentelemetry-exporter-otlp:

bundle add opentelemetry-exporter-otlp
gem install opentelemetry-exporter-otlp

Next, configure the exporter to point at an OTLP endpoint. For example you can update config/initializers/opentelemetry.rb from the Getting Started by adding require 'opentelemetry-exporter-otlp' to the code:

# config/initializers/opentelemetry.rb
require 'opentelemetry/sdk'
require 'opentelemetry/instrumentation/all'
require 'opentelemetry-exporter-otlp'
OpenTelemetry::SDK.configure do |c|
  c.service_name = 'dice-ruby'
  c.use_all() # enables all instrumentation!
end

If you now run your application it will use OTLP to export traces:

rails server -p 8080

By default traces are sent to an OTLP endpoint listening on localhost:4318. You can change the endpoint by setting the OTEL_EXPORTER_OTLP_ENDPOINT accordingly:

env OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:4318" rails server -p 8080

To try out the OTLP exporter quickly and see your traces visualized at the receiving end, you can run Jaeger in a docker container:

docker run -d --name jaeger \
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  -e COLLECTOR_OTLP_ENABLED=true \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 4317:4317 \
  -p 4318:4318 \
  -p 14250:14250 \
  -p 14268:14268 \
  -p 14269:14269 \
  -p 9411:9411 \
  jaegertracing/all-in-one:latest

Zipkin

To set up Zipkin as quickly as possible, run it in a docker container:

docker run --rm -d -p 9411:9411 --name zipkin openzipkin/zipkin

Install the exporter package as a dependency for your application:

bundle add opentelemetry-exporter-zipkin
gem install opentelemetry-exporter-zipkin

Update your OpenTelemetry configuration to use the exporter and to send data to your Zipkin backend:

# config/initializers/opentelemetry.rb
require 'opentelemetry/sdk'
require 'opentelemetry/instrumentation/all'

require 'opentelemetry-exporter-zipkin'
OpenTelemetry::SDK.configure do |c|
  c.service_name = 'dice-ruby'
  c.use_all() # enables all instrumentation!
end

If you now run your application, set the environment variable OTEL_TRACES_EXPORTER to Zipkin:

env OTEL_TRACES_EXPORTER=zipkin rails server

By default traces are sent to a Zipkin endpoint listening on port localhost:9411. You can change the endpoint by setting the OTEL_EXPORTER_ZIPKIN_ENDPOINT accordingly:

env OTEL_EXPORTER_OTLP_ENDPOINT="http://localhost:9411" rails server