From 8cb4d8774cf4e2efa337aedbc4d64c1cd17bd830 Mon Sep 17 00:00:00 2001 From: Filip Petkovski Date: Fri, 3 May 2024 10:49:11 +0200 Subject: [PATCH 1/2] Emit tracing span for remote queries This commit adds a new tracing span for remotely delegated queries with attributes related to the query and remote engine. Signed-off-by: Filip Petkovski --- pkg/query/remote_engine.go | 42 ++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/pkg/query/remote_engine.go b/pkg/query/remote_engine.go index 2b0e67e056..4e62dd2e25 100644 --- a/pkg/query/remote_engine.go +++ b/pkg/query/remote_engine.go @@ -13,6 +13,7 @@ import ( "github.com/go-kit/log" "github.com/go-kit/log/level" + "github.com/opentracing/opentracing-go" "github.com/pkg/errors" "github.com/prometheus/prometheus/model/labels" "github.com/prometheus/prometheus/promql" @@ -187,10 +188,11 @@ func (r *remoteEngine) NewRangeQuery(_ context.Context, _ promql.QueryOpts, plan client: r.client, opts: r.opts, - plan: plan, - start: start, - end: end, - interval: interval, + plan: plan, + start: start, + end: end, + interval: interval, + remoteAddr: r.client.GetAddress(), }, nil } @@ -200,10 +202,11 @@ func (r *remoteEngine) NewInstantQuery(_ context.Context, _ promql.QueryOpts, pl client: r.client, opts: r.opts, - plan: plan, - start: ts, - end: ts, - interval: 0, + plan: plan, + start: ts, + end: ts, + interval: 0, + remoteAddr: r.client.GetAddress(), }, nil } @@ -212,21 +215,34 @@ type remoteQuery struct { client Client opts Opts - plan api.RemoteQuery - start time.Time - end time.Time - interval time.Duration + plan api.RemoteQuery + start time.Time + end time.Time + interval time.Duration + remoteAddr string cancel context.CancelFunc } func (r *remoteQuery) Exec(ctx context.Context) *promql.Result { start := time.Now() - + qctx, cancel := context.WithCancel(ctx) r.cancel = cancel defer cancel() + queryRange := r.end.Sub(r.start) + span, qctx := opentracing.StartSpanFromContext(qctx, "remote_query_exec", opentracing.Tags{ + "query": r.plan.String(), + "remote_address": r.remoteAddr, + "start": r.start.UTC().String(), + "end": r.end.UTC().String(), + "interval_seconds": r.interval.Seconds(), + "range_seconds": queryRange.Seconds(), + "range_human": queryRange, + }) + defer span.Finish() + var maxResolution int64 if r.opts.AutoDownsample { maxResolution = int64(r.interval.Seconds() / 5) From 170eabc0fe0971bc10a9ddfa21a72656c24f5162 Mon Sep 17 00:00:00 2001 From: Filip Petkovski Date: Fri, 3 May 2024 10:57:58 +0200 Subject: [PATCH 2/2] Fix lint Signed-off-by: Filip Petkovski --- pkg/query/remote_engine.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/query/remote_engine.go b/pkg/query/remote_engine.go index 4e62dd2e25..16e4b7cb31 100644 --- a/pkg/query/remote_engine.go +++ b/pkg/query/remote_engine.go @@ -226,7 +226,7 @@ type remoteQuery struct { func (r *remoteQuery) Exec(ctx context.Context) *promql.Result { start := time.Now() - + qctx, cancel := context.WithCancel(ctx) r.cancel = cancel defer cancel()