Skip to content

Commit 11c4d6f

Browse files
committed
chore: cleanup OpenTelemetry example
1 parent b94bde3 commit 11c4d6f

File tree

4 files changed

+49
-27
lines changed

4 files changed

+49
-27
lines changed

example/otel/README.md

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
1-
### OpenTelemetry Example
2-
Prints spans and metrics to the console.
3-
#### To Run:
4-
- `docker-compose up -d`
5-
- `go run .`
1+
# Example for go-redis OpenTelemetry instrumentation
62

7-
When you're finished, be sure to run `docker-compose down` to shutdown
8-
the redis server.
3+
This example requires running Redis Server. You can start Redis Server using Docker:
94

5+
```shell
6+
docker-compose up -d
7+
```
8+
9+
To run this example:
10+
11+
```shell
12+
go run .
13+
```
14+
15+
See [Monitoring performance and errors](https://redis.uptrace.dev/guide/tracing.html) for more
16+
details.

example/otel/docker-compose.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
version: '3'
2+
23
services:
34
redis-server:
45
image: redis
56
ports:
6-
- "6379:6379"
7+
- '6379:6379'
78
redis-cli:
89
image: redis

example/otel/example-client.go renamed to example/otel/main.go

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,45 @@ package main
22

33
import (
44
"context"
5-
"log"
65
"sync"
7-
"time"
86

97
"github.com/go-redis/redis/extra/redisotel/v8"
108
"github.com/go-redis/redis/v8"
119
"go.opentelemetry.io/otel"
10+
"go.opentelemetry.io/otel/codes"
1211
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
1312
sdktrace "go.opentelemetry.io/otel/sdk/trace"
1413
)
1514

15+
var tracer = otel.Tracer("redisexample")
16+
1617
func main() {
1718
ctx := context.Background()
1819

19-
stop := runExporter(ctx)
20-
defer stop(ctx)
20+
stop := configureOpentelemetry(ctx)
21+
defer stop()
2122

2223
rdb := redis.NewClient(&redis.Options{
2324
Addr: ":6379",
2425
})
25-
2626
rdb.AddHook(redisotel.TracingHook{})
2727

28-
tracer := otel.Tracer("Example tracer")
29-
ctx, span := tracer.Start(ctx, "start-test-span")
28+
ctx, span := tracer.Start(ctx, "handleRequest")
29+
defer span.End()
3030

31-
rdb.Set(ctx, "First value", "value_1", 0)
31+
if err := handleRequest(ctx); err != nil {
32+
span.RecordError(err)
33+
span.SetStatus(codes.Error, err.Error())
34+
}
35+
}
3236

33-
rdb.Set(ctx, "Second value", "value_2", 0)
37+
func handleRequest(ctx context.Context) error {
38+
if err := rdb.Set(ctx, "First value", "value_1", 0).Err(); err != nil {
39+
return err
40+
}
41+
if err := rdb.Set(ctx, "Second value", "value_2", 0).Err(); err != nil {
42+
return err
43+
}
3444

3545
var group sync.WaitGroup
3646

@@ -40,35 +50,38 @@ func main() {
4050
defer group.Done()
4151
val := rdb.Get(ctx, "Second value").Val()
4252
if val != "value_2" {
43-
log.Fatalf("val was not set. expected: %s but got: %s", "value_2", val)
53+
panic(err)
4454
}
4555
}()
4656
}
57+
4758
group.Wait()
4859

49-
rdb.Del(ctx, "First value")
50-
rdb.Del(ctx, "Second value")
60+
if err := rdb.Del(ctx, "First value").Err(); err != nil {
61+
return err
62+
}
63+
if err := rdb.Del(ctx, "Second value").Err(); err != nil {
64+
return err
65+
}
5166

52-
// Wait some time to allow spans to export
53-
<-time.After(5 * time.Second)
54-
span.End()
67+
return nil
5568
}
5669

57-
func runExporter(ctx context.Context) func(context.Context) {
70+
func configureOpentelemetry(ctx context.Context) func() {
5871
provider := sdktrace.NewTracerProvider()
5972
otel.SetTracerProvider(provider)
6073

6174
exp, err := stdouttrace.New(stdouttrace.WithPrettyPrint())
6275
if err != nil {
63-
log.Fatal(err)
76+
panic(err)
6477
}
6578

6679
bsp := sdktrace.NewBatchSpanProcessor(exp)
6780
provider.RegisterSpanProcessor(bsp)
6881

6982
return func(ctx context.Context) {
7083
if err := provider.Shutdown(ctx); err != nil {
71-
log.Printf("Shutdown failed: %s", err)
84+
panic(err)
7285
}
7386
}
7487
}

tx.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ const TxFailedErr = proto.RedisError("redis: transaction failed")
1313
// Tx implements Redis transactions as described in
1414
// http://redis.io/topics/transactions. It's NOT safe for concurrent use
1515
// by multiple goroutines, because Exec resets list of watched keys.
16-
// If you don't need WATCH it is better to use Pipeline.
16+
//
17+
// If you don't need WATCH, use Pipeline instead.
1718
type Tx struct {
1819
baseClient
1920
cmdable

0 commit comments

Comments
 (0)