Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Verify and update OTLP trace exporter documentation #2053

Merged
merged 32 commits into from Sep 2, 2021
Merged
Show file tree
Hide file tree
Changes from 19 commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
cae7a4c
Inventory the documentation for and examples of the OTLP exporter.
Submarinee Jul 3, 2021
604068f
Merge remote-tracking branch 'origin/main' into otelgo
Submarinee Jul 3, 2021
cb6825c
modify the documentation for otlptrace exporter.
Submarinee Jul 6, 2021
d071601
Update exporters/otlp/otlptrace/README.md
Submarinee Jul 7, 2021
f228643
Update exporters/otlp/otlptrace/README.md
Submarinee Jul 7, 2021
c2699ab
Merge branch 'main' into main
Submarinee Jul 8, 2021
f21d279
Merge branch 'open-telemetry:main' into main
Submarinee Jul 25, 2021
cd897ea
Update exporters/otlp/otlptrace/README.md
Submarinee Jul 25, 2021
e3edec9
Update exporters/otlp/otlptrace/README.md
Submarinee Jul 25, 2021
5608a4a
Update exporters/otlp/otlptrace/README.md
Submarinee Jul 25, 2021
1b02def
add otlptrace example_test.go
Submarinee Jul 25, 2021
af8e6ab
modify the documentation for otlptrace exporter.
Submarinee Jul 25, 2021
4f1cd37
modify the documentation for otlptrace exporter.
Submarinee Jul 25, 2021
e42228a
Merge remote-tracking branch 'otelgo/main' into otlpmetric
Submarinee Jul 25, 2021
2ac7886
Update exporters/otlp/otlptrace/example_test.go
Submarinee Jul 30, 2021
f6dea98
Update exporters/otlp/otlptrace/example_test.go
Submarinee Jul 30, 2021
b594d45
Update exporters/otlp/otlptrace/example_test.go
Submarinee Jul 30, 2021
6ccfb2c
Update exporters/otlp/otlptrace/README.md
Submarinee Jul 30, 2021
8f471b0
Merge branch 'open-telemetry:main' into main
Submarinee Jul 30, 2021
1d274e4
Update exporters/otlp/otlptrace/README.md
Submarinee Jul 30, 2021
6061d42
modify the documentation for otlptrace exporter.
Submarinee Jul 30, 2021
c437e21
Update exporters/otlp/otlptrace/README.md
Submarinee Jul 30, 2021
7ef6815
Update exporters/otlp/otlptrace/README.md
Submarinee Jul 30, 2021
50cfeac
Update exporters/otlp/otlptrace/README.md
Submarinee Jul 30, 2021
1e4b69b
Update exporters/otlp/otlptrace/README.md
Submarinee Aug 19, 2021
5359244
Update exporters/otlp/otlptrace/README.md
Submarinee Aug 19, 2021
bf334b0
Update exporters/otlp/otlptrace/README.md
Submarinee Aug 19, 2021
6df0c51
Move example to otlptracehttp package
MrAlias Sep 2, 2021
1fb0f70
Unexport example functions
MrAlias Sep 2, 2021
aef81d7
Fix markdownlint errors
MrAlias Sep 2, 2021
7201c27
Specify payload types in README
MrAlias Sep 2, 2021
a0035bc
Merge branch 'main' into main
MrAlias Sep 2, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
26 changes: 26 additions & 0 deletions exporters/otlp/otlptrace/README.md
@@ -0,0 +1,26 @@
# OpenTelemetry-Go OTLP Span Exporter

Submarinee marked this conversation as resolved.
Show resolved Hide resolved
OpenTelemetry Protocol (OTLP) Span Exporter.
Submarinee marked this conversation as resolved.
Show resolved Hide resolved

To constructs a new OTLP trace Exporter, you can follow this
[`example`](https://github.com/open-telemetry/opentelemetry-go/blob/main/exporters/otlp/otlptrace/example_test.go).
Submarinee marked this conversation as resolved.
Show resolved Hide resolved

## Installation

```
go get -u go.opentelemetry.io/otel/exporters/otlp/otlptrace
```
pellared marked this conversation as resolved.
Show resolved Hide resolved

## [`otlptrace`](https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp/otlptrace)

The `otlptrace` package provides an exporter implementing the OTel span exporter interface.
This exporter is configured using a client satisfying the `otlptrace.Client` interface.
This client handles the transformation of data into wire format and the transmission of that data to the collector.

## [`otlptracegrpc`](https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc)

The `otlptracegrpc` package implements a gRPC client to be used in the span exporter.

## [`otlptracehttp`](https://pkg.go.dev/go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp)

The `otlptracehttp` package implements a HTTP client to be used in the span exporter.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We miss information about configuration via environmental variables. I am not sure which are supported (you would need to check the code/godoc/changelog). Here are the docs for the env vars that in theory should be supported: https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md.

Here is a README how the env vars are documented for Jaeger exporter: https://github.com/open-telemetry/opentelemetry-go/blob/main/exporters/jaeger/README.md#environment-variables

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I hope this will help you;

func (e *EnvOptionsReader) GetOptionsFromEnv() []GenericOption {
var opts []GenericOption
// Endpoint
if v, ok := e.getEnvValue("ENDPOINT"); ok {
if isInsecureEndpoint(v) {
opts = append(opts, WithInsecure())
} else {
opts = append(opts, WithSecure())
}
opts = append(opts, WithEndpoint(trimSchema(v)))
}
if v, ok := e.getEnvValue("TRACES_ENDPOINT"); ok {
if isInsecureEndpoint(v) {
opts = append(opts, WithInsecure())
} else {
opts = append(opts, WithSecure())
}
opts = append(opts, WithEndpoint(trimSchema(v)))
}
// Certificate File
if path, ok := e.getEnvValue("CERTIFICATE"); ok {
if tls, err := e.readTLSConfig(path); err == nil {
opts = append(opts, WithTLSClientConfig(tls))
} else {
otel.Handle(fmt.Errorf("failed to configure otlp exporter certificate '%s': %w", path, err))
}
}
if path, ok := e.getEnvValue("TRACES_CERTIFICATE"); ok {
if tls, err := e.readTLSConfig(path); err == nil {
opts = append(opts, WithTLSClientConfig(tls))
} else {
otel.Handle(fmt.Errorf("failed to configure otlp traces exporter certificate '%s': %w", path, err))
}
}
// Headers
if h, ok := e.getEnvValue("HEADERS"); ok {
opts = append(opts, WithHeaders(stringToHeader(h)))
}
if h, ok := e.getEnvValue("TRACES_HEADERS"); ok {
opts = append(opts, WithHeaders(stringToHeader(h)))
}
// Compression
if c, ok := e.getEnvValue("COMPRESSION"); ok {
opts = append(opts, WithCompression(stringToCompression(c)))
}
if c, ok := e.getEnvValue("TRACES_COMPRESSION"); ok {
opts = append(opts, WithCompression(stringToCompression(c)))
}
// Timeout
if t, ok := e.getEnvValue("TIMEOUT"); ok {
if d, err := strconv.Atoi(t); err == nil {
opts = append(opts, WithTimeout(time.Duration(d)*time.Millisecond))
}
}
if t, ok := e.getEnvValue("TRACES_TIMEOUT"); ok {
if d, err := strconv.Atoi(t); err == nil {
opts = append(opts, WithTimeout(time.Duration(d)*time.Millisecond))
}
}
return opts
}

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@pellared can you add this in a follow on PR?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MrAlias Added to my TODO list. I will try to do it next week.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MrAlias Added to my TODO list. I will try to do it next week.

🎉 thanks 😄

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR: #2222

MrAlias marked this conversation as resolved.
Show resolved Hide resolved
94 changes: 94 additions & 0 deletions exporters/otlp/otlptrace/example_test.go
@@ -0,0 +1,94 @@
// Copyright The OpenTelemetry Authors
MrAlias marked this conversation as resolved.
Show resolved Hide resolved
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package otlptrace_test

import (
"context"
"log"

"go.opentelemetry.io/otel"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace"
"go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp"
"go.opentelemetry.io/otel/sdk/resource"
sdktrace "go.opentelemetry.io/otel/sdk/trace"
semconv "go.opentelemetry.io/otel/semconv/v1.4.0"
"go.opentelemetry.io/otel/trace"
)

const (
instrumentationName = "github.com/instrumentron"
instrumentationVersion = "v0.1.0"
)

var (
tracer = otel.GetTracerProvider().Tracer(
instrumentationName,
trace.WithInstrumentationVersion(instrumentationVersion),
trace.WithSchemaURL(semconv.SchemaURL),
)
)

func add(ctx context.Context, x, y int64) int64 {
var span trace.Span
_, span = tracer.Start(ctx, "Addition")
defer span.End()

return x + y
}

func multiply(ctx context.Context, x, y int64) int64 {
var span trace.Span
_, span = tracer.Start(ctx, "Multiplication")
defer span.End()

return x * y
}

func Resource() *resource.Resource {
MrAlias marked this conversation as resolved.
Show resolved Hide resolved
return resource.NewWithAttributes(
semconv.SchemaURL,
semconv.ServiceNameKey.String("otlptrace-example"),
semconv.ServiceVersionKey.String("0.0.1"),
)
}

func InstallExportPipeline(ctx context.Context) func() {
client := otlptracehttp.NewClient()
exporter, err := otlptrace.New(ctx, client)
if err != nil {
log.Fatalf("creating OTLP trace exporter: %v", err)
}

tracerProvider := sdktrace.NewTracerProvider(
sdktrace.WithBatcher(exporter),
sdktrace.WithResource(Resource()),
)
otel.SetTracerProvider(tracerProvider)

return func() {
if err := tracerProvider.Shutdown(ctx); err != nil {
log.Fatalf("stopping tracer provider: %v", err)
}
}
}

func Example() {
ctx := context.Background()
// Registers a tracer Provider globally.
cleanup := InstallExportPipeline(ctx)
defer cleanup()

log.Println("the answer is", add(ctx, multiply(ctx, multiply(ctx, 2, 2), 10), 2))
}