Skip to content

Commit bbfd131

Browse files
committed
tips(docker/go): opentelemetry demo
1 parent ab977a4 commit bbfd131

File tree

13 files changed

+271
-291
lines changed

13 files changed

+271
-291
lines changed

docker/go/docker-compose.yaml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,25 @@ services:
2727
- GOPROXY=https://goproxy.cn
2828
networks:
2929
- default
30+
jaeger-demo:
31+
container_name: jaeger
32+
build: ./jaeger-demo
33+
volumes:
34+
- ./jaeger-demo:/home/deploy/jaeger-demo
35+
ports:
36+
- "5775:5775/udp"
37+
- "6831:6831/udp"
38+
- "6832:6832/udp"
39+
- "5778:5778"
40+
- "16686:16686"
41+
- "14250:14250"
42+
- "14268:14268"
43+
- "9411:9411"
44+
privileged: true
45+
environment:
46+
- COLLECTOR_ZIPKIN_HTTP_PORT=9411
47+
networks:
48+
- default
3049
networks:
3150
default:
3251
external:

docker/go/grpc-demo/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM amd64/golang:1.16.3-alpine3.12
1+
FROM amd64/golang:1.19.7-alpine3.17
22

33
RUN mkdir -p /home/deploy/grpc-demo
44

docker/go/grpc-demo/go.mod

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,34 @@
11
module grpc-demo
22

3-
go 1.15
3+
go 1.18
44

55
require (
6-
github.com/golang/glog v0.0.0-20210429001901-424d2337a529 // indirect
76
github.com/golang/protobuf v1.5.2
87
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
98
github.com/grpc-ecosystem/grpc-gateway v1.16.0
109
github.com/prometheus/client_golang v1.11.0
11-
google.golang.org/genproto v0.0.0-20210811021853-ddbe55d93216
12-
google.golang.org/grpc v1.39.1
10+
google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f
11+
google.golang.org/grpc v1.53.0
12+
)
13+
14+
require (
15+
github.com/beorn7/perks v1.0.1 // indirect
16+
github.com/cespare/xxhash/v2 v2.2.0 // indirect
17+
github.com/go-logr/logr v1.2.3 // indirect
18+
github.com/go-logr/stdr v1.2.2 // indirect
19+
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
20+
github.com/prometheus/client_model v0.2.0 // indirect
21+
github.com/prometheus/common v0.26.0 // indirect
22+
github.com/prometheus/procfs v0.6.0 // indirect
23+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.40.0 // indirect
24+
go.opentelemetry.io/otel v1.14.0 // indirect
25+
go.opentelemetry.io/otel/exporters/jaeger v1.14.0 // indirect
26+
go.opentelemetry.io/otel/metric v0.37.0 // indirect
27+
go.opentelemetry.io/otel/sdk v1.14.0 // indirect
28+
go.opentelemetry.io/otel/trace v1.14.0 // indirect
29+
golang.org/x/net v0.7.0 // indirect
30+
golang.org/x/sys v0.5.0 // indirect
31+
golang.org/x/text v0.7.0 // indirect
32+
google.golang.org/protobuf v1.28.1 // indirect
1333
gopkg.in/yaml.v2 v2.4.0 // indirect
1434
)

docker/go/grpc-demo/go.sum

Lines changed: 34 additions & 273 deletions
Large diffs are not rendered by default.

docker/go/grpc-demo/main.go

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@ import (
1111

1212
grpcprometheus "github.com/grpc-ecosystem/go-grpc-prometheus"
1313
"github.com/prometheus/client_golang/prometheus/promhttp"
14+
15+
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
16+
"go.opentelemetry.io/otel"
17+
"go.opentelemetry.io/otel/exporters/jaeger"
18+
"go.opentelemetry.io/otel/propagation"
19+
"go.opentelemetry.io/otel/sdk/resource"
20+
tracesdk "go.opentelemetry.io/otel/sdk/trace"
21+
semconv "go.opentelemetry.io/otel/semconv/v1.17.0"
1422
)
1523

1624
// https://github.com/grpc/grpc-go/tree/master/examples/helloworld
@@ -41,8 +49,33 @@ import (
4149

4250
var (
4351
grpcServerEndpoint = flag.String("grpc-server-endpoint", "localhost:1010", "gRPC server endpoint")
52+
53+
tracer *tracesdk.TracerProvider
4454
)
4555

56+
func init() {
57+
// 集成链路追踪
58+
// https://github.com/open-telemetry/opentelemetry-go/blob/main/example/jaeger/main.go
59+
// Create the Jaeger exporter
60+
exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint("http://jaeger-demo:14268/api/traces")))
61+
if err != nil {
62+
panic(err)
63+
return
64+
}
65+
tracer = tracesdk.NewTracerProvider(
66+
// Always be sure to batch in production.
67+
tracesdk.WithBatcher(exp),
68+
// Record information about this application in a Resource.
69+
tracesdk.WithResource(resource.NewWithAttributes(
70+
semconv.SchemaURL,
71+
semconv.ServiceNameKey.String("grpc-demo"),
72+
// attribute.String("environment", "production"),
73+
// attribute.Int64("ID", 2),
74+
)),
75+
)
76+
return
77+
}
78+
4679
type demoServer struct {
4780
}
4881

@@ -54,6 +87,12 @@ func (s *demoServer) SayHello(context.Context, *demo.HelloRequest) (reply *demo.
5487
}
5588

5689
func main() {
90+
otel.SetTracerProvider(tracer)
91+
otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
92+
ctx, cancel := context.WithCancel(context.Background())
93+
defer cancel()
94+
defer tracer.Shutdown(ctx)
95+
5796
go runGrpc()
5897
runHttp()
5998
}
@@ -64,8 +103,11 @@ func runGrpc() {
64103
panic(err)
65104
}
66105
s := grpc.NewServer(
67-
grpc.StreamInterceptor(grpcprometheus.StreamServerInterceptor),
68-
grpc.UnaryInterceptor(grpcprometheus.UnaryServerInterceptor),
106+
// grpc.StreamInterceptor(grpcprometheus.StreamServerInterceptor),
107+
// grpc.UnaryInterceptor(grpcprometheus.UnaryServerInterceptor),
108+
// 集成opentelemetry
109+
grpc.UnaryInterceptor(otelgrpc.UnaryServerInterceptor()),
110+
grpc.StreamInterceptor(otelgrpc.StreamServerInterceptor()),
69111
)
70112
demo.RegisterGreeterServer(s, &demoServer{})
71113
grpcprometheus.Register(s)

docker/go/grpc-demo/run.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@
22

33
cd /home/deploy/grpc-demo \
44
&& go build \
5-
&& ./http-demo
5+
&& ./grpc-demo

docker/go/http-demo/.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
http-demo
2+
vendor
3+
test/*.profile
4+
test/test.test

docker/go/http-demo/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM amd64/golang:1.16.3-alpine3.12
1+
FROM amd64/golang:1.19.7-alpine3.17
22

33
RUN mkdir -p /home/deploy/http-demo
44

docker/go/http-demo/go.mod

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,34 @@
11
module http-demo
22

3-
go 1.13
3+
go 1.18
44

55
require (
6-
github.com/golang/protobuf v1.4.3
6+
github.com/golang/protobuf v1.5.2
77
github.com/grpc-ecosystem/grpc-gateway v1.9.5
88
github.com/prometheus/client_golang v1.10.0
9-
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55
10-
google.golang.org/grpc v1.26.0
9+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.40.0
10+
go.opentelemetry.io/otel v1.14.0
11+
go.opentelemetry.io/otel/exporters/jaeger v1.13.0
12+
go.opentelemetry.io/otel/sdk v1.13.0
13+
google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f
14+
google.golang.org/grpc v1.53.0
15+
)
16+
17+
require (
18+
github.com/beorn7/perks v1.0.1 // indirect
19+
github.com/cespare/xxhash/v2 v2.2.0 // indirect
20+
github.com/felixge/httpsnoop v1.0.3 // indirect
21+
github.com/go-logr/logr v1.2.3 // indirect
22+
github.com/go-logr/stdr v1.2.2 // indirect
23+
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
24+
github.com/prometheus/client_model v0.2.0 // indirect
25+
github.com/prometheus/common v0.18.0 // indirect
26+
github.com/prometheus/procfs v0.6.0 // indirect
27+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.40.0 // indirect
28+
go.opentelemetry.io/otel/metric v0.37.0 // indirect
29+
go.opentelemetry.io/otel/trace v1.14.0 // indirect
30+
golang.org/x/net v0.7.0 // indirect
31+
golang.org/x/sys v0.5.0 // indirect
32+
golang.org/x/text v0.7.0 // indirect
33+
google.golang.org/protobuf v1.28.1 // indirect
1134
)

0 commit comments

Comments
 (0)