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

Add Open Telemetry tracing #31

Merged
merged 42 commits into from
Aug 9, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
751ef65
Bump Go version to 1.22
helder-junior Jul 26, 2024
63be176
Fix producer and load-test commands to run in docker
helder-junior Jul 26, 2024
2744fd8
Upgrade ginkgo library
helder-junior Jul 29, 2024
2639651
Update ginkgo on Makefile
helder-junior Jul 29, 2024
6ecce4b
Upgrade multiple dependencies
helder-junior Jul 29, 2024
5dd2982
Remove Open Telemetry Sarama dependency
helder-junior Jul 29, 2024
53590a1
Bump Sarama to IBM package latest version
helder-junior Jul 29, 2024
46f9798
Add docker volume to load-test and producer commands
helder-junior Jul 29, 2024
b7f40ff
Fix makefile
helder-junior Jul 29, 2024
1d49fd3
Trying to fix action not handling error code
helder-junior Jul 29, 2024
f043545
Force Server tests to fail for testing github action error handling
helder-junior Jul 29, 2024
8f262d6
Fixing CI
helder-junior Jul 29, 2024
60f4a52
Revert force fail server tests
helder-junior Jul 29, 2024
40823b0
Added healthcheck to eventsgateway api on docker compose
helder-junior Jul 29, 2024
cf9024a
Testing tests on docker
helder-junior Jul 29, 2024
a7fdad8
Fix docker run client tests
helder-junior Jul 29, 2024
e2a3cbb
Debugging CI
helder-junior Jul 29, 2024
458b73a
Debugging CI
helder-junior Jul 29, 2024
c4e17df
Debugging CI
helder-junior Jul 29, 2024
63043fb
Debugging CI
helder-junior Jul 29, 2024
15e2142
Add custom test methods for CI
helder-junior Jul 29, 2024
b602de8
Debugging CI
helder-junior Jul 29, 2024
9151888
Decouple CI and local test commands
helder-junior Jul 29, 2024
7a7d318
Enable Tracing on local server tests
helder-junior Jul 31, 2024
8022cd3
Using GRPC OpenTelemetry on Client and Server
helder-junior Jul 31, 2024
14d8f97
Configure OTLP tracing for server calls
helder-junior Jul 31, 2024
328bc77
Add OTEL support and configuration for server
helder-junior Aug 1, 2024
f60d8da
Add support for OTEL tracing on Client
helder-junior Aug 1, 2024
0d4fc0b
Add debug mode to server container
helder-junior Aug 1, 2024
c78e90b
Added prometheus and grafana into main docker-compose. Added default …
helder-junior Aug 1, 2024
9a98a31
Set default compose to run only the EG API direct dependencies
helder-junior Aug 1, 2024
53a6789
Remove unecessary OTLP config
helder-junior Aug 1, 2024
62d0a9b
Fix Tracer Sampling settings
helder-junior Aug 1, 2024
e4bd039
Add client tracing config and properly set tracer sampling
helder-junior Aug 1, 2024
2533bba
Added Jaeger propagator on OTEL eventsgateway server
helder-junior Aug 6, 2024
2e310d2
Add OpenTracing setting on LoadTest tool
helder-junior Aug 6, 2024
175613f
Remove custom tracing from clinet
helder-junior Aug 6, 2024
a6518f5
Support Open Tracing and Open Telemetry on EG client for backward com…
helder-junior Aug 6, 2024
f8601a2
Add examples to using OpenTracing and OpenTelemetry from EG Client
helder-junior Aug 6, 2024
9275ed3
Remove unecessary traces from Server
helder-junior Aug 6, 2024
494c34f
Rebase master
helder-junior Aug 6, 2024
48a8def
Add example on how to keep tracing with decoupled context
helder-junior Aug 6, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions client/async.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@ import (
"sync"
"time"

"github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc"
"github.com/opentracing/opentracing-go"
uuid "github.com/satori/go.uuid"
"github.com/spf13/viper"
"github.com/topfreegames/eventsgateway/v4/logger"
Expand Down Expand Up @@ -114,12 +112,10 @@ func (a *gRPCClientAsync) configureGRPCForwarderClient(
a.logger.WithFields(map[string]interface{}{
"operation": "configureGRPCForwarderClient",
}).Info("connecting to grpc server")
tracer := opentracing.GlobalTracer()
dialOpts := append(
[]grpc.DialOption{
grpc.WithInsecure(),
grpc.WithChainUnaryInterceptor(
otgrpc.OpenTracingClientInterceptor(tracer),
a.metricsReporterInterceptor,
),
},
Expand Down
22 changes: 20 additions & 2 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,12 @@ package client
import (
"context"
"fmt"
"github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc"
"github.com/opentracing/opentracing-go"
"github.com/prometheus/client_golang/prometheus"
"github.com/topfreegames/eventsgateway/v4/metrics"
"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc"
"go.opentelemetry.io/otel"
"strings"
"sync"
"time"
Expand Down Expand Up @@ -73,7 +77,21 @@ func New(
"topic": c.topic,
})
var err error
if c.client, err = c.newGRPCClient(configPrefix, client, opts...); err != nil {

dialOpts := append(
[]grpc.DialOption{
grpc.WithChainUnaryInterceptor(
otelgrpc.UnaryClientInterceptor(
otelgrpc.WithPropagators(otel.GetTextMapPropagator()),
otelgrpc.WithTracerProvider(otel.GetTracerProvider()),
),
otgrpc.OpenTracingClientInterceptor(opentracing.GlobalTracer()),
),
},
opts...,
)

if c.client, err = c.newGRPCClient(configPrefix, client, dialOpts...); err != nil {
return nil, err
}
return c, nil
Expand Down Expand Up @@ -127,7 +145,7 @@ func (c *Client) registerMetrics(configPrefix string) {
metrics.ClientRequestsDroppedCounter,
}
err := metrics.RegisterMetrics(collectors)
if err != nil {
if err != nil {
c.logger.WithError(err).Error("failed to register metric")
}
}
Expand Down
10 changes: 4 additions & 6 deletions client/sync.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,12 @@ package client
import (
"context"
"fmt"
"time"

"github.com/grpc-ecosystem/grpc-opentracing/go/otgrpc"
opentracing "github.com/opentracing/opentracing-go"
"github.com/spf13/viper"
"github.com/topfreegames/eventsgateway/v4/logger"
"github.com/topfreegames/eventsgateway/v4/metrics"
pb "github.com/topfreegames/protos/eventsgateway/grpc/generated"
"google.golang.org/grpc"
"time"
)

type gRPCClientSync struct {
Expand Down Expand Up @@ -69,18 +66,19 @@ func (s *gRPCClientSync) configureGRPCForwarderClient(
s.logger.WithFields(map[string]interface{}{
"operation": "configureGRPCForwarderClient",
}).Info("connecting to grpc server")
tracer := opentracing.GlobalTracer()

dialOpts := append(
[]grpc.DialOption{
grpc.WithInsecure(),
grpc.WithChainUnaryInterceptor(
otgrpc.OpenTracingClientInterceptor(tracer),
s.metricsReporterInterceptor,
),
},
opts...,
)

conn, err := grpc.Dial(serverAddress, dialOpts...)

if err != nil {
return err
}
Expand Down
21 changes: 18 additions & 3 deletions config/local.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# Those properties can also be loaded as ENV Vars with EVENTSGATEWAY_ prefix.
kafka:
logger:
enabled: true
Expand All @@ -15,10 +16,24 @@ client:
numRoutines: 2
retryInterval: 2s
grpc:
serverAddress: eventsgateway-api:5000
serverAddress: localhost:5000 #eventsgateway-api:5000
timeout: 500ms
loadtestclient:
duration: 10s
threads: 2
duration: 20s
threads: 20
randSleepCeilingMs: 500
randPropsSize: small # small, medium, large, jumbo
opentelemetry:
enabled: false
serviceName: "eventsgateway-client-loadtest-opentelemetry"
traceSamplingRatio: 1.0
jaegerHost: localhost
jaegerPort: 4317
opentracing:
enabled: true
serviceName: "eventsgateway-client-loadtest-opentracing"
jaegerHost: localhost
jaegerPort: 6831
samplerType: const
samplerParam: 1.0
logSpans: false
17 changes: 0 additions & 17 deletions docker-compose-ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,30 +30,13 @@ services:
networks:
- eventsgateway

jaeger:
image: jaegertracing/all-in-one:latest
environment:
- COLLECTOR_OTLP_ENABLED=true
ports:
- "5775:5775/udp"
- "6831:6831/udp"
- "6832:6832/udp"
- "5778:5778"
- "16686:16686"
- "4317:4317"
networks:
- eventsgateway

eventsgateway-api:
image: eventsgateway-server
ports:
- "5000:5000"
- "6060:6060"
depends_on:
kafka:
condition: service_healthy
jaeger:
condition: service_started
healthcheck:
test: [ "CMD", "nc", "-z", "localhost", "5000" ]
interval: 5s
Expand Down
46 changes: 39 additions & 7 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
version: '2'

services:
zookeeper:
image: confluentinc/cp-zookeeper:6.2.15
Expand Down Expand Up @@ -40,6 +38,7 @@ services:
- ./spark-notebook/work:/home/jovyan/work
networks:
- eventsgateway

jaeger:
image: jaegertracing/all-in-one:latest
environment:
Expand All @@ -56,16 +55,12 @@ services:

eventsgateway-api:
image: eventsgateway-server-dev
# environment:
# - "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=jaeger:4317"
ports:
- "5000:5000"
- "6060:6060"
- "9091:9091"
depends_on:
kafka:
condition: service_healthy
jaeger:
condition: service_started
healthcheck:
test: [ "CMD", "nc", "-z", "localhost", "5000" ]
interval: 5s
Expand All @@ -90,5 +85,42 @@ services:
networks:
- eventsgateway

prometheus:
image: prom/prometheus
restart: always
volumes:
- ./testing/prometheus.yml:/etc/prometheus/prometheus.yml
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
- '--web.console.templates=/usr/share/prometheus/consoles'
ports:
- "9090:9090"
networks:
- eventsgateway

grafana:
image: grafana/grafana
restart: always
environment:
GF_INSTALL_PLUGINS: 'grafana-clock-panel,grafana-simple-json-datasource'
GF_SECURITY_ADMIN_USER: 'admin'
GF_SECURITY_ADMIN_PASSWORD: 'foobar'
GF_USERS_ALLOW_SIGN_UP: 'false'
volumes:
- grafana_data:/var/lib/grafana
ports:
- "3000:3000"
depends_on:
- prometheus
networks:
- eventsgateway

networks:
eventsgateway:

volumes:
prometheus_data: {}
grafana_data: {}
35 changes: 0 additions & 35 deletions docker/docker-compose-metrics.yml

This file was deleted.

23 changes: 21 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,18 @@ require (
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645
github.com/onsi/ginkgo/v2 v2.1.4
github.com/onsi/gomega v1.20.0
github.com/opentracing/opentracing-go v1.1.0
github.com/opentracing/opentracing-go v1.2.0
github.com/prometheus/client_golang v1.12.2
github.com/satori/go.uuid v1.2.0
github.com/sirupsen/logrus v1.8.1
github.com/spf13/cobra v0.0.1
github.com/spf13/viper v1.3.2
github.com/topfreegames/protos v1.6.1
github.com/uber/jaeger-client-go v2.30.0+incompatible
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.34.0
go.opentelemetry.io/otel v1.10.0
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0
go.opentelemetry.io/otel/sdk v1.10.0
google.golang.org/grpc v1.48.0
)

Expand Down Expand Up @@ -64,4 +69,18 @@ require (
gopkg.in/yaml.v3 v3.0.1 // indirect
)

require github.com/inconshreveable/mousetrap v1.0.0 // indirect
require (
github.com/HdrHistogram/hdrhistogram-go v1.1.2 // indirect
github.com/cenkalti/backoff/v4 v4.1.3 // indirect
github.com/go-logr/logr v1.2.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/uber/jaeger-lib v2.4.1+incompatible // indirect
go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0 // indirect
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0 // indirect
go.opentelemetry.io/otel/trace v1.10.0 // indirect
go.opentelemetry.io/proto/otlp v0.19.0 // indirect
go.uber.org/atomic v1.11.0 // indirect
)
Loading