Skip to content
This repository was archived by the owner on Aug 23, 2023. It is now read-only.

Commit df2734b

Browse files
authored
Merge pull request #1410 from grafana/tracingFixes
clean up tracing
2 parents 581522c + 325f517 commit df2734b

8 files changed

+136
-82
lines changed

api/cluster.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
"github.com/grafana/metrictank/cluster"
1717
"github.com/grafana/metrictank/expr/tagquery"
1818
"github.com/grafana/metrictank/stats"
19+
"github.com/grafana/metrictank/tracing"
1920
log "github.com/sirupsen/logrus"
2021
"github.com/tinylib/msgp/msgp"
2122
)
@@ -471,6 +472,8 @@ func (s *Server) peerQuerySpeculativeChan(ctx context.Context, data cluster.Trac
471472
errorChan := make(chan error, 1)
472473

473474
go func() {
475+
ctx, peerSpan := tracing.NewSpan(ctx, s.Tracer, name+" peerQuery")
476+
defer peerSpan.Finish()
474477
defer close(errorChan)
475478
defer close(resultChan)
476479

@@ -480,7 +483,8 @@ func (s *Server) peerQuerySpeculativeChan(ctx context.Context, data cluster.Trac
480483
errorChan <- err
481484
return
482485
}
483-
log.Debugf("HTTP %s across %d instances", name, len(peerGroups)-1)
486+
peerSpan.SetTag("peerGroups", len(peerGroups))
487+
log.Debugf("HTTP %s across %d instances", name, len(peerGroups))
484488

485489
reqCtx, cancel := context.WithCancel(ctx)
486490
defer cancel()

api/dataprocessor.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"github.com/grafana/metrictank/util"
1919
opentracing "github.com/opentracing/opentracing-go"
2020
tags "github.com/opentracing/opentracing-go/ext"
21+
traceLog "github.com/opentracing/opentracing-go/log"
2122
"github.com/raintank/schema"
2223
log "github.com/sirupsen/logrus"
2324
)
@@ -263,7 +264,7 @@ func (s *Server) getTargetsLocal(ctx context.Context, ss *models.StorageStats, r
263264
log.Debugf("DP getTargetsLocal: handling %d reqs locally", len(reqs))
264265
rCtx, span := tracing.NewSpan(ctx, s.Tracer, "getTargetsLocal")
265266
defer span.Finish()
266-
span.SetTag("num_reqs", len(reqs))
267+
span.LogFields(traceLog.Int("num_reqs", len(reqs)))
267268
responses := make(chan getTargetsResp, len(reqs))
268269

269270
var wg sync.WaitGroup

api/graphite.go

+48-33
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ import (
2929
"github.com/grafana/metrictank/util"
3030
opentracing "github.com/opentracing/opentracing-go"
3131
tags "github.com/opentracing/opentracing-go/ext"
32+
traceLog "github.com/opentracing/opentracing-go/log"
3233
"github.com/raintank/dur"
3334
log "github.com/sirupsen/logrus"
3435
)
@@ -136,24 +137,48 @@ func (s *Server) findSeries(ctx context.Context, orgId uint32, patterns []string
136137
return series, nil
137138
}
138139

140+
func (s *Server) proxyToGraphite(ctx *middleware.Context) {
141+
proxyCtx, span := tracing.NewSpan(ctx.Req.Context(), s.Tracer, "graphiteproxy")
142+
tags.SpanKindRPCClient.Set(span)
143+
tags.PeerService.Set(span, "graphite")
144+
ctx.Req = macaron.Request{ctx.Req.WithContext(proxyCtx)}
145+
ctx.Req.Request.Body = ctx.Body
146+
carrier := opentracing.HTTPHeadersCarrier(ctx.Req.Header)
147+
err := s.Tracer.Inject(span.Context(), opentracing.HTTPHeaders, carrier)
148+
if err != nil {
149+
log.Errorf("HTTP renderMetrics failed to inject span into headers: %s", err.Error())
150+
}
151+
graphiteProxy.ServeHTTP(ctx.Resp, ctx.Req.Request)
152+
if span != nil {
153+
span.Finish()
154+
}
155+
renderReqProxied.Inc()
156+
}
157+
139158
func (s *Server) renderMetrics(ctx *middleware.Context, request models.GraphiteRender) {
159+
// retrieve te span that was created by the api Middleware handler. The handler will
160+
// call span.Finish()
140161
span := opentracing.SpanFromContext(ctx.Req.Context())
141162

163+
span.SetTag("orgid", ctx.OrgId)
164+
142165
// note: the model is already validated to assure at least one of them has len >0
143166
if len(request.Targets) == 0 {
144167
request.Targets = request.TargetsRails
145168
}
146169

147-
span.SetTag("from", request.FromTo.From)
148-
span.SetTag("until", request.FromTo.Until)
149-
span.SetTag("to", request.FromTo.To)
150-
span.SetTag("tz", request.FromTo.Tz)
151-
span.SetTag("mdp", request.MaxDataPoints)
152-
span.SetTag("targets", request.Targets)
153-
span.SetTag("format", request.Format)
154-
span.SetTag("noproxy", request.NoProxy)
155-
span.SetTag("process", request.Process)
156-
span.SetTag("orgid", ctx.OrgId)
170+
// log information about the request.
171+
span.LogFields(
172+
traceLog.String("from", request.FromTo.From),
173+
traceLog.String("until", request.FromTo.Until),
174+
traceLog.String("to", request.FromTo.To),
175+
traceLog.String("tz", request.FromTo.Tz),
176+
traceLog.Int32("mdp", int32(request.MaxDataPoints)),
177+
traceLog.String("targets", fmt.Sprintf("%q", request.Targets)),
178+
traceLog.String("format", request.Format),
179+
traceLog.Bool("noproxy", request.NoProxy),
180+
traceLog.String("process", request.Process),
181+
)
157182

158183
now := time.Now()
159184
defaultFrom := uint32(now.Add(-time.Duration(24) * time.Hour).Unix())
@@ -168,9 +193,11 @@ func (s *Server) renderMetrics(ctx *middleware.Context, request models.GraphiteR
168193
return
169194
}
170195

171-
span.SetTag("fromUnix", fromUnix)
172-
span.SetTag("toUnix", toUnix)
173-
span.SetTag("span", toUnix-fromUnix)
196+
span.LogFields(
197+
traceLog.Int32("fromUnix", int32(fromUnix)),
198+
traceLog.Int32("toUnix", int32(toUnix)),
199+
traceLog.Int32("span", int32(toUnix-fromUnix)),
200+
)
174201

175202
// render API is modeled after graphite, so from exclusive, to inclusive.
176203
// in MT, from is inclusive, to is exclusive (which is akin to slice syntax)
@@ -187,9 +214,7 @@ func (s *Server) renderMetrics(ctx *middleware.Context, request models.GraphiteR
187214
reqRenderTargetCount.Value(len(request.Targets))
188215

189216
if request.Process == "none" {
190-
ctx.Req.Request.Body = ctx.Body
191-
graphiteProxy.ServeHTTP(ctx.Resp, ctx.Req.Request)
192-
renderReqProxied.Inc()
217+
s.proxyToGraphite(ctx)
193218
return
194219
}
195220

@@ -207,40 +232,30 @@ func (s *Server) renderMetrics(ctx *middleware.Context, request models.GraphiteR
207232
ctx.Error(http.StatusBadRequest, "localOnly requested, but the request cant be handled locally")
208233
return
209234
}
210-
newctx, span := tracing.NewSpan(ctx.Req.Context(), s.Tracer, "graphiteproxy")
211-
tags.SpanKindRPCClient.Set(span)
212-
tags.PeerService.Set(span, "graphite")
213-
ctx.Req = macaron.Request{ctx.Req.WithContext(newctx)}
214-
ctx.Req.Request.Body = ctx.Body
215-
graphiteProxy.ServeHTTP(ctx.Resp, ctx.Req.Request)
216-
if span != nil {
217-
span.Finish()
218-
}
235+
s.proxyToGraphite(ctx)
219236
proxyStats.Miss(string(fun))
220-
renderReqProxied.Inc()
221237
return
222238
}
223239
ctx.Error(http.StatusBadRequest, err.Error())
224240
return
225241
}
226242

227-
newctx, span := tracing.NewSpan(ctx.Req.Context(), s.Tracer, "executePlan")
228-
defer span.Finish()
229-
ctx.Req = macaron.Request{ctx.Req.WithContext(newctx)}
230-
out, meta, err := s.executePlan(ctx.Req.Context(), ctx.OrgId, plan)
243+
execCtx, execSpan := tracing.NewSpan(ctx.Req.Context(), s.Tracer, "executePlan")
244+
defer execSpan.Finish()
245+
out, meta, err := s.executePlan(execCtx, ctx.OrgId, plan)
231246
if err != nil {
232247
err := response.WrapError(err)
233248
if err.Code() != http.StatusBadRequest {
234-
tracing.Failure(span)
249+
tracing.Failure(execSpan)
235250
}
236-
tracing.Error(span, err)
251+
tracing.Error(execSpan, err)
237252
response.Write(ctx, err)
238253
return
239254
}
240255

241256
// check to see if the request has been canceled, if so abort now.
242257
select {
243-
case <-newctx.Done():
258+
case <-execCtx.Done():
244259
//request canceled
245260
response.Write(ctx, response.RequestCanceledErr)
246261
return

api/models/ccache.go

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package models
22

33
import (
4+
"fmt"
5+
46
opentracing "github.com/opentracing/opentracing-go"
7+
traceLog "github.com/opentracing/opentracing-go/log"
58
)
69

710
type CCacheDelete struct {
@@ -14,9 +17,11 @@ type CCacheDelete struct {
1417
}
1518

1619
func (cd CCacheDelete) Trace(span opentracing.Span) {
17-
span.SetTag("patterns", cd.Patterns)
18-
span.SetTag("org", cd.OrgId)
19-
span.SetTag("propagate", cd.Propagate)
20+
span.LogFields(
21+
traceLog.String("patterns", fmt.Sprintf("%q", cd.Patterns)),
22+
traceLog.Int32("org", int32(cd.OrgId)),
23+
traceLog.Bool("propagate", cd.Propagate),
24+
)
2025
}
2126

2227
func (cd CCacheDelete) TraceDebug(span opentracing.Span) {

api/models/graphite.go

+6-2
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,15 @@ package models
22

33
import (
44
"bytes"
5+
"fmt"
56
"sort"
67
"strconv"
78

89
"github.com/go-macaron/binding"
910
"github.com/grafana/metrictank/idx"
1011
pickle "github.com/kisielk/og-rek"
1112
opentracing "github.com/opentracing/opentracing-go"
13+
traceLog "github.com/opentracing/opentracing-go/log"
1214
"gopkg.in/macaron.v1"
1315
)
1416

@@ -133,8 +135,10 @@ type GraphiteTagDelSeries struct {
133135
}
134136

135137
func (g GraphiteTagDelSeries) Trace(span opentracing.Span) {
136-
span.SetTag("paths", g.Paths)
137-
span.SetTag("propagate", g.Propagate)
138+
span.LogFields(
139+
traceLog.String("paths", fmt.Sprintf("%q", g.Paths)),
140+
traceLog.Bool("propagate", g.Propagate),
141+
)
138142
}
139143

140144
func (g GraphiteTagDelSeries) TraceDebug(span opentracing.Span) {

api/models/meta_records.go

+13-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package models
22

33
import (
4+
"fmt"
5+
46
opentracing "github.com/opentracing/opentracing-go"
7+
traceLog "github.com/opentracing/opentracing-go/log"
58
)
69

710
type MetaTagRecordUpsert struct {
@@ -11,9 +14,11 @@ type MetaTagRecordUpsert struct {
1114
}
1215

1316
func (m MetaTagRecordUpsert) Trace(span opentracing.Span) {
14-
span.SetTag("metaTags", m.MetaTags)
15-
span.SetTag("queries", m.Queries)
16-
span.SetTag("propagate", m.Propagate)
17+
span.LogFields(
18+
traceLog.String("metaTags", fmt.Sprintf("%q", m.MetaTags)),
19+
traceLog.String("queries", fmt.Sprintf("%q", m.Queries)),
20+
traceLog.Bool("propagate", m.Propagate),
21+
)
1722
}
1823

1924
func (m MetaTagRecordUpsert) TraceDebug(span opentracing.Span) {
@@ -39,9 +44,11 @@ type IndexMetaTagRecordUpsert struct {
3944
}
4045

4146
func (m IndexMetaTagRecordUpsert) Trace(span opentracing.Span) {
42-
span.SetTag("org", m.OrgId)
43-
span.SetTag("metaTags", m.MetaTags)
44-
span.SetTag("queries", m.Queries)
47+
span.SetTag("orgId", m.OrgId)
48+
span.LogFields(
49+
traceLog.String("metaTags", fmt.Sprintf("%q", m.MetaTags)),
50+
traceLog.String("queries", fmt.Sprintf("%q", m.Queries)),
51+
)
4552
}
4653

4754
func (m IndexMetaTagRecordUpsert) TraceDebug(span opentracing.Span) {

0 commit comments

Comments
 (0)