Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[chore] use mdatagen for receiverhelper metrics #10123

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

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.

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 @@
"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 @@
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 newReceiver(cfg ObsReportSettings) (*ObsReport, error) {
rec := &ObsReport{
telemetryBuilder, err := metadata.NewTelemetryBuilder(cfg.ReceiverCreateSettings.TelemetrySettings)
if err != nil {
return nil, err

Check warning on line 58 in receiver/receiverhelper/obsreport.go

View check run for this annotation

Codecov / codecov/patch

receiver/receiverhelper/obsreport.go#L58

Added line #L58 was not covered by tests
}
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 @@
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
Loading