opentelemetry_exporter View Source
The OpenTelemetry Protocol exporter for use with the OpenTelemetry Collector. The version of this Application does not track the supported version of the OpenTelemetry Protocol (OTLP). The currently used version of the OTLP protobufs is v0.11.0.
Currently only supports the Tracer protocol using either GRPC or Protobuffers over HTTP1.1.
Configuration
Options to Batch Processor
Exporter configuration can be done as arguments to the batch processor in the OpenTelemetry application environment.
For an Erlang release in sys.config
:
{opentelemetry,
[{processors,
[{otel_batch_processor,
#{exporter => {opentelemetry_exporter, #{endpoints =>
["http://localhost:9090"],
headers => [{"x-honeycomb-dataset", "experiments"}]}}}}]}]}
The default protocol is http_protobuf
, to override this and use grpc add
protocol
to the config map:
{opentelemetry,
[{processors,
[{otel_batch_processor,
#{exporter => {opentelemetry_exporter, #{protocol => grpc,
endpoints => ["http://localhost:9090"],
headers => [{"x-honeycomb-dataset", "experiments"}]}}}}]}]}
An Elixir release uses releases.exs
:
config :opentelemetry, :processors,
otel_batch_processor: %{
exporter: {:opentelemetry_exporter, %{endpoints: ["http://localhost:9090"],
headers: [{"x-honeycomb-dataset", "experiments"}]}}
}
Application Environment
Alternatively the opentelemetry_exporter
Application can be configured itself.
Available configuration keys:
otlp_endpoint
: The URL to send traces and metrics to, for traces the pathv1/traces
is appended to the path in the URL.otlp_traces_endpoint
: URL to send only traces to. This takes precedence for exporting traces and the path of the URL is kept as is, no suffix is appended.otlp_headers
: List of additional headers ([{unicode:chardata(), unicode:chardata()}]
) to add to export requests.otlp_traces_headers
: Additional headers ([{unicode:chardata(), unicode:chardata()}]
) to add to only trace export requests.otlp_protocol
: The transport protocol, supported values:grpc
andhttp_protobuf
. Defaults tohttp_protobuf
.otlp_traces_protocol
: The transport protocol to use for exporting traces, supported values:grpc
andhttp_protobuf
. Defaults tohttp_protobuf
.otlp_compression
: Compression type to use, supported values:gzip
. Defaults to no compression.otlp_traces_compression
: Compression type to use for exporting traces, supported values:gzip
. Defaults to no compression.
{opentelemetry_exporter,
[{otlp_protocol, grpc},
{otlp_compression, gzip},
{otlp_endpoint, "https://api.honeycomb.io:443"},
{otlp_headers, [{"x-honeycomb-dataset", "experiments"}]}]}
An Elixir release uses releases.exs
:
config :opentelemetry_exporter,
otlp_protocol: :grpc,
otlp_compression: :gzip,
otlp_endpoint: "https://api.honeycomb.io:443",
otlp_headers: [{"x-honeycomb-dataset", "experiments"}]
The default SSL options for HTTPS requests are set using tls_certificate_check. This package also provides the CA certificates from Mozilla.
The user can override these options either as part of the endpoint or for all
endpoints used by the exporter with the Application environment variable
ssl_options
See secure coding with inets for more information on securing HTTP requests in Erlang.
OS Environment
Lastly, configuring the exporter can be done with OS environment variables, which take precedence:
OTEL_EXPORTER_OTLP_ENDPOINT
: The URL to send traces and metrics to, for traces the pathv1/traces
is appended to the path in the URL.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
: URL to send only traces to. This takes precedence for exporting traces and the path of the URL is kept as is, no suffix is appended.OTEL_EXPORTER_OTLP_HEADERS
: List of additional headers to add to export requests.OTEL_EXPORTER_OTLP_TRACES_HEADERS
: Additional headers to add to only trace export requests.OTEL_EXPORTER_OTLP_PROTOCOL
: The transport protocol to use, supported values:grpc
andhttp_protobuf
. Defaults tohttp_protobuf
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL
: The transport protocol to use for exporting traces, supported values:grpc
andhttp_protobuf
. Defaults tohttp_protobuf
.OTEL_EXPORTER_OTLP_COMPRESSION
: Compression to use, supported value: gzip. Defaults to no compression.OTEL_EXPORTER_OTLP_TRACES_COMPRESSION
: Compression to use when exporting traces, supported value: gzip. Defaults to no compression.
Example usage of setting the environment variables:
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=https://api.honeycomb.io:443
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_TRACES_COMPRESSION=gzip
OTEL_EXPORTER_OTLP_TRACES_HEADERS=x-honeycomb-team=<HONEYCOMB API TOKEN>,x-honeycomb-dataset=experiments
Contributing
This project uses a submodule during development, it is not needed if the application is being used as a dependency, so be sure to clone with the option recurse-submodules
:
$ git clone --recurse-submodules https://github.com/opentelemetry-beam/opentelemetry_exporter
Upgrading OpenTelemetry Protos
The protos are in a separate repository, opentelemetry-proto, and used as a submodule in this repo. To update the Erlang protobuf modules and GRPC client first update the submodule and then use the rebar3 grpcbox plugin to generate the client:
$ git submodule update --remote opentelemetry-proto
$ rebar3 grpc gen -t client
===> Writing src/trace_service_pb.erl
===> Writing src/opentelemetry_proto_collector_trace_v_1_trace_service_client.erl (forcibly overwriting)
$ mv src/opentelemetry_proto_collector_trace_v_1_trace_service_client.erl src/opentelemetry_trace_service.erl
Then open src/opentelemetry_trace_service.erl
and fix the module name.