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

[exporterhelper] Add exporter dropped metrics #11077

Closed
Closed
Show file tree
Hide file tree
Changes from 1 commit
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
13 changes: 13 additions & 0 deletions exporter/exporterhelper/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -309,6 +309,7 @@ func newBaseExporter(set exporter.Settings, signal component.DataType, osf obsre
func (be *baseExporter) send(ctx context.Context, req Request) error {
err := be.queueSender.send(ctx, req)
if err != nil {
recordDroppedMetric(ctx, be.obsrep, int64(req.ItemsCount()))
be.set.Logger.Error("Exporting failed. Rejecting data."+be.exportFailureMessage,
zap.Error(err), zap.Int("rejected_items", req.ItemsCount()))
}
Expand Down Expand Up @@ -349,3 +350,15 @@ func (be *baseExporter) Shutdown(ctx context.Context) error {
// Last shutdown the wrapped exporter itself.
be.ShutdownFunc.Shutdown(ctx))
}

func recordDroppedMetric(ctx context.Context, obsrep *obsReport, count int64) {
if obsrep.dataType == component.DataTypeTraces {
obsrep.telemetryBuilder.ExporterDroppedSpans.Add(ctx, count)
}
if obsrep.dataType == component.DataTypeMetrics {
obsrep.telemetryBuilder.ExporterDroppedMetricPoints.Add(ctx, count)
}
if obsrep.dataType == component.DataTypeLogs {
obsrep.telemetryBuilder.ExporterDroppedLogRecords.Add(ctx, count)
}
}
24 changes: 24 additions & 0 deletions exporter/exporterhelper/documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,30 @@

The following telemetry is emitted by this component.

### otelcol_exporter_dropped_log_records

Number of log records dropped after failing to export.

| Unit | Metric Type | Value Type | Monotonic |
| ---- | ----------- | ---------- | --------- |
| {records} | Sum | Int | true |

### otelcol_exporter_dropped_metric_points

Number of metric points dropped after failing to export.

| Unit | Metric Type | Value Type | Monotonic |
| ---- | ----------- | ---------- | --------- |
| {records} | Sum | Int | true |

### otelcol_exporter_dropped_spans

Number of spans dropped after failing to export.

| Unit | Metric Type | Value Type | Monotonic |
| ---- | ----------- | ---------- | --------- |
| {records} | Sum | Int | true |

### otelcol_exporter_enqueue_failed_log_records

Number of log records failed to be added to the sending queue.
Expand Down

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

24 changes: 24 additions & 0 deletions exporter/exporterhelper/metadata.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,27 @@ telemetry:
gauge:
value_type: int
async: true

exporter_dropped_spans:
enabled: true
description: Number of spans dropped after failing to export.
unit: "{records}"
TylerHelmuth marked this conversation as resolved.
Show resolved Hide resolved
sum:
value_type: int
monotonic: true

exporter_dropped_metric_points:
enabled: true
description: Number of metric points dropped after failing to export.
unit: "{records}"
TylerHelmuth marked this conversation as resolved.
Show resolved Hide resolved
sum:
value_type: int
monotonic: true

exporter_dropped_log_records:
enabled: true
description: Number of log records dropped after failing to export.
unit: "{records}"
sum:
value_type: int
monotonic: true
1 change: 1 addition & 0 deletions exporter/exporterhelper/queue_sender.go
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ func newQueueSender(q exporterqueue.Queue[Request], set exporter.Settings, numCo
consumeFunc := func(ctx context.Context, req Request) error {
err := qs.nextSender.send(ctx, req)
if err != nil {
recordDroppedMetric(ctx, qs.obsrep, int64(req.ItemsCount()))
set.Logger.Error("Exporting failed. Dropping data."+exportFailureMessage,
zap.Error(err), zap.Int("dropped_items", req.ItemsCount()))
}
Expand Down
Loading