Documentation ¶
Overview ¶
Package stats contains the logic to process APM stats.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Aggregation ¶
type Aggregation struct { BucketsAggregationKey PayloadAggregationKey }
Aggregation contains all the dimension on which we aggregate statistics.
func NewAggregationFromGroup ¶
func NewAggregationFromGroup(g *pb.ClientGroupedStats) Aggregation
NewAggregationFromGroup gets the Aggregation key of grouped stats.
func NewAggregationFromSpan ¶
func NewAggregationFromSpan(s *pb.Span, origin string, aggKey PayloadAggregationKey, enablePeerTagsAgg bool, peerTagKeys []string) (Aggregation, []string)
NewAggregationFromSpan creates a new aggregation from the provided span and env
type BucketsAggregationKey ¶
type BucketsAggregationKey struct { Service string Name string Resource string Type string SpanKind string StatusCode uint32 Synthetics bool PeerTagsHash uint64 IsTraceRoot pb.Trilean }
BucketsAggregationKey specifies the key by which a bucket is aggregated.
type ClientStatsAggregator ¶
type ClientStatsAggregator struct { In chan *pb.ClientStatsPayload // contains filtered or unexported fields }
ClientStatsAggregator aggregates client stats payloads on buckets of bucketDuration If a single payload is received on a bucket, this Aggregator is a passthrough. If two or more payloads collide, their counts will be aggregated into one bucket. Multiple payloads will be sent: - Original payloads with their distributions will be sent with counts zeroed. - A single payload with the bucket aggregated counts will be sent. This and the aggregator timestamp alignment ensure that all counts will have at most one point per second per agent for a specific granularity. While distributions are not tied to the agent.
func NewClientStatsAggregator ¶
func NewClientStatsAggregator(conf *config.AgentConfig, writer Writer, statsd statsd.ClientInterface) *ClientStatsAggregator
NewClientStatsAggregator initializes a new aggregator ready to be started
func (*ClientStatsAggregator) Start ¶
func (a *ClientStatsAggregator) Start()
Start starts the aggregator.
func (*ClientStatsAggregator) Stop ¶
func (a *ClientStatsAggregator) Stop()
Stop stops the aggregator. Calling Stop twice will panic.
type Concentrator ¶
type Concentrator struct { Writer Writer // contains filtered or unexported fields }
Concentrator produces time bucketed statistics from a stream of raw traces. https://en.wikipedia.org/wiki/Knelson_concentrator Gets an imperial shitton of traces, and outputs pre-computed data structures allowing to find the gold (stats) amongst the traces.
func NewConcentrator ¶
func NewConcentrator(conf *config.AgentConfig, writer Writer, now time.Time, statsd statsd.ClientInterface) *Concentrator
NewConcentrator initializes a new concentrator ready to be started
func (*Concentrator) Add ¶
func (c *Concentrator) Add(t Input)
Add applies the given input to the concentrator.
func (*Concentrator) Flush ¶
func (c *Concentrator) Flush(force bool) *pb.StatsPayload
Flush deletes and returns complete statistic buckets. The force boolean guarantees flushing all buckets if set to true.
func (*Concentrator) Run ¶
func (c *Concentrator) Run()
Run runs the main loop of the concentrator goroutine. Traces are received through `Add`, this loop only deals with flushing.
type Input ¶
type Input struct { Traces []traceutil.ProcessedTrace ContainerID string ContainerTags []string }
Input specifies a set of traces originating from a certain payload.
func NewStatsInput ¶
func NewStatsInput(numChunks int, containerID string, clientComputedStats bool, conf *config.AgentConfig) Input
NewStatsInput allocates a stats input for an incoming trace payload
func OTLPTracesToConcentratorInputs ¶ added in v0.55.0
func OTLPTracesToConcentratorInputs( traces ptrace.Traces, conf *config.AgentConfig, containerTagKeys []string, ) []Input
OTLPTracesToConcentratorInputs converts eligible OTLP spans to Concentrator.Input. The converted Inputs only have the minimal number of fields for APM stats calculation and are only meant to be used in Concentrator.Add(). Do not use them for other purposes.
type PayloadAggregationKey ¶
type PayloadAggregationKey struct { Env string Hostname string Version string ContainerID string GitCommitSha string ImageTag string }
PayloadAggregationKey specifies the key by which a payload is aggregated.
type RawBucket ¶
type RawBucket struct {
// contains filtered or unexported fields
}
RawBucket is used to compute span data and aggregate it within a time-framed bucket. This should not be used outside the agent, use ClientStatsBucket for this.
func NewRawBucket ¶
NewRawBucket opens a new calculation bucket for time ts and initializes it properly
func (*RawBucket) Export ¶
func (sb *RawBucket) Export() map[PayloadAggregationKey]*pb.ClientStatsBucket
Export transforms a RawBucket into a ClientStatsBucket, typically used before communicating data to the API, as RawBucket is the internal type while ClientStatsBucket is the public, shared one.
func (*RawBucket) HandleSpan ¶
func (sb *RawBucket) HandleSpan(s *pb.Span, weight float64, isTop bool, origin string, aggKey PayloadAggregationKey, enablePeerTagsAgg bool, peerTagKeys []string)
HandleSpan adds the span to this bucket stats, aggregated with the finest grain matching given aggregators
type Writer ¶ added in v0.56.0
type Writer interface { // Write this payload Write(*pb.StatsPayload) }
Writer is an interface for something that can Write Stats Payloads