Skip to content

Commit

Permalink
Add error information to graphite queries tracing (#55249) (#56246)
Browse files Browse the repository at this point in the history
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 cb99b94)

Co-authored-by: Jesus Vazquez <jesusvazquez@users.noreply.github.com>
  • Loading branch information
grafanabot and jesusvazquez committed Oct 4, 2022
1 parent 85eefb5 commit 50d81e4
Showing 1 changed file with 11 additions and 3 deletions.
14 changes: 11 additions & 3 deletions pkg/tsdb/graphite/graphite.go
Expand Up @@ -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"
Expand Down Expand Up @@ -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
}

Expand Down

0 comments on commit 50d81e4

Please sign in to comment.