Skip to content

Commit

Permalink
[chore] use mdatagen for receiverhelper metrics (open-telemetry#10123)
Browse files Browse the repository at this point in the history
Signed-off-by: Alex Boten <223565+codeboten@users.noreply.github.com>
  • Loading branch information
codeboten authored and steves-canva committed Jun 13, 2024
1 parent 899b237 commit 251542a
Show file tree
Hide file tree
Showing 5 changed files with 218 additions and 79 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

79 changes: 79 additions & 0 deletions receiver/receiverhelper/internal/metadata/generated_telemetry.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

57 changes: 57 additions & 0 deletions receiver/receiverhelper/metadata.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
type: receiverhelper

status:
class: pkg
stability:
beta: [traces, metrics, logs]
distributions: [core, contrib]

telemetry:
metrics:
receiver_accepted_spans:
enabled: true
description: Number of spans successfully pushed into the pipeline.
unit: 1
sum:
value_type: int
monotonic: true

receiver_refused_spans:
enabled: true
description: Number of spans that could not be pushed into the pipeline.
unit: 1
sum:
value_type: int
monotonic: true

receiver_accepted_metric_points:
enabled: true
description: Number of metric points successfully pushed into the pipeline.
unit: 1
sum:
value_type: int
monotonic: true

receiver_refused_metric_points:
enabled: true
description: Number of metric points that could not be pushed into the pipeline.
unit: 1
sum:
value_type: int
monotonic: true

receiver_accepted_log_records:
enabled: true
description: Number of log records successfully pushed into the pipeline.
unit: 1
sum:
value_type: int
monotonic: true

receiver_refused_log_records:
enabled: true
description: Number of log records that could not be pushed into the pipeline.
unit: 1
sum:
value_type: int
monotonic: true
95 changes: 18 additions & 77 deletions receiver/receiverhelper/obsreport.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

//go:generate mdatagen metadata.yaml

package receiverhelper // import "go.opentelemetry.io/collector/receiver/receiverhelper"

import (
Expand All @@ -10,17 +12,13 @@ import (
"go.opentelemetry.io/otel/codes"
"go.opentelemetry.io/otel/metric"
"go.opentelemetry.io/otel/trace"
"go.uber.org/multierr"
"go.uber.org/zap"

"go.opentelemetry.io/collector/component"
"go.opentelemetry.io/collector/config/configtelemetry"
"go.opentelemetry.io/collector/internal/obsreportconfig/obsmetrics"
"go.opentelemetry.io/collector/receiver"
)

const (
receiverScope = obsmetrics.Scope + obsmetrics.SpanNameSep + obsmetrics.ReceiverKey
"go.opentelemetry.io/collector/receiver/receiverhelper/internal/metadata"
)

// ObsReport is a helper to add observability to a receiver.
Expand All @@ -30,17 +28,10 @@ type ObsReport struct {
transport string
longLivedCtx bool
tracer trace.Tracer
meter metric.Meter
logger *zap.Logger

otelAttrs []attribute.KeyValue

acceptedSpansCounter metric.Int64Counter
refusedSpansCounter metric.Int64Counter
acceptedMetricPointsCounter metric.Int64Counter
refusedMetricPointsCounter metric.Int64Counter
acceptedLogRecordsCounter metric.Int64Counter
refusedLogRecordsCounter metric.Int64Counter
otelAttrs []attribute.KeyValue
telemetryBuilder *metadata.TelemetryBuilder
}

// ObsReportSettings are settings for creating an ObsReport.
Expand All @@ -62,74 +53,24 @@ func NewObsReport(cfg ObsReportSettings) (*ObsReport, error) {
}

func newReceiver(cfg ObsReportSettings) (*ObsReport, error) {
rec := &ObsReport{
telemetryBuilder, err := metadata.NewTelemetryBuilder(cfg.ReceiverCreateSettings.TelemetrySettings)
if err != nil {
return nil, err
}
return &ObsReport{
level: cfg.ReceiverCreateSettings.TelemetrySettings.MetricsLevel,
spanNamePrefix: obsmetrics.ReceiverPrefix + cfg.ReceiverID.String(),
transport: cfg.Transport,
longLivedCtx: cfg.LongLivedCtx,
tracer: cfg.ReceiverCreateSettings.TracerProvider.Tracer(cfg.ReceiverID.String()),
meter: cfg.ReceiverCreateSettings.MeterProvider.Meter(receiverScope),
logger: cfg.ReceiverCreateSettings.Logger,

otelAttrs: []attribute.KeyValue{
attribute.String(obsmetrics.ReceiverKey, cfg.ReceiverID.String()),
attribute.String(obsmetrics.TransportKey, cfg.Transport),
},
}

if err := rec.createOtelMetrics(); err != nil {
return nil, err
}

return rec, nil
}

func (rec *ObsReport) createOtelMetrics() error {
var errors, err error

rec.acceptedSpansCounter, err = rec.meter.Int64Counter(
obsmetrics.ReceiverMetricPrefix+obsmetrics.AcceptedSpansKey,
metric.WithDescription("Number of spans successfully pushed into the pipeline."),
metric.WithUnit("1"),
)
errors = multierr.Append(errors, err)

rec.refusedSpansCounter, err = rec.meter.Int64Counter(
obsmetrics.ReceiverMetricPrefix+obsmetrics.RefusedSpansKey,
metric.WithDescription("Number of spans that could not be pushed into the pipeline."),
metric.WithUnit("1"),
)
errors = multierr.Append(errors, err)

rec.acceptedMetricPointsCounter, err = rec.meter.Int64Counter(
obsmetrics.ReceiverMetricPrefix+obsmetrics.AcceptedMetricPointsKey,
metric.WithDescription("Number of metric points successfully pushed into the pipeline."),
metric.WithUnit("1"),
)
errors = multierr.Append(errors, err)

rec.refusedMetricPointsCounter, err = rec.meter.Int64Counter(
obsmetrics.ReceiverMetricPrefix+obsmetrics.RefusedMetricPointsKey,
metric.WithDescription("Number of metric points that could not be pushed into the pipeline."),
metric.WithUnit("1"),
)
errors = multierr.Append(errors, err)

rec.acceptedLogRecordsCounter, err = rec.meter.Int64Counter(
obsmetrics.ReceiverMetricPrefix+obsmetrics.AcceptedLogRecordsKey,
metric.WithDescription("Number of log records successfully pushed into the pipeline."),
metric.WithUnit("1"),
)
errors = multierr.Append(errors, err)

rec.refusedLogRecordsCounter, err = rec.meter.Int64Counter(
obsmetrics.ReceiverMetricPrefix+obsmetrics.RefusedLogRecordsKey,
metric.WithDescription("Number of log records that could not be pushed into the pipeline."),
metric.WithUnit("1"),
)
errors = multierr.Append(errors, err)

return errors
telemetryBuilder: telemetryBuilder,
}, nil
}

// StartTracesOp is called when a request is received from a client.
Expand Down Expand Up @@ -263,14 +204,14 @@ func (rec *ObsReport) recordMetrics(receiverCtx context.Context, dataType compon
var acceptedMeasure, refusedMeasure metric.Int64Counter
switch dataType {
case component.DataTypeTraces:
acceptedMeasure = rec.acceptedSpansCounter
refusedMeasure = rec.refusedSpansCounter
acceptedMeasure = rec.telemetryBuilder.ReceiverAcceptedSpans
refusedMeasure = rec.telemetryBuilder.ReceiverRefusedSpans
case component.DataTypeMetrics:
acceptedMeasure = rec.acceptedMetricPointsCounter
refusedMeasure = rec.refusedMetricPointsCounter
acceptedMeasure = rec.telemetryBuilder.ReceiverAcceptedMetricPoints
refusedMeasure = rec.telemetryBuilder.ReceiverRefusedMetricPoints
case component.DataTypeLogs:
acceptedMeasure = rec.acceptedLogRecordsCounter
refusedMeasure = rec.refusedLogRecordsCounter
acceptedMeasure = rec.telemetryBuilder.ReceiverAcceptedLogRecords
refusedMeasure = rec.telemetryBuilder.ReceiverRefusedLogRecords
}

acceptedMeasure.Add(receiverCtx, int64(numAccepted), metric.WithAttributes(rec.otelAttrs...))
Expand Down

0 comments on commit 251542a

Please sign in to comment.