Aspecto::OpenTelemetry

Gem Version

Aspecto's SDK for ruby.
This gem is a distribution of OpenTelemetry pre-configured to use all available instrumentations and export trace data to Aspecto.

Installation

Install the gem using:

$ gem install aspecto-opentelemetry

Or, if you use bundler, include aspecto-opentelemetry in your Gemfile.

Usage

Rails Applications

Add this code to a new file aspecto.rb under config/initializers/:

# config/initializers/aspecto.rb
require 'aspecto/opentelemetry'

Aspecto::OpenTelemetry::configure do |c|
  c.service_name = '<YOUR_SERVICE_NAME>'
  c.aspecto_auth = '<YOUR_ASPECTO_TOKEN>'
  # c.sampling_ratio = 1.0 # [optional]: defaults to 1.0, use aspecto app to configure remotely
end

Ruby Applications

Add this code after your require other gems:

require 'aspecto/opentelemetry'

Aspecto::OpenTelemetry::configure do |c|
  c.service_name = '<YOUR_SERVICE_NAME>'
  c.aspecto_auth = '<YOUR_ASPECTO_TOKEN>'
  # c.env = '<CURRENT_ENVIRONMENT>' # [optional]: automatically detected for rails and sinatra
  # c.sampling_ratio = 1.0 # [optional]: defaults to 1.0, use aspecto app to configure remotely
end

Shutdown

Call this function when your application shuts down

Aspecto::OpenTelemetry::shutdown

Configuration

You can set configuration via environment variables or via code. Values set in code takes precedence. The only required config options are aspecto_auth and service_name.

Configuration Options

Option Name Environment Variable Type Default Description
aspecto_auth ASPECTO_AUTH UUID string - Aspecto's API key for authentication
service_name OTEL_SERVICE_NAME string - Name of the service which is sending telemetry
env ASPECTO_ENV string Extracted from Rails or Sinatra if used Deployment environment: production / staging / development, etc.
log_level OTEL_LOG_LEVEL string ERROR ERROR / WARN / INFO, etc.
sampling_ratio ASPECTO_SAMPLING_RATIO float 1.0 How many of the traces starting in this service should be sampled. set to number in range [0.0, 1.0] where 0.0 is no sampling, and 1.0 is sample all
otel_exporter_otlp_traces_endpoint OTEL_EXPORTER_OTLP_TRACES_ENDPOINT URL https://otelcol.aspecto.io/v1/trace Url
require_config_for_traces ASPECTO_REQUIRE_CONFIG_FOR_TRACES boolean false When true, the SDK will not trace anything until remote sampling configuration arrives (few hundreds ms). Can be used to enforce sampling configuration is always applied, with the cost of losing traces generated during service startup.
extract_b3_context ASPECTO_EXTRACT_B3_CONTEXT boolean false Set to true when the service receives requests from another instrumented component that propagate context via B3 protocol multi or single header. For example: Envoy Proxy, Ambassador and Istio
inject_b3_context_single_header ASPECTO_INJECT_B3_CONTEXT_SINGLE_HEADER boolean false Set to true when the service send traffic to another instrumented component that propagate context via B3 single header protocol
inject_b3_context_multi_header ASPECTO_INJECT_B3_CONTEXT_MULTI_HEADER boolean false Set to true when the service send traffic to another instrumented component that propagate context via B3 multi header protocol. For example: Envoy Proxy, Istio

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/aspecto-io/aspecto-opentelemetry-ruby.