traceutil

package
v0.55.0-rc.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 7, 2024 License: Apache-2.0 Imports: 21 Imported by: 7

Documentation

Overview

Package traceutil contains functions for extracting and processing traces. It should only import payload and nothing else.

Index

Constants

View Source
const (
	// DefaultSpanName is the default name we assign a span if it's missing and we have no reasonable fallback
	DefaultSpanName = "unnamed_operation"
	// DefaultServiceName is the default name we assign a service if it's missing and we have no reasonable fallback
	DefaultServiceName = "unnamed-service"
)
View Source
const (
	// MaxNameLen the maximum length a name can have
	MaxNameLen = 100
	// MaxServiceLen the maximum length a service can have
	MaxServiceLen = 100
	// MaxResourceLen the maximum length a resource can have
	MaxResourceLen = 5000
)

Variables

View Source
var (
	// ErrEmpty specifies that the passed input was empty.
	ErrEmpty = errors.New("empty")
	// ErrTooLong signifies that the input was too long.
	ErrTooLong = errors.New("too long")
	// ErrInvalid signifies that the input was invalid.
	ErrInvalid = errors.New("invalid")
)
View Source
var (
	// SignalTypeSet is the OTel attribute set for traces.
	SignalTypeSet = attribute.NewSet(attribute.String("signal", "traces"))
)

Functions

func ChildrenMap

func ChildrenMap(t pb.Trace) map[uint64][]*pb.Span

ChildrenMap returns a map containing for each span id the list of its direct children.

func ComputeTopLevel

func ComputeTopLevel(trace pb.Trace)

ComputeTopLevel updates all the spans top-level attribute.

A span is considered top-level if:

  • it's a root span
  • OR its parent is unknown (other part of the code, distributed trace)
  • OR its parent belongs to another service (in that case it's a "local root" being the highest ancestor of other spans belonging to this service and attached to it).

func GetAppServicesTags added in v0.42.0

func GetAppServicesTags() map[string]string

GetAppServicesTags returns the env vars pulled from the Azure App Service instance. In some cases we will need to add extra tags for function apps.

func GetEnv

func GetEnv(root *pb.Span, t *pb.TraceChunk) string

GetEnv returns the first "env" tag found in trace t. Search starts by root

func GetMeta

func GetMeta(s *pb.Span, key string) (string, bool)

GetMeta gets the metadata value in the span Meta map.

func GetMetaDefault

func GetMetaDefault(s *pb.Span, key, fallback string) string

GetMetaDefault gets the metadata value in the span Meta map and fallbacks to fallback.

func GetMetaStruct

func GetMetaStruct(s *pb.Span, key string) (interface{}, bool)

GetMetaStruct gets the structured metadata value in the span MetaStruct map.

func GetMetric added in v0.40.0

func GetMetric(s *pb.Span, key string) (float64, bool)

GetMetric gets the metadata value in the span Metrics map.

func GetOTelAttrVal added in v0.54.0

func GetOTelAttrVal(attrs pcommon.Map, normalize bool, keys ...string) string

GetOTelAttrVal returns the matched value as a string in the input map with the given keys. If there are multiple keys present, the first matched one is returned. If normalize is true, normalize the return value with NormalizeTagValue.

func GetOTelAttrValInResAndSpanAttrs added in v0.54.0

func GetOTelAttrValInResAndSpanAttrs(span ptrace.Span, res pcommon.Resource, normalize bool, keys ...string) string

GetOTelAttrValInResAndSpanAttrs returns the matched value as a string in the OTel resource attributes and span attributes with the given keys. If there are multiple keys present, the first matched one is returned. If the key is present in both resource attributes and span attributes, resource attributes take precedence. If normalize is true, normalize the return value with NormalizeTagValue.

func GetOTelContainerTags added in v0.54.0

func GetOTelContainerTags(rattrs pcommon.Map, tagKeys []string) []string

GetOTelContainerTags returns a list of DD container tags in the OTel resource attributes. Tags are always normalized.

func GetOTelHostname added in v0.54.0

func GetOTelHostname(span ptrace.Span, res pcommon.Resource, tr *attributes.Translator, fallbackHost string) string

GetOTelHostname returns the DD hostname based on OTel span and resource attributes.

func GetOTelOperationName added in v0.54.0

func GetOTelOperationName(
	span ptrace.Span,
	res pcommon.Resource,
	lib pcommon.InstrumentationScope,
	spanNameAsResourceName bool,
	spanNameRemappings map[string]string,
	normalize bool) string

GetOTelOperationName returns the DD operation name based on OTel span and resource attributes and given configs.

func GetOTelResource added in v0.54.0

func GetOTelResource(span ptrace.Span, res pcommon.Resource) (resName string)

GetOTelResource returns the DD resource name based on OTel span and resource attributes.

func GetOTelService added in v0.54.0

func GetOTelService(span ptrace.Span, res pcommon.Resource, normalize bool) string

GetOTelService returns the DD service name based on OTel span and resource attributes.

func GetOTelSpanType added in v0.54.0

func GetOTelSpanType(span ptrace.Span, res pcommon.Resource) string

GetOTelSpanType returns the DD span type based on OTel span kind and attributes.

func GetOTelStatusCode added in v0.54.0

func GetOTelStatusCode(span ptrace.Span) uint32

GetOTelStatusCode returns the DD status code of the OTel span.

func GetRoot

func GetRoot(t pb.Trace) *pb.Span

GetRoot extracts the root span from a trace

func GetTopLevelOTelSpans added in v0.54.0

func GetTopLevelOTelSpans(spanByID map[pcommon.SpanID]ptrace.Span, resByID map[pcommon.SpanID]pcommon.Resource, topLevelByKind bool) map[pcommon.SpanID]struct{}

GetTopLevelOTelSpans returns the span IDs of the top level OTel spans.

func HasTopLevel

func HasTopLevel(s *pb.Span) bool

HasTopLevel returns true if span is top-level.

func IndexOTelSpans added in v0.54.0

IndexOTelSpans iterates over the input OTel spans and returns 3 maps: OTel spans indexed by span ID, OTel resources indexed by span ID, OTel instrumentation scopes indexed by span ID. Skips spans with invalid trace ID or span ID. If there are multiple spans with the same (non-zero) span ID, the last one wins.

func IsMeasured

func IsMeasured(s *pb.Span) bool

IsMeasured returns true if a span should be measured (i.e., it should get trace metrics calculated).

func IsPartialSnapshot

func IsPartialSnapshot(s *pb.Span) bool

IsPartialSnapshot returns true if the span is a partial snapshot. This kind of spans are partial images of long-running spans. When incomplete, a partial snapshot has a metric _dd.partial_version which is a positive integer. The metric usually increases each time a new version of the same span is sent by the tracer

func NormalizeName

func NormalizeName(name string) (string, error)

NormalizeName normalizes a span name and returns an error describing the reason (if any) why the name was modified.

func NormalizePeerService added in v0.45.0

func NormalizePeerService(svc string) (string, error)

NormalizePeerService normalizes a span's peer.service and returns an error describing the reason (if any) why the name was modified.

func NormalizeService

func NormalizeService(svc string, lang string) (string, error)

NormalizeService normalizes a span service and returns an error describing the reason (if any) why the name was modified.

func NormalizeTag

func NormalizeTag(v string) string

NormalizeTag applies some normalization to ensure the full tag_key:tag_value string matches the backend requirements.

func NormalizeTagValue added in v0.47.0

func NormalizeTagValue(v string) string

NormalizeTagValue applies some normalization to ensure the tag value matches the backend requirements. It should be used for cases where we have just the tag_value as the input (instead of tag_key:tag_value).

func OTelSpanIDToUint64 added in v0.55.0

func OTelSpanIDToUint64(b [8]byte) uint64

OTelSpanIDToUint64 converts an OTel span ID to an uint64

func OTelSpanKindName added in v0.55.0

func OTelSpanKindName(k ptrace.SpanKind) string

OTelSpanKindName converts the given SpanKind to a valid Datadog span kind name.

func OTelTraceIDToUint64 added in v0.55.0

func OTelTraceIDToUint64(b [16]byte) uint64

OTelTraceIDToUint64 converts an OTel trace ID to an uint64

func SetMeasured added in v0.53.0

func SetMeasured(s *pb.Span, measured bool)

SetMeasured sets the measured attribute of the span.

func SetMeta

func SetMeta(s *pb.Span, key, val string)

SetMeta sets the metadata at key to the val on the span s.

func SetMetaStruct

func SetMetaStruct(s *pb.Span, key string, val interface{}) error

SetMetaStruct sets the structured metadata at key to the val on the span s.

func SetMetric

func SetMetric(s *pb.Span, key string, val float64)

SetMetric sets the metric at key to the val on the span s.

func SetTopLevel

func SetTopLevel(s *pb.Span, topLevel bool)

SetTopLevel sets the top-level attribute of the span.

func TruncateUTF8

func TruncateUTF8(s string, limit int) string

TruncateUTF8 truncates the given string to make sure it uses less than limit bytes. If the last character is an utf8 character that would be splitten, it removes it entirely to make sure the resulting string is not broken.

func UpdateTracerTopLevel

func UpdateTracerTopLevel(s *pb.Span)

UpdateTracerTopLevel sets _top_level tag on spans flagged by the tracer

Types

type ProcessedTrace

type ProcessedTrace struct {
	TraceChunk             *pb.TraceChunk
	Root                   *pb.Span
	TracerEnv              string
	AppVersion             string
	TracerHostname         string
	ClientDroppedP0sWeight float64
	GitCommitSha           string
	ImageTag               string
}

ProcessedTrace represents a trace being processed in the agent.

func (*ProcessedTrace) Clone added in v0.45.0

func (pt *ProcessedTrace) Clone() *ProcessedTrace

Clone creates a copy of ProcessedTrace, cloning p, p.TraceChunk, and p.Root. This means it is safe to modify the returned ProcessedTrace's (pt's) fields along with fields in pt.TraceChunk and fields in pt.Root.

The most important consequence of this is that the TraceChunk's Spans field can be assigned, *BUT* the Spans value itself should not be modified. i.e. This is ok:

pt2 := pt.Clone()
pt2.TraceChunk.Spans = make([]*pb.Span)

but this is NOT ok:

pt2 := pt.Clone()
pt2.TraceChunk.Spans[0] = &pb.Span{} // This will be visible in pt.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL