From 8eb43e4778081911b46bc46d921ced6ddb39f745 Mon Sep 17 00:00:00 2001 From: Jesus Vazquez Date: Thu, 15 Sep 2022 16:49:32 +0200 Subject: [PATCH] Add error information to graphite queries tracing This commit extends graphite QueryData() instrumentation to include in the traces information about possible errors. I've added an attribute about the graphite response code as well as records for errors if there are any. --- pkg/tsdb/graphite/graphite.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/pkg/tsdb/graphite/graphite.go b/pkg/tsdb/graphite/graphite.go index 37c1f53b7f72..c57617bb982f 100644 --- a/pkg/tsdb/graphite/graphite.go +++ b/pkg/tsdb/graphite/graphite.go @@ -14,12 +14,12 @@ import ( "strings" "time" - "go.opentelemetry.io/otel/attribute" - "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/backend/datasource" "github.com/grafana/grafana-plugin-sdk-go/backend/instancemgmt" "github.com/grafana/grafana-plugin-sdk-go/data" + "go.opentelemetry.io/otel/attribute" + "go.opentelemetry.io/otel/codes" "github.com/grafana/grafana/pkg/components/simplejson" "github.com/grafana/grafana/pkg/infra/httpclient" @@ -153,22 +153,30 @@ func (s *Service) QueryData(ctx context.Context, req *backend.QueryDataRequest) } ctx, span := s.tracer.Start(ctx, "graphite query") + defer span.End() + span.SetAttributes("target", target, attribute.Key("target").String(target)) span.SetAttributes("from", from, attribute.Key("from").String(from)) span.SetAttributes("until", until, attribute.Key("until").String(until)) span.SetAttributes("datasource_id", dsInfo.Id, attribute.Key("datasource_id").Int64(dsInfo.Id)) span.SetAttributes("org_id", req.PluginContext.OrgID, attribute.Key("org_id").Int64(req.PluginContext.OrgID)) - defer span.End() s.tracer.Inject(ctx, graphiteReq.Header, span) res, err := dsInfo.HTTPClient.Do(graphiteReq) + if res != nil { + span.SetAttributes("graphite.response.code", res.StatusCode, attribute.Key("graphite.response.code").Int(res.StatusCode)) + } if err != nil { + span.RecordError(err) + span.SetStatus(codes.Error, err.Error()) return &result, err } frames, err := s.toDataFrames(res) if err != nil { + span.RecordError(err) + span.SetStatus(codes.Error, err.Error()) return &result, err }