Skip to content

Commit

Permalink
[email] document instrumentation (open-telemetry#388)
Browse files Browse the repository at this point in the history
* email service doc details

* add require statements
  • Loading branch information
puckpuck committed Sep 28, 2022
1 parent 3a22849 commit 91fbf3a
Showing 1 changed file with 76 additions and 0 deletions.
76 changes: 76 additions & 0 deletions docs/services/emailservice.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# email service

This service will send a confirmation email to the user when an order is placed.

[Email service source](../../src/emailservice/)

## Initialize SDK

You will need to require the core OpenTelemetry SDK and exporter Ruby gems, as
well as any gem that will be needed for auto-instrumentation libraries
(ie: Sinatra)

```ruby
require "opentelemetry/sdk"
require "opentelemetry/exporter/otlp"
require "opentelemetry/instrumentation/sinatra"
```

The Ruby SDK uses OpenTelemetry standard environment variables to configure
OTLP export, resource attributes, and service name automatically. When
initializing the OpenTelemetry SDK, you will also specify which
auto-instrumentation libraries to leverage (ie: Sinatra)

```ruby
OpenTelemetry::SDK.configure do |c|
c.use "OpenTelemetry::Instrumentation::Sinatra"
end
```

## Traces

### Add attributes to auto-instrumented spans

Within the execution of auto-instrumented code you can get current span from
context.

```ruby
current_span = OpenTelemetry::Trace.current_span
```

Adding multiple attributes to a span is accomplished using `add_attributes` on
the span object.

```ruby
current_span.add_attributes({
"app.order.id" => data.order.order_id,
})
```

Adding only a single attribute can be accomplished using `set_attribute` on the
span object.

```ruby
span.set_attribute("app.email.recipient", data.email)
```

### Create new spans

New spans can be created and placed into active context using `in_span` from an
OpenTelemetry Tracer object. When used in conjunction with a `do..end` block,
the span will automatically be ended when the block ends execution.

```ruby
tracer = OpenTelemetry.tracer_provider.tracer('emailservice')
tracer.in_span("send_email") do |span|
# logic in context of span here
end
```

## Metrics

TBD

## Logs

TBD

0 comments on commit 91fbf3a

Please sign in to comment.