From 50d81e4f23eebf02ad00b805553a1a0f1999e06e Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Tue, 4 Oct 2022 10:51:11 +0200 Subject: [PATCH] Add error information to graphite queries tracing (#55249) (#56246) 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. (cherry picked from commit cb99b94b0184a95082179c12ce36e1df1ce2e70a) Co-authored-by: Jesus Vazquez --- 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 2844ac5ad709..0a5877e062f8 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 }