You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2022/07/09 02:13:41 UTC
[dubbo-go-samples] branch master updated: feat: add otel sample (#392)
This is an automated email from the ASF dual-hosted git repository.
alexstocks pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-go-samples.git
The following commit(s) were added to refs/heads/master by this push:
new 45b57528 feat: add otel sample (#392)
45b57528 is described below
commit 45b57528e19e3204e4cc1003b020ad3f9fb534a3
Author: Jason Peng <lv...@gmail.com>
AuthorDate: Sat Jul 9 10:13:35 2022 +0800
feat: add otel sample (#392)
---
error/triple/pb/go-server/cmd/error_reponse.go | 6 +--
go.mod | 3 ++
go.sum | 14 +++++++
otel/trace/config/config.go | 49 ++++++++++++++++++++++
otel/trace/go-client/cmd/main.go | 58 ++++++++++++++++++++++++++
otel/trace/go-client/conf/dubbogo.yaml | 14 +++++++
otel/trace/go-server/cmd/main.go | 58 ++++++++++++++++++++++++++
otel/trace/go-server/conf/dubbogo.yaml | 16 +++++++
8 files changed, 215 insertions(+), 3 deletions(-)
diff --git a/error/triple/pb/go-server/cmd/error_reponse.go b/error/triple/pb/go-server/cmd/error_reponse.go
index 0fac14a4..4cd2588a 100644
--- a/error/triple/pb/go-server/cmd/error_reponse.go
+++ b/error/triple/pb/go-server/cmd/error_reponse.go
@@ -19,13 +19,13 @@ package main
import (
"context"
- "github.com/dubbogo/grpc-go/codes"
- "github.com/dubbogo/grpc-go/status"
- //"github.com/pkg/errors"
)
import (
"dubbo.apache.org/dubbo-go/v3/common/logger"
+
+ "github.com/dubbogo/grpc-go/codes"
+ "github.com/dubbogo/grpc-go/status"
)
import (
diff --git a/go.mod b/go.mod
index 47061539..6ecc3147 100644
--- a/go.mod
+++ b/go.mod
@@ -13,6 +13,9 @@ require (
github.com/pkg/errors v0.9.1
github.com/stretchr/testify v1.8.0
github.com/uber/jaeger-client-go v2.29.1+incompatible
+ go.opentelemetry.io/otel v1.7.0
+ go.opentelemetry.io/otel/exporters/jaeger v1.7.0
+ go.opentelemetry.io/otel/sdk v1.7.0
google.golang.org/grpc v1.47.0
google.golang.org/protobuf v1.28.0
)
diff --git a/go.sum b/go.sum
index 8eafa9e8..42ed4690 100644
--- a/go.sum
+++ b/go.sum
@@ -252,6 +252,11 @@ github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
github.com/go-logfmt/logfmt v0.5.0 h1:TrB8swr/68K7m9CcGut2g3UOihhbcbiMAYiuTXdEih4=
github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A=
+github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0=
+github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
+github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
+github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
@@ -816,6 +821,14 @@ go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
+go.opentelemetry.io/otel v1.7.0 h1:Z2lA3Tdch0iDcrhJXDIlC94XE+bxok1F9B+4Lz/lGsM=
+go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk=
+go.opentelemetry.io/otel/exporters/jaeger v1.7.0 h1:wXgjiRldljksZkZrldGVe6XrG9u3kYDyQmkZwmm5dI0=
+go.opentelemetry.io/otel/exporters/jaeger v1.7.0/go.mod h1:PwQAOqBgqbLQRKlj466DuD2qyMjbtcPpfPfj+AqbSBs=
+go.opentelemetry.io/otel/sdk v1.7.0 h1:4OmStpcKVOfvDOgCt7UriAPtKolwIhxpnSNI/yK+1B0=
+go.opentelemetry.io/otel/sdk v1.7.0/go.mod h1:uTEOTwaqIVuTGiJN7ii13Ibp75wJmYUDe374q6cZwUU=
+go.opentelemetry.io/otel/trace v1.7.0 h1:O37Iogk1lEkMRXewVtZ1BBTVn5JEp8GrJvP92bJqC6o=
+go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU=
go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI=
go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
@@ -1020,6 +1033,7 @@ golang.org/x/sys v0.0.0-20210316164454-77fc1eacc6aa/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
diff --git a/otel/trace/config/config.go b/otel/trace/config/config.go
new file mode 100644
index 00000000..af9db0f9
--- /dev/null
+++ b/otel/trace/config/config.go
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 config
+
+import (
+ "log"
+)
+
+import (
+ "go.opentelemetry.io/otel"
+ "go.opentelemetry.io/otel/exporters/jaeger"
+ "go.opentelemetry.io/otel/propagation"
+ "go.opentelemetry.io/otel/sdk/resource"
+ sdktrace "go.opentelemetry.io/otel/sdk/trace"
+ semconv "go.opentelemetry.io/otel/semconv/v1.7.0"
+)
+
+// Init configures an OpenTelemetry exporter and trace provider
+func Init() *sdktrace.TracerProvider {
+ exporter, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint("http://localhost:16686/api/traces")))
+ if err != nil {
+ log.Fatal(err)
+ }
+ tp := sdktrace.NewTracerProvider(
+ sdktrace.WithSampler(sdktrace.AlwaysSample()),
+ sdktrace.WithBatcher(exporter),
+ sdktrace.WithResource(resource.NewSchemaless(
+ semconv.ServiceNameKey.String("oteldubbo"),
+ )),
+ )
+ otel.SetTracerProvider(tp)
+ otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator(propagation.TraceContext{}, propagation.Baggage{}))
+ return tp
+}
diff --git a/otel/trace/go-client/cmd/main.go b/otel/trace/go-client/cmd/main.go
new file mode 100644
index 00000000..6ab1c994
--- /dev/null
+++ b/otel/trace/go-client/cmd/main.go
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 main
+
+import (
+ "context"
+ "log"
+)
+
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/logger"
+ "dubbo.apache.org/dubbo-go/v3/config"
+ _ "dubbo.apache.org/dubbo-go/v3/imports"
+)
+
+import (
+ "github.com/apache/dubbo-go-samples/api"
+ otelconfig "github.com/apache/dubbo-go-samples/otel/trace/config"
+)
+
+var userProvider = &api.GreeterClientImpl{}
+
+func init() {
+ config.SetConsumerService(userProvider)
+}
+
+func main() {
+ tp := otelconfig.Init()
+ defer func() {
+ if err := tp.Shutdown(context.Background()); err != nil {
+ log.Printf("Error shutting down tracer provider: %v", err)
+ }
+ }()
+ err := config.Load()
+ if err != nil {
+ panic(err)
+ }
+ user, err := userProvider.SayHello(context.TODO(), &api.HelloRequest{Name: "zheyu"})
+ if err != nil {
+ panic(err)
+ }
+ logger.Infof("get user = %+v", user)
+}
diff --git a/otel/trace/go-client/conf/dubbogo.yaml b/otel/trace/go-client/conf/dubbogo.yaml
new file mode 100644
index 00000000..6c686ef4
--- /dev/null
+++ b/otel/trace/go-client/conf/dubbogo.yaml
@@ -0,0 +1,14 @@
+dubbo:
+ registries:
+ demoZK:
+ protocol: zookeeper
+ timeout: 3s
+ address: 127.0.0.1:2181
+ consumer:
+ filter: otelClientTrace
+ check: true
+ request_timeout: 3s
+ connect_timeout: 3s
+ references:
+ GreeterClientImpl:
+ protocol: tri
\ No newline at end of file
diff --git a/otel/trace/go-server/cmd/main.go b/otel/trace/go-server/cmd/main.go
new file mode 100644
index 00000000..e2c3ae53
--- /dev/null
+++ b/otel/trace/go-server/cmd/main.go
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 main
+
+import (
+ "context"
+ "log"
+)
+
+import (
+ "dubbo.apache.org/dubbo-go/v3/common/logger"
+ "dubbo.apache.org/dubbo-go/v3/config"
+ _ "dubbo.apache.org/dubbo-go/v3/imports"
+)
+
+import (
+ "github.com/apache/dubbo-go-samples/api"
+ otelconfig "github.com/apache/dubbo-go-samples/otel/trace/config"
+)
+
+type GreeterProvider struct {
+ api.UnimplementedGreeterServer
+}
+
+func (s *GreeterProvider) SayHello(ctx context.Context, in *api.HelloRequest) (*api.User, error) {
+ logger.Infof("Dubbo3 GreeterProvider get user name = %s\n", in.Name)
+ return &api.User{Name: "Hello " + in.Name, Id: "12345", Age: 21}, nil
+}
+
+// export DUBBO_GO_CONFIG_PATH= PATH_TO_SAMPLES/helloworld/go-server/conf/dubbogo.yml
+func main() {
+ tp := otelconfig.Init()
+ defer func() {
+ if err := tp.Shutdown(context.Background()); err != nil {
+ log.Printf("Error shutting down tracer provider: %v", err)
+ }
+ }()
+ config.SetProviderService(&GreeterProvider{})
+ if err := config.Load(); err != nil {
+ panic(err)
+ }
+ select {}
+}
diff --git a/otel/trace/go-server/conf/dubbogo.yaml b/otel/trace/go-server/conf/dubbogo.yaml
new file mode 100644
index 00000000..66a48393
--- /dev/null
+++ b/otel/trace/go-server/conf/dubbogo.yaml
@@ -0,0 +1,16 @@
+dubbo:
+ registries:
+ demoZK:
+ protocol: zookeeper
+ address: 127.0.0.1:2181
+ protocols:
+ tripleProtocol:
+ name: tri
+ port: 20000
+ provider:
+ services:
+ GreeterProvider:
+ filter: otelServerTrace
+ loadbalance: random
+ warmup: 100
+ cluster: failover