Shard Detail

opentelemetry v0.3.4

OpenTelemetry SDK and exporters for the Crystal language

Install & Use

Add the following code to your project's shard.yml under:

dependencies to use in production
- OR -
development_dependencies to use in development

  github: jgaskins/opentelemetry



OpenTelemetry is an observability framework for cloud-native software.

This Crystal shard allows you to add it to your applications to export application telemetry to OpenTelemetry-compatible services, such as:

You can see more at the OpenTelemetry website.


  1. Add the dependency to your shard.yml:

        github: jgaskins/opentelemetry
  2. Run shards install


To use this shard, you'll need to have a service setup to receive OpenTelemetry data. In this example, we'll use Honeycomb:

require "opentelemetry"

OpenTelemetry.configure do |c|
  c.exporter =
      endpoint: URI.parse(""),
      headers: HTTP::Headers{
        # Get your Honeycomb API key from
        "x-honeycomb-team"    => ENV["HONEYCOMB_API_KEY"],
        # Name this whatever you like. Honeycomb will create the dataset when it
        # begins reporting data.
        "x-honeycomb-dataset" => ENV["HONEYCOMB_DATASET"],


Use the OpenTelemetry.trace method to create a new trace for the current fiber or to add a span inside the current trace.

OpenTelemetry.trace "outer-span" do |span|
  span["my-attribute"] = "my value"
  # do some work

  OpenTelemetry.trace "inner-span" do |span|
    span["another-attribute"] = "another value"
    # do some work

  # do some work

HTTP::Server middleware

If you are instrumenting a Crystal web app, you will want to add a OpenTelemetry::Middleware instance to your server middleware stack, passing in the name of the root span.

http =[
  # ..."http.server.request"),
  # ...


You enable many integrations simply by requiring them. They will be instrumented automatically.

# Load the integration for the crystal-lang/crystal-db shard
require "opentelemetry/integrations/db"

You can see all of the integrations available in the integrations directory.


  1. Fork it (
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request