Skip to content

Commit

Permalink
Add error information to graphite queries tracing (#55249)
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)
  • Loading branch information
jesusvazquez authored and grafanabot committed Oct 4, 2022
1 parent 85eefb5 commit 2486a8e
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 2486a8e

Please sign in to comment.