From cb99b94b0184a95082179c12ce36e1df1ce2e70a Mon Sep 17 00:00:00 2001 From: Jesus Vazquez Date: Tue, 4 Oct 2022 10:30:27 +0200 Subject: [PATCH] Add error information to graphite queries tracing (#55249) 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 }