Skip to content

Commit 9378ab5

Browse files
author
Alex Boten
authored
[processor/servicegraph] update own telemetry to use otel (#29917)
This updates the servicegraph processor to emit telemetry using OpenTelemetry instead of OpenCensus. Related #29867 --------- Signed-off-by: Alex Boten <[email protected]>
1 parent 48aa0dd commit 9378ab5

File tree

6 files changed

+162
-69
lines changed

6 files changed

+162
-69
lines changed
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Use this changelog template to create an entry for release notes.
2+
3+
# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix'
4+
change_type: enhancement
5+
6+
# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver)
7+
component: servicegraphprocessor
8+
9+
# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`).
10+
note: update own telemetry to use otel
11+
12+
# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists.
13+
issues: [29917]
14+
15+
# (Optional) One or more lines of additional information to render under the primary note.
16+
# These lines will be padded with 2 spaces and then inserted directly into the document.
17+
# Use pipe (|) for multiline entries.
18+
subtext:
19+
20+
# If your change doesn't affect end users or the exported elements of any package,
21+
# you should instead start your pull request title with [chore] or use the "Skip Changelog" label.
22+
# Optional: The change log or logs in which this entry should be included.
23+
# e.g. '[user]' or '[user, api]'
24+
# Include 'user' if the change is relevant to end users.
25+
# Include 'api' if there is a change to a library API.
26+
# Default: '[user]'
27+
change_logs: []

processor/servicegraphprocessor/factory.go

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"context"
88
"time"
99

10-
"go.opencensus.io/stats/view"
1110
"go.opentelemetry.io/collector/component"
1211
"go.opentelemetry.io/collector/connector"
1312
"go.opentelemetry.io/collector/consumer"
@@ -51,9 +50,6 @@ func init() {
5150

5251
// NewFactory creates a factory for the servicegraph processor.
5352
func NewFactory() processor.Factory {
54-
// TODO: Handle this err
55-
_ = view.Register(serviceGraphProcessorViews()...)
56-
5753
return processor.NewFactory(
5854
typeStr,
5955
createDefaultConfig,
@@ -63,8 +59,6 @@ func NewFactory() processor.Factory {
6359

6460
// NewConnectorFactoryFunc creates a function that returns a factory for the servicegraph connector.
6561
var NewConnectorFactoryFunc = func(cfgType component.Type, tracesToMetricsStability component.StabilityLevel) connector.Factory {
66-
// TODO: Handle this err
67-
_ = view.Register(serviceGraphProcessorViews()...)
6862
return connector.NewFactory(
6963
cfgType,
7064
createDefaultConfig,
@@ -84,13 +78,13 @@ func createDefaultConfig() component.Config {
8478
}
8579

8680
func createTracesProcessor(_ context.Context, params processor.CreateSettings, cfg component.Config, nextConsumer consumer.Traces) (processor.Traces, error) {
87-
p := newProcessor(params.Logger, cfg)
81+
p := newProcessor(params.TelemetrySettings, cfg)
8882
p.tracesConsumer = nextConsumer
8983
return p, nil
9084
}
9185

9286
func createTracesToMetricsConnector(_ context.Context, params connector.CreateSettings, cfg component.Config, nextConsumer consumer.Metrics) (connector.Traces, error) {
93-
c := newProcessor(params.Logger, cfg)
87+
c := newProcessor(params.TelemetrySettings, cfg)
9488
c.metricsConsumer = nextConsumer
9589
return c, nil
9690
}

processor/servicegraphprocessor/go.mod

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ go 1.20
55

66
require (
77
github.com/stretchr/testify v1.8.4
8-
go.opencensus.io v0.24.0
98
go.opentelemetry.io/collector/component v0.91.0
109
go.opentelemetry.io/collector/config/configgrpc v0.91.0
10+
go.opentelemetry.io/collector/config/configtelemetry v0.91.0
1111
go.opentelemetry.io/collector/connector v0.91.0
1212
go.opentelemetry.io/collector/consumer v0.91.0
1313
go.opentelemetry.io/collector/exporter v0.91.0
@@ -17,6 +17,8 @@ require (
1717
go.opentelemetry.io/collector/pdata v1.0.0
1818
go.opentelemetry.io/collector/processor v0.91.0
1919
go.opentelemetry.io/collector/semconv v0.91.0
20+
go.opentelemetry.io/otel/metric v1.21.0
21+
go.opentelemetry.io/otel/sdk/metric v1.21.0
2022
go.uber.org/zap v1.26.0
2123
)
2224

@@ -67,12 +69,12 @@ require (
6769
github.com/tklauser/go-sysconf v0.3.12 // indirect
6870
github.com/tklauser/numcpus v0.6.1 // indirect
6971
github.com/yusufpapurcu/wmi v1.2.3 // indirect
72+
go.opencensus.io v0.24.0 // indirect
7073
go.opentelemetry.io/collector v0.91.0 // indirect
7174
go.opentelemetry.io/collector/config/configauth v0.91.0 // indirect
7275
go.opentelemetry.io/collector/config/configcompression v0.91.0 // indirect
7376
go.opentelemetry.io/collector/config/confignet v0.91.0 // indirect
7477
go.opentelemetry.io/collector/config/configopaque v0.91.0 // indirect
75-
go.opentelemetry.io/collector/config/configtelemetry v0.91.0 // indirect
7678
go.opentelemetry.io/collector/config/configtls v0.91.0 // indirect
7779
go.opentelemetry.io/collector/config/internal v0.91.0 // indirect
7880
go.opentelemetry.io/collector/confmap v0.91.0 // indirect
@@ -93,9 +95,7 @@ require (
9395
go.opentelemetry.io/otel/exporters/prometheus v0.44.1-0.20231201153405-6027c1ae76f2 // indirect
9496
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0 // indirect
9597
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 // indirect
96-
go.opentelemetry.io/otel/metric v1.21.0 // indirect
9798
go.opentelemetry.io/otel/sdk v1.21.0 // indirect
98-
go.opentelemetry.io/otel/sdk/metric v1.21.0 // indirect
9999
go.opentelemetry.io/otel/trace v1.21.0 // indirect
100100
go.opentelemetry.io/proto/otlp v1.0.0 // indirect
101101
go.uber.org/multierr v1.11.0 // indirect

processor/servicegraphprocessor/metrics.go

Lines changed: 0 additions & 45 deletions
This file was deleted.

processor/servicegraphprocessor/processor.go

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,19 @@ import (
1212
"sync"
1313
"time"
1414

15-
"go.opencensus.io/stats"
1615
"go.opentelemetry.io/collector/component"
1716
"go.opentelemetry.io/collector/consumer"
1817
"go.opentelemetry.io/collector/exporter"
1918
"go.opentelemetry.io/collector/pdata/pcommon"
2019
"go.opentelemetry.io/collector/pdata/pmetric"
2120
"go.opentelemetry.io/collector/pdata/ptrace"
2221
"go.opentelemetry.io/collector/processor"
22+
"go.opentelemetry.io/collector/processor/processorhelper"
2323
semconv "go.opentelemetry.io/collector/semconv/v1.13.0"
24+
"go.opentelemetry.io/otel/metric"
2425
"go.uber.org/zap"
2526

27+
"github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor/internal/metadata"
2628
"github.com/open-telemetry/opentelemetry-collector-contrib/processor/servicegraphprocessor/internal/store"
2729
)
2830

@@ -76,10 +78,14 @@ type serviceGraphProcessor struct {
7678
metricMutex sync.RWMutex
7779
keyToMetric map[string]metricSeries
7880

81+
statDroppedSpans metric.Int64Counter
82+
statTotalEdges metric.Int64Counter
83+
statExpiredEdges metric.Int64Counter
84+
7985
shutdownCh chan any
8086
}
8187

82-
func newProcessor(logger *zap.Logger, config component.Config) *serviceGraphProcessor {
88+
func newProcessor(set component.TelemetrySettings, config component.Config) *serviceGraphProcessor {
8389
pConfig := config.(*Config)
8490

8591
bounds := defaultLatencyHistogramBuckets
@@ -102,9 +108,28 @@ func newProcessor(logger *zap.Logger, config component.Config) *serviceGraphProc
102108
pConfig.VirtualNodePeerAttributes = defaultPeerAttributes
103109
}
104110

111+
scopeName := "processor/servicegraphprocessor"
112+
meter := set.MeterProvider.Meter(scopeName)
113+
114+
droppedSpan, _ := meter.Int64Counter(
115+
processorhelper.BuildCustomMetricName(metadata.Type, "dropped_spans"),
116+
metric.WithDescription("Number of spans dropped when trying to add edges"),
117+
metric.WithUnit("1"),
118+
)
119+
totalEdges, _ := meter.Int64Counter(
120+
processorhelper.BuildCustomMetricName(metadata.Type, "total_edges"),
121+
metric.WithDescription("Total number of unique edges"),
122+
metric.WithUnit("1"),
123+
)
124+
expiredEdges, _ := meter.Int64Counter(
125+
processorhelper.BuildCustomMetricName(metadata.Type, "expired_edges"),
126+
metric.WithDescription("Number of edges that expired before finding its matching span"),
127+
metric.WithUnit("1"),
128+
)
129+
105130
return &serviceGraphProcessor{
106131
config: pConfig,
107-
logger: logger,
132+
logger: set.Logger,
108133
startTime: time.Now(),
109134
reqTotal: make(map[string]int64),
110135
reqFailedTotal: make(map[string]int64),
@@ -117,6 +142,9 @@ func newProcessor(logger *zap.Logger, config component.Config) *serviceGraphProc
117142
reqDurationBounds: bounds,
118143
keyToMetric: make(map[string]metricSeries),
119144
shutdownCh: make(chan any),
145+
statDroppedSpans: droppedSpan,
146+
statTotalEdges: totalEdges,
147+
statExpiredEdges: expiredEdges,
120148
}
121149
}
122150

@@ -299,7 +327,7 @@ func (p *serviceGraphProcessor) aggregateMetrics(ctx context.Context, td ptrace.
299327

300328
if errors.Is(err, store.ErrTooManyItems) {
301329
totalDroppedSpans++
302-
stats.Record(ctx, statDroppedSpans.M(1))
330+
p.statDroppedSpans.Add(ctx, 1)
303331
continue
304332
}
305333

@@ -309,7 +337,7 @@ func (p *serviceGraphProcessor) aggregateMetrics(ctx context.Context, td ptrace.
309337
}
310338

311339
if isNew {
312-
stats.Record(ctx, statTotalEdges.M(1))
340+
p.statTotalEdges.Add(ctx, 1)
313341
}
314342
}
315343
}
@@ -354,7 +382,7 @@ func (p *serviceGraphProcessor) onExpire(e *store.Edge) {
354382
zap.Stringer("trace_id", e.TraceID),
355383
)
356384

357-
stats.Record(context.Background(), statExpiredEdges.M(1))
385+
p.statExpiredEdges.Add(context.Background(), 1)
358386

359387
if virtualNodeFeatureGate.IsEnabled() {
360388
e.ConnectionType = store.VirtualNode

0 commit comments

Comments
 (0)