Query Service: Add trace ids to logs in expressions (#95203)

This commit is contained in:
Sarah Zinger 2024-10-24 12:01:14 -04:00 committed by GitHub
parent b8b7c7901c
commit 59f5c1edfb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -109,6 +109,7 @@ func (r *queryREST) Connect(connectCtx context.Context, name string, _ runtime.O
raw := &query.QueryDataRequest{}
err := web.Bind(httpreq, raw)
if err != nil {
b.log.Error("Hit unexpected error when reading query", "err", err)
err = errorsK8s.NewBadRequest("error reading query")
// TODO: can we wrap the error so details are not lost?!
// errutil.BadRequest(
@ -170,17 +171,22 @@ func (r *queryREST) Connect(connectCtx context.Context, name string, _ runtime.O
func (b *QueryAPIBuilder) execute(ctx context.Context, req parsedRequestInfo) (qdr *backend.QueryDataResponse, err error) {
switch len(req.Requests) {
case 0:
b.log.Debug("executing empty query")
qdr = &backend.QueryDataResponse{}
case 1:
b.log.Debug("executing single query")
qdr, err = b.handleQuerySingleDatasource(ctx, req.Requests[0])
if alertQueryWithoutExpression(req) {
b.log.Debug("handling alert query without expression")
qdr, err = b.convertQueryWithoutExpression(ctx, req.Requests[0], qdr)
}
default:
b.log.Debug("executing concurrent queries")
qdr, err = b.executeConcurrentQueries(ctx, req.Requests)
}
if len(req.Expressions) > 0 {
b.log.Debug("executing expressions")
qdr, err = b.handleExpressions(ctx, req, qdr)
}
@ -330,6 +336,9 @@ func (b *QueryAPIBuilder) executeConcurrentQueries(ctx context.Context, requests
func (b *QueryAPIBuilder) handleExpressions(ctx context.Context, req parsedRequestInfo, data *backend.QueryDataResponse) (qdr *backend.QueryDataResponse, err error) {
start := time.Now()
ctx, span := b.tracer.Start(ctx, "Query.handleExpressions")
traceId := span.SpanContext().TraceID()
expressionsLogger := b.log.New("traceId", traceId.String())
expressionsLogger.Debug("handling expressions")
defer func() {
var respStatus string
switch {
@ -363,10 +372,12 @@ func (b *QueryAPIBuilder) handleExpressions(ctx context.Context, req parsedReque
allowLongFrames := false // TODO -- depends on input type and only if SQL?
_, res, err := b.converter.Convert(ctx, req.RefIDTypes[refId], dr.Frames, allowLongFrames)
if err != nil {
expressionsLogger.Error("error converting frames for expressions", "error", err)
res.Error = err
}
vars[refId] = res
} else {
expressionsLogger.Error("missing variable in handle expressions", "refId", refId, "expressionRefId", expression.RefID)
// This should error in the parsing phase
err := fmt.Errorf("missing variable %s for %s", refId, expression.RefID)
qdr.Responses[refId] = backend.DataResponse{
@ -380,6 +391,7 @@ func (b *QueryAPIBuilder) handleExpressions(ctx context.Context, req parsedReque
refId := expression.RefID
results, err := expression.Command.Execute(ctx, now, vars, b.tracer)
if err != nil {
expressionsLogger.Error("error executing expression", "error", err)
results.Error = err
}
qdr.Responses[refId] = backend.DataResponse{