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

Linkerd jaeger #67

Open
wants to merge 12 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
85 changes: 80 additions & 5 deletions kubernetes/servicemesh/applications/playlists-api/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,76 @@ import (
"io/ioutil"
"context"
"github.com/go-redis/redis/v8"

"github.com/opentracing/opentracing-go"
jaegercfg "github.com/uber/jaeger-client-go/config"
"github.com/opentracing/opentracing-go/ext"

"github.com/uber/jaeger-client-go/zipkin"
jaegerlog "github.com/uber/jaeger-client-go/log"
"github.com/uber/jaeger-lib/metrics"
)

const serviceName = "playlists-api"

var environment = os.Getenv("ENVIRONMENT")
var redis_host = os.Getenv("REDIS_HOST")
var redis_port = os.Getenv("REDIS_PORT")
var jaeger_host_port = os.Getenv("JAEGER_HOST_PORT")
var ctx = context.Background()
var rdb *redis.Client

func main() {

cfg := jaegercfg.Configuration{
Sampler: &jaegercfg.SamplerConfig{
Type: "const",
Param: 1,
},

// Log the emitted spans to stdout.
Reporter: &jaegercfg.ReporterConfig{
LogSpans: true,
LocalAgentHostPort: jaeger_host_port,
},
}

jLogger := jaegerlog.StdLogger
jMetricsFactory := metrics.NullFactory

zipkinPropagator := zipkin.NewZipkinB3HTTPHeaderPropagator()

closer, err := cfg.InitGlobalTracer(
serviceName,
jaegercfg.Logger(jLogger),
jaegercfg.Metrics(jMetricsFactory),
jaegercfg.Injector(opentracing.HTTPHeaders, zipkinPropagator),
jaegercfg.Extractor(opentracing.HTTPHeaders, zipkinPropagator),
jaegercfg.ZipkinSharedRPCSpan(true),
)


if err != nil {
panic(fmt.Sprintf("ERROR: cannot init Jaeger: %v\n", err))
}
defer closer.Close()

router := httprouter.New()

router.GET("/", func(w http.ResponseWriter, r *http.Request, p httprouter.Params){

spanCtx, _ := opentracing.GlobalTracer().Extract(
opentracing.HTTPHeaders,
opentracing.HTTPHeadersCarrier(r.Header),
)

span := opentracing.StartSpan("playlists-api / GET", ext.RPCServerOption(spanCtx))
defer span.Finish()

cors(w)
playlistsJson := getPlaylists()

ctx := opentracing.ContextWithSpan(context.Background(), span)
playlistsJson := getPlaylists(ctx)

playlists := []playlist{}
err := json.Unmarshal([]byte(playlistsJson), &playlists)
Expand All @@ -38,23 +93,39 @@ func main() {

vs := []videos{}
for vi := range playlists[pi].Videos {


videoSpan := opentracing.StartSpan("videos-api GET", opentracing.ChildOf(span.Context()))
//span, _ := opentracing.StartSpanFromContext(ctx, "videos-api GET")
v := videos{}
videoResp, err := http.Get("http://videos-api:10010/" + playlists[pi].Videos[vi].Id)

req, err := http.NewRequest("GET", "http://videos-api:10010/" + playlists[pi].Videos[vi].Id, nil)
if err != nil {
panic(err)
}

videoSpan.Tracer().Inject(
span.Context(),
opentracing.HTTPHeaders,
opentracing.HTTPHeadersCarrier(req.Header),
)

videoResp, err :=http.DefaultClient.Do(req)

if err != nil {
fmt.Println(err)
videoSpan.SetTag("error", true)
break
}

defer videoResp.Body.Close()
videoSpan.Finish()

video, err := ioutil.ReadAll(videoResp.Body)

if err != nil {
panic(err)
}


err = json.Unmarshal(video, &v)

if err != nil {
Expand Down Expand Up @@ -90,12 +161,16 @@ func main() {
log.Fatal(http.ListenAndServe(":10010", router))
}

func getPlaylists()(response string){
func getPlaylists(ctx context.Context)(response string){

span, _ := opentracing.StartSpanFromContext(ctx, "playlists-api - redis-get")
defer span.Finish()
playlistData, err := rdb.Get(ctx, "playlists").Result()

if err != nil {
fmt.Println(err)
fmt.Println("error occured retrieving playlists from Redis")
span.SetTag("error", true)
return "[]"
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ spec:
spec:
containers:
- name: playlists-api
image: aimvector/service-mesh:playlists-api-1.0.0
image: aimvector/service-mesh:playlists-api-2.0.4
imagePullPolicy : Always
ports:
- containerPort: 10010
Expand All @@ -32,6 +32,8 @@ spec:
value: "playlists-db"
- name: "REDIS_PORT"
value: "6379"
- name: "JAEGER_HOST_PORT"
value: "collector.linkerd-jaeger:14268"
---
apiVersion: v1
kind: Service
Expand Down
23 changes: 14 additions & 9 deletions kubernetes/servicemesh/applications/playlists-api/go.mod
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
module example.com/playlists-api

go 1.14

require (
github.com/go-redis/redis/v8 v8.0.0-beta.7 // indirect
github.com/julienschmidt/httprouter v1.3.0 // indirect
github.com/sirupsen/logrus v1.6.0 // indirect
)
module example.com/playlists-api

go 1.14

require (
github.com/go-redis/redis/v8 v8.0.0-beta.7
github.com/julienschmidt/httprouter v1.3.0
github.com/opentracing/opentracing-go v1.1.1-0.20190913142402-a7454ce5950e
github.com/pkg/errors v0.9.1 // indirect
github.com/sirupsen/logrus v1.6.0
github.com/uber/jaeger-client-go v2.25.0+incompatible
github.com/uber/jaeger-lib v2.4.1+incompatible
go.uber.org/atomic v1.7.0 // indirect
)
Loading