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 tracing for pipe operations; updates weaveworks, jaeger and aws dependencies #3745

Merged
merged 3 commits into from
Feb 4, 2020
Merged
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
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 10 additions & 4 deletions app/multitenant/consul_client.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@ package multitenant

import (
"bytes"
"context"
"encoding/json"
"fmt"
"time"

consul "github.com/hashicorp/consul/api"
opentracing "github.com/opentracing/opentracing-go"
log "github.com/sirupsen/logrus"
)

Expand All @@ -17,8 +19,8 @@ const (
// ConsulClient is a high-level client for Consul, that exposes operations
// such as CAS and Watch which take callbacks. It also deals with serialisation.
type ConsulClient interface {
Get(key string, out interface{}) error
CAS(key string, out interface{}, f CASCallback) error
Get(ctx context.Context, key string, out interface{}) error
CAS(ctx context.Context, key string, out interface{}, f CASCallback) error
WatchPrefix(prefix string, out interface{}, done chan struct{}, f func(string, interface{}) bool)
}

Expand Down Expand Up @@ -58,7 +60,9 @@ type consulClient struct {
}

// Get and deserialise a JSON value from consul.
func (c *consulClient) Get(key string, out interface{}) error {
func (c *consulClient) Get(ctx context.Context, key string, out interface{}) error {
span, ctx := opentracing.StartSpanFromContext(ctx, "Consul Get", opentracing.Tag{"key", key})
defer span.Finish()
kvp, _, err := c.kv.Get(key, queryOptions)
if err != nil {
return err
Expand All @@ -71,7 +75,9 @@ func (c *consulClient) Get(key string, out interface{}) error {

// CAS atomically modify a value in a callback.
// If value doesn't exist you'll get nil as a argument to your callback.
func (c *consulClient) CAS(key string, out interface{}, f CASCallback) error {
func (c *consulClient) CAS(ctx context.Context, key string, out interface{}, f CASCallback) error {
span, ctx := opentracing.StartSpanFromContext(ctx, "Consul CAS", opentracing.Tag{"key", key})
defer span.Finish()
var (
index = uint64(0)
retries = 10
Expand Down
19 changes: 14 additions & 5 deletions app/multitenant/consul_pipe_router.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,10 @@ import (
"context"
"github.com/gorilla/mux"
"github.com/gorilla/websocket"
opentracing "github.com/opentracing/opentracing-go"
log "github.com/sirupsen/logrus"

"github.com/weaveworks/common/middleware"
"github.com/weaveworks/common/mtime"
"github.com/weaveworks/scope/app"
"github.com/weaveworks/scope/common/xfer"
Expand Down Expand Up @@ -259,8 +261,9 @@ func (pr *consulPipeRouter) privateAPI() {
}
})

handler := middleware.Tracer{RouteMatcher: router}.Wrap(router)
log.Infof("Serving private API on endpoint %s.", pr.advertise)
log.Infof("Private API terminated: %v", http.ListenAndServe(pr.advertise, router))
log.Infof("Private API terminated: %v", http.ListenAndServe(pr.advertise, handler))
}

func (pr *consulPipeRouter) Exists(ctx context.Context, id string) (bool, error) {
Expand All @@ -270,7 +273,7 @@ func (pr *consulPipeRouter) Exists(ctx context.Context, id string) (bool, error)
}
key := fmt.Sprintf("%s%s-%s", pr.prefix, userID, id)
consulPipe := consulPipe{}
err = pr.client.Get(key, &consulPipe)
err = pr.client.Get(ctx, key, &consulPipe)
if err == ErrNotFound {
return false, nil
} else if err != nil {
Expand All @@ -286,10 +289,12 @@ func (pr *consulPipeRouter) Get(ctx context.Context, id string, e app.End) (xfer
}
key := fmt.Sprintf("%s%s-%s", pr.prefix, userID, id)
log.Infof("Get %s:%s", key, e)
span, ctx := opentracing.StartSpanFromContext(ctx, "PipeRouter Get", opentracing.Tag{"key", key})
defer span.Finish()

// Try to ensure the given end of the given pipe
// is 'owned' by this pipe service replica in consul.
err = pr.client.CAS(key, &consulPipe{}, func(in interface{}) (interface{}, bool, error) {
err = pr.client.CAS(ctx, key, &consulPipe{}, func(in interface{}) (interface{}, bool, error) {
var pipe *consulPipe
if in == nil {
pipe = &consulPipe{
Expand Down Expand Up @@ -328,9 +333,11 @@ func (pr *consulPipeRouter) Release(ctx context.Context, id string, e app.End) e
}
key := fmt.Sprintf("%s%s-%s", pr.prefix, userID, id)
log.Infof("Release %s:%s", key, e)
span, ctx := opentracing.StartSpanFromContext(ctx, "PipeRouter Release", opentracing.Tag{"key", key})
defer span.Finish()

// atomically clear my end of the pipe in consul
return pr.client.CAS(key, &consulPipe{}, func(in interface{}) (interface{}, bool, error) {
return pr.client.CAS(ctx, key, &consulPipe{}, func(in interface{}) (interface{}, bool, error) {
if in == nil {
return nil, false, fmt.Errorf("pipe %s not found", id)
}
Expand All @@ -353,8 +360,10 @@ func (pr *consulPipeRouter) Delete(ctx context.Context, id string) error {
}
key := fmt.Sprintf("%s%s-%s", pr.prefix, userID, id)
log.Infof("Delete %s", key)
span, ctx := opentracing.StartSpanFromContext(ctx, "PipeRouter Delete", opentracing.Tag{"key", key})
defer span.Finish()

return pr.client.CAS(key, &consulPipe{}, func(in interface{}) (interface{}, bool, error) {
return pr.client.CAS(ctx, key, &consulPipe{}, func(in interface{}) (interface{}, bool, error) {
if in == nil {
return nil, false, fmt.Errorf("Pipe %s not found", id)
}
Expand Down
10 changes: 8 additions & 2 deletions app/pipes.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (

"context"
"github.com/gorilla/mux"
opentracing "github.com/opentracing/opentracing-go"
log "github.com/sirupsen/logrus"

"github.com/weaveworks/scope/common/xfer"
Expand Down Expand Up @@ -66,8 +67,13 @@ func handlePipeWs(pr PipeRouter, end End) CtxHandlerFunc {
}
defer conn.Close()

if err := pipe.CopyToWebsocket(endIO, conn); err != nil && !xfer.IsExpectedWSCloseError(err) {
log.Errorf("Error copying to pipe %s (%d) websocket: %v", id, end, err)
if err := pipe.CopyToWebsocket(endIO, conn); err != nil {
if span := opentracing.SpanFromContext(ctx); span != nil {
span.LogKV("error", err.Error())
}
if !xfer.IsExpectedWSCloseError(err) {
log.Errorf("Error copying to pipe %s (%d) websocket: %v", id, end, err)
}
}
}
}
Expand Down
51 changes: 13 additions & 38 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,11 @@ require (
github.com/PuerkitoBio/purell v1.1.1-0.20171117214151-1c4bec281e4b // indirect
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
github.com/VividCortex/gohistogram v1.0.0 // indirect
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc // indirect
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf // indirect
github.com/apache/thrift v0.0.0-20180717161949-f2867c24984a // indirect
github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878
github.com/armon/go-radix v0.0.0-20160115234725-4239b77079c7
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5
github.com/aws/aws-sdk-go v1.0.5
github.com/aws/aws-sdk-go v1.15.78
github.com/aws/aws-sdk-go-v2 v2.0.0-preview.4.0.20180612204834-f401f4e72ca1+incompatible // indirect
github.com/blang/semver v3.1.0+incompatible // indirect
github.com/bluele/gcache v0.0.0-20150827032927-fb6c0b0e1ff0
Expand Down Expand Up @@ -46,19 +44,14 @@ require (
github.com/garyburd/redigo v0.0.0-20151018180855-3d0709611e0e // indirect
github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680 // indirect
github.com/go-ini/ini v1.8.6-0.20151216053507-467243bad6cb // indirect
github.com/go-kit/kit v0.7.1-0.20180717163541-af7386548c7b // indirect
github.com/go-logfmt/logfmt v0.3.0 // indirect
github.com/go-openapi/jsonpointer v0.0.0-20170102174223-779f45308c19 // indirect
github.com/go-openapi/jsonreference v0.0.0-20161105162150-36d33bfe519e // indirect
github.com/go-openapi/spec v0.0.0-20171219195406-fa03337d7da5 // indirect
github.com/go-openapi/swag v0.0.0-20180102232305-84f4bee7c0a6 // indirect
github.com/go-stack/stack v1.7.0 // indirect
github.com/gogo/protobuf v1.1.1
github.com/gogo/protobuf v1.2.1
github.com/goji/httpauth v0.0.0-20160601135302-2da839ab0f4d
github.com/golang/glog v0.0.0-20150731225221-fca8c8854093 // indirect
github.com/golang/groupcache v0.0.0-20171101203131-84a468cf14b4 // indirect
github.com/golang/mock v0.0.0-20160127222235-bd3c8e81be01 // indirect
github.com/golang/protobuf v1.2.0
github.com/golang/protobuf v1.3.2
github.com/golang/snappy v0.0.0-20170215233205-553a64147049 // indirect
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a // indirect
github.com/google/cadvisor v0.19.2 // indirect
Expand All @@ -73,7 +66,6 @@ require (
github.com/gorilla/securecookie v0.0.0-20150820082958-e95799a481bb // indirect
github.com/gorilla/websocket v0.0.0-20160221213430-5c91b59efa23
github.com/gregjones/httpcache v0.0.0-20171119193500-2bcd89a1743f // indirect
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20180522105215-e9c5d9645c43 // indirect
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
github.com/hashicorp/consul v0.6.4-0.20160227001210-2a4436075dbb
github.com/hashicorp/go-cleanhttp v0.5.0
Expand All @@ -85,26 +77,18 @@ require (
github.com/influxdata/influxdb v1.5.1-0.20180718194353-468497c11f25 // indirect
github.com/iovisor/gobpf v0.0.0-20180826141936-4ece6c56f936 // indirect
github.com/jessevdk/go-flags v1.3.1-0.20170926144705-f88afde2fa19 // indirect
github.com/jmespath/go-jmespath v0.0.0-20151208071831-c01cf91b0118 // indirect
github.com/json-iterator/go v1.1.5 // indirect
github.com/julienschmidt/httprouter v1.2.0 // indirect
github.com/k-sone/critbitgo v1.2.0
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 // indirect
github.com/kr/pretty v0.0.0-20160823170715-cfb55aafdaf3 // indirect
github.com/kr/pty v0.0.0-20151007230424-f7ee69f31298
github.com/kr/text v0.0.0-20160504234017-7cafcd837844 // indirect
github.com/lsegal/gucumber v0.0.0-20150609075149-e8116c9c66e6 // indirect
github.com/m3db/prometheus_client_golang v0.9.0-pre1.0.20180416233856-82f5ff156b29 // indirect
github.com/mailru/easyjson v0.0.0-20171120080333-32fa128f234d // indirect
github.com/mattn/go-colorable v0.0.7 // indirect
github.com/mattn/go-isatty v0.0.0-20161123143637-30a891c33c7c // indirect
github.com/mattn/go-runewidth v0.0.2-0.20161012013512-737072b4e32b // indirect
github.com/mgutz/ansi v0.0.0-20150914162238-c286dcecd19f
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b
github.com/miekg/dns v0.0.0-20160129163459-3d66e3747d22
github.com/mitchellh/go-homedir v0.0.0-20161203194507-b8bc1bf76747 // indirect
github.com/mjibson/appstats v0.0.0-20151004071057-0542d5f0e87e // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.1 // indirect
github.com/mwitkow/go-grpc-middleware v1.0.1-0.20180522105215-e9c5d9645c43 // indirect
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/nats-io/gnatsd v0.8.1-0.20160607194326-f2c17eb159e1 // indirect
Expand All @@ -114,8 +98,7 @@ require (
github.com/olekukonko/tablewriter v0.0.0-20160923125401-bdcc175572fd // indirect
github.com/opencontainers/runc v1.0.0-rc5 // indirect
github.com/openebs/k8s-snapshot-client v0.0.0-20180831100134-a6506305fb16
github.com/opentracing-contrib/go-stdlib v0.0.0-20180702182724-07a764486eb1 // indirect
github.com/opentracing/opentracing-go v1.0.3-0.20180606204148-bd9c31933947
github.com/opentracing/opentracing-go v1.1.0
github.com/paypal/ionet v0.0.0-20130919195445-ed0aaebc5417
github.com/pborman/uuid v0.0.0-20150824212802-cccd189d45f7
github.com/performancecopilot/speed v3.0.1-0.20180614024626-d49dd9b77adc+incompatible // indirect
Expand All @@ -127,50 +110,42 @@ require (
github.com/prometheus/client_golang v0.9.2
github.com/richo/GOSHOUT v0.0.0-20190205170632-a1a6db7f26e9
github.com/russross/blackfriday v0.0.0-20151020174500-a18a46c9b943 // indirect
github.com/sercand/kuberesolver v2.1.0+incompatible // indirect
github.com/shiena/ansicolor v0.0.0-20151119151921-a422bbe96644 // indirect
github.com/shurcooL/sanitized_anchor_name v0.0.0-20150822220530-244f5ac324cb // indirect
github.com/sirupsen/logrus v1.0.6
github.com/sirupsen/logrus v1.4.2
github.com/spaolacci/murmur3 v0.0.0-20150829172844-0d12bf811670
github.com/spf13/cobra v0.0.0-20151013225139-8b2293c74173 // indirect
github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95 // indirect
github.com/stretchr/objx v0.1.2-0.20180702103455-b8b73a35e983 // indirect
github.com/stretchr/testify v1.3.0
github.com/stretchr/testify v1.4.0
github.com/syndtr/goleveldb v0.0.0-20171214120811-34011bf325bc // indirect
github.com/tinylib/msgp v0.0.0-20160803062324-ad0ff2e232ad // indirect
github.com/tylerb/graceful v1.2.13
github.com/typetypetype/conntrack v1.0.1-0.20181112022515-9d9dd841d4eb
github.com/uber-go/tally v3.3.8-0.20180718230131-d0a004a77fc9+incompatible // indirect
github.com/uber/jaeger-client-go v2.14.1-0.20180713190620-252d853b2a4f+incompatible // indirect
github.com/uber/jaeger-lib v1.5.1-0.20180615202729-a51202d6f4a7 // indirect
github.com/uber/jaeger-client-go v2.22.1+incompatible // indirect
github.com/uber/jaeger-lib v2.2.0+incompatible // indirect
github.com/ugorji/go v0.0.0-20170918222552-54210f4e076c
github.com/urfave/negroni v0.2.1-0.20160830030302-5d815f907a18 // indirect
github.com/vishvananda/netlink v1.0.1-0.20190913165827-36d367fd76f9
github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc
github.com/weaveworks/billing-client v0.0.0-20180419131543-b2b68b13b5af
github.com/weaveworks/common v0.0.0-20180824161429-d442d08d89b5
github.com/weaveworks/common v0.0.0-20200121152915-f95aa0ece940
github.com/weaveworks/go-checkpoint v0.0.0-20160428112813-62324982ab51
github.com/weaveworks/go-odp v0.0.0-20151030115644-f8c8c40c1889 // indirect
github.com/weaveworks/promrus v1.2.0 // indirect
github.com/weaveworks/ps v0.0.0-20160725183535-70d17b2d6f76
github.com/weaveworks/tcptracer-bpf v0.0.0-20200114145059-84a08fc667c0
github.com/weaveworks/weave v2.3.1-0.20180427133448-4da998ab4507+incompatible
github.com/willdonnelly/passwd v0.0.0-20141013001024-7935dab3074c
go.uber.org/atomic v1.3.2 // indirect
go.uber.org/multierr v1.1.1-0.20180122172545-ddea229ff1df // indirect
go.uber.org/zap v1.9.1-0.20180719221902-55d3c264ce04 // indirect
go4.org v0.0.0-20170117104548-7ce08ca145db // indirect
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3
golang.org/x/oauth2 v0.0.0-20170214231824-b9780ec78894 // indirect
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9
golang.org/x/sys v0.0.0-20190913121621-c3b328c6e5a7
golang.org/x/text v0.3.1-0.20171227012246-e19ae1496984 // indirect
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2
golang.org/x/tools v0.0.0-20161205224439-ae1141fc8b3e
golang.org/x/tools v0.0.0-20190226205152-f727befe758c
google.golang.org/api v0.0.0-20170223235537-64485db7e8c8 // indirect
google.golang.org/appengine v1.0.1-0.20171212223047-5bee14b453b4 // indirect
google.golang.org/genproto v0.0.0-20180722052100-02b4e9547331 // indirect
google.golang.org/grpc v1.2.1-0.20170607221526-06c984861f30
gopkg.in/alecthomas/kingpin.v2 v2.2.6 // indirect
google.golang.org/grpc v1.19.0
gopkg.in/check.v1 v1.0.0-20160105164936-4f90aeace3a2 // indirect
gopkg.in/inf.v0 v0.9.0 // indirect
gopkg.in/tylerb/graceful.v1 v1.2.13 // indirect
Expand Down
Loading