mirror of
https://github.com/redis/go-redis.git
synced 2025-11-02 15:33:16 +03:00
feat(otel): Add a 'error_type' metrics attribute to separate context errors (#3566)
Co-authored-by: vragov_pf <vragov_pf@magnit.ru>
This commit is contained in:
@@ -2,6 +2,7 @@ package redisotel
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net"
|
||||
"sync"
|
||||
@@ -271,9 +272,10 @@ func (mh *metricsHook) DialHook(hook redis.DialHook) redis.DialHook {
|
||||
|
||||
dur := time.Since(start)
|
||||
|
||||
attrs := make([]attribute.KeyValue, 0, len(mh.attrs)+1)
|
||||
attrs := make([]attribute.KeyValue, 0, len(mh.attrs)+2)
|
||||
attrs = append(attrs, mh.attrs...)
|
||||
attrs = append(attrs, statusAttr(err))
|
||||
attrs = append(attrs, errorTypeAttribute(err))
|
||||
|
||||
mh.createTime.Record(ctx, milliseconds(dur), metric.WithAttributeSet(attribute.NewSet(attrs...)))
|
||||
return conn, err
|
||||
@@ -288,10 +290,11 @@ func (mh *metricsHook) ProcessHook(hook redis.ProcessHook) redis.ProcessHook {
|
||||
|
||||
dur := time.Since(start)
|
||||
|
||||
attrs := make([]attribute.KeyValue, 0, len(mh.attrs)+2)
|
||||
attrs := make([]attribute.KeyValue, 0, len(mh.attrs)+3)
|
||||
attrs = append(attrs, mh.attrs...)
|
||||
attrs = append(attrs, attribute.String("type", "command"))
|
||||
attrs = append(attrs, statusAttr(err))
|
||||
attrs = append(attrs, errorTypeAttribute(err))
|
||||
|
||||
mh.useTime.Record(ctx, milliseconds(dur), metric.WithAttributeSet(attribute.NewSet(attrs...)))
|
||||
|
||||
@@ -309,10 +312,11 @@ func (mh *metricsHook) ProcessPipelineHook(
|
||||
|
||||
dur := time.Since(start)
|
||||
|
||||
attrs := make([]attribute.KeyValue, 0, len(mh.attrs)+2)
|
||||
attrs := make([]attribute.KeyValue, 0, len(mh.attrs)+3)
|
||||
attrs = append(attrs, mh.attrs...)
|
||||
attrs = append(attrs, attribute.String("type", "pipeline"))
|
||||
attrs = append(attrs, statusAttr(err))
|
||||
attrs = append(attrs, errorTypeAttribute(err))
|
||||
|
||||
mh.useTime.Record(ctx, milliseconds(dur), metric.WithAttributeSet(attribute.NewSet(attrs...)))
|
||||
|
||||
@@ -330,3 +334,16 @@ func statusAttr(err error) attribute.KeyValue {
|
||||
}
|
||||
return attribute.String("status", "ok")
|
||||
}
|
||||
|
||||
func errorTypeAttribute(err error) attribute.KeyValue {
|
||||
switch {
|
||||
case err == nil:
|
||||
return attribute.String("error_type", "none")
|
||||
case errors.Is(err, context.Canceled):
|
||||
return attribute.String("error_type", "context_canceled")
|
||||
case errors.Is(err, context.DeadlineExceeded):
|
||||
return attribute.String("error_type", "context_timeout")
|
||||
default:
|
||||
return attribute.String("error_type", "other")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user