Skip to content

Commit 65c0cca

Browse files
committed
[cmd/mdatagen] add func to configure attribute set
Adding the ability to automatically add attributes via an attribute set when recording telemetry through the TelemetryBuilder for internal metrics. This wraps the otel go SDK functions for convenience. I have a follow up PR that demonstrates how to use this, we *could* hide the otel go metrics directly, but that can be done in a follow up PR if it's useful. Signed-off-by: alex boten <[email protected]>
1 parent 26a1aed commit 65c0cca

File tree

11 files changed

+275
-11
lines changed

11 files changed

+275
-11
lines changed

cmd/mdatagen/internal/command.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,15 @@ func templatize(tmplFile string, md Metadata) *template.Template {
316316
"isCommand": func() bool {
317317
return md.Status.Class == "cmd"
318318
},
319+
"measurementFunc": func(s string) string {
320+
switch s {
321+
case "Int64Counter", "Float64Counter":
322+
return "Add"
323+
case "Int64Gauge", "Float64Gauge", "Int64Histogram", "Float64Histogram":
324+
return "Record"
325+
}
326+
return "unsupported instrument"
327+
},
319328
"supportsLogs": func() bool { return md.supportsSignal("logs") },
320329
"supportsMetrics": func() bool { return md.supportsSignal("metrics") },
321330
"supportsTraces": func() bool { return md.supportsSignal("traces") },

cmd/mdatagen/internal/samplereceiver/internal/metadata/generated_telemetry.go

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cmd/mdatagen/internal/templates/telemetry.go.tmpl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"sync"
1515
{{- end }}
1616

17+
"go.opentelemetry.io/otel/attribute"
1718
"go.opentelemetry.io/otel/metric"
1819
{{- if .Telemetry.Metrics }}
1920
{{- range $_, $metric := .Telemetry.Metrics }}
@@ -40,6 +41,7 @@ func Tracer(settings component.TelemetrySettings) trace.Tracer {
4041
// TelemetryBuilder provides an interface for components to report telemetry
4142
// as defined in metadata and user config.
4243
type TelemetryBuilder struct {
44+
attributeSet attribute.Set
4345
meter metric.Meter
4446
mu sync.Mutex
4547
registrations []metric.Registration
@@ -61,6 +63,12 @@ func (tbof telemetryBuilderOptionFunc) apply(mb *TelemetryBuilder) {
6163
tbof(mb)
6264
}
6365

66+
func WithAttributeSet(s attribute.Set) telemetryBuilderOptionFunc {
67+
return func(mb *TelemetryBuilder){
68+
mb.attributeSet = s
69+
}
70+
}
71+
6472
{{- range $name, $metric := .Telemetry.Metrics }}
6573
{{ if $metric.Data.Async -}}
6674
// Register{{ $name.Render }}Callback sets callback for observable {{ $name.Render }} metric.
@@ -76,6 +84,10 @@ func (builder *TelemetryBuilder) Register{{ $name.Render }}Callback(cb metric.{{
7684
defer builder.mu.Unlock()
7785
builder.registrations = append(builder.registrations, reg)
7886
return nil
87+
}
88+
{{- else }}
89+
func (builder *TelemetryBuilder) Record{{ $name.Render }}DataPoint(ctx context.Context, val {{ $metric.Data.BasicType }}) {
90+
builder.{{ $name.Render }}.{{ measurementFunc $metric.Data.Instrument }}(ctx, val, metric.WithAttributeSet(builder.attributeSet))
7991
}
8092
{{- end }}
8193

exporter/exporterhelper/internal/metadata/generated_telemetry.go

Lines changed: 44 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

processor/batchprocessor/internal/metadata/generated_telemetry.go

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

processor/memorylimiterprocessor/internal/metadata/generated_telemetry.go

Lines changed: 33 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

processor/processorhelper/internal/metadata/generated_telemetry.go

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

processor/processorhelper/obsreport.go

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,14 @@ package processorhelper // import "go.opentelemetry.io/collector/processor/proce
66
import (
77
"context"
88

9-
"go.opentelemetry.io/otel/attribute"
10-
"go.opentelemetry.io/otel/metric"
11-
129
"go.opentelemetry.io/collector/pipeline"
1310
"go.opentelemetry.io/collector/processor"
14-
"go.opentelemetry.io/collector/processor/internal"
1511
"go.opentelemetry.io/collector/processor/processorhelper/internal/metadata"
1612
)
1713

1814
const signalKey = "otel.signal"
1915

2016
type obsReport struct {
21-
otelAttrs metric.MeasurementOption
2217
telemetryBuilder *metadata.TelemetryBuilder
2318
}
2419

@@ -28,15 +23,11 @@ func newObsReport(set processor.Settings, signal pipeline.Signal) (*obsReport, e
2823
return nil, err
2924
}
3025
return &obsReport{
31-
otelAttrs: metric.WithAttributeSet(attribute.NewSet(
32-
attribute.String(internal.ProcessorKey, set.ID.String()),
33-
attribute.String(signalKey, signal.String()),
34-
)),
3526
telemetryBuilder: telemetryBuilder,
3627
}, nil
3728
}
3829

3930
func (or *obsReport) recordInOut(ctx context.Context, incoming, outgoing int) {
40-
or.telemetryBuilder.ProcessorIncomingItems.Add(ctx, int64(incoming), or.otelAttrs)
41-
or.telemetryBuilder.ProcessorOutgoingItems.Add(ctx, int64(outgoing), or.otelAttrs)
31+
or.telemetryBuilder.RecordProcessorIncomingItemsDataPoint(ctx, int64(incoming))
32+
or.telemetryBuilder.RecordProcessorOutgoingItemsDataPoint(ctx, int64(outgoing))
4233
}

0 commit comments

Comments
 (0)