opentelemetry.io/content/en/docs/demo/services/email.md

82 lines
1.9 KiB
Markdown

---
title: Email Service
linkTitle: Email
aliases: [emailservice]
cSpell:ignore: sinatra
---
This service will send a confirmation email to the user when an order is placed.
[Email service source](https://github.com/open-telemetry/opentelemetry-demo/blob/main/src/emailservice/)
## Initializing Tracing
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