Skip to content

Commit 44c34df

Browse files
committed
Update OpenCensus to OpenTelemetry
Change is meant to be transparent to user. Using OTel SDK for metric composing in: kmetrics, core metrics, resource group metrics; Using otlp receiver in otel-agent and otel-collector; Configured deployment for new ports and component; Refactor metric composing and recording; Metric prefix remain the same to minimize breaking change. Tests updated.
1 parent 5d07d80 commit 44c34df

File tree

252 files changed

+26997
-10845
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

252 files changed

+26997
-10845
lines changed

cmd/hydration-controller/main.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,19 @@ func main() {
7979
profiler.Service()
8080
ctrl.SetLogger(textlogger.NewLogger(textlogger.NewConfig()))
8181

82-
// Register the kustomize usage metric views.
83-
if err := kmetrics.RegisterKustomizeMetricsViews(); err != nil {
84-
klog.Fatalf("Failed to register OpenCensus views: %v", err)
82+
// Initialize the kustomize metrics
83+
if err := kmetrics.InitializeOTelKustomizeMetrics(); err != nil {
84+
klog.Fatalf("Failed to initialize kustomize metrics: %v", err)
8585
}
8686

8787
// Register the OC Agent exporter
88-
oce, err := kmetrics.RegisterOCAgentExporter(reconcilermanager.HydrationController)
88+
oce, err := kmetrics.RegisterOTelExporter(reconcilermanager.HydrationController)
8989
if err != nil {
9090
klog.Fatalf("Failed to register the OC Agent exporter: %v", err)
9191
}
9292

9393
defer func() {
94-
if err := oce.Stop(); err != nil {
94+
if err := oce.Shutdown(context.Background()); err != nil {
9595
klog.Fatalf("Unable to stop the OC Agent exporter: %v", err)
9696
}
9797
}()

cmd/reconciler-manager/main.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -182,20 +182,20 @@ func main() {
182182
}
183183
setupLog.Info("OtelSA controller registration successful")
184184

185-
// Register the OpenCensus views
186-
if err := metrics.RegisterReconcilerManagerMetricsViews(); err != nil {
187-
setupLog.Error(err, "failed to register OpenCensus views")
185+
// Initialize the metrics
186+
if err := metrics.InitializeOTelMetrics(); err != nil {
187+
setupLog.Error(err, "failed to initialize metrics")
188188
}
189189

190190
// Register the OC Agent exporter
191-
oce, err := metrics.RegisterOCAgentExporter(reconcilermanager.ManagerName)
191+
oce, err := metrics.RegisterOTelExporter(reconcilermanager.ManagerName)
192192
if err != nil {
193193
setupLog.Error(err, "failed to register the OC Agent exporter")
194194
os.Exit(1)
195195
}
196196

197197
defer func() {
198-
if err := oce.Stop(); err != nil {
198+
if err := oce.Shutdown(context.Background()); err != nil {
199199
setupLog.Error(err, "failed to stop the OC Agent exporter")
200200
}
201201
}()
@@ -206,7 +206,7 @@ func main() {
206206
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
207207
setupLog.Error(err, "problem running manager")
208208
// os.Exit(1) does not run deferred functions so explicitly stopping the OC Agent exporter.
209-
if err := oce.Stop(); err != nil {
209+
if err := oce.Shutdown(context.Background()); err != nil {
210210
setupLog.Error(err, "failed to stop the OC Agent exporter")
211211
}
212212
os.Exit(1)

cmd/reconciler/main.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package main
1616

1717
import (
18+
"context"
1819
"flag"
1920
"fmt"
2021
"os"
@@ -140,19 +141,19 @@ func main() {
140141
status.EnablePanicOnMisuse()
141142
}
142143

143-
// Register the OpenCensus views
144-
if err := ocmetrics.RegisterReconcilerMetricsViews(); err != nil {
145-
klog.Fatalf("Failed to register OpenCensus views: %v", err)
144+
// Initialize the metrics
145+
if err := ocmetrics.InitializeOTelMetrics(); err != nil {
146+
klog.Fatalf("Failed to initialize metrics: %v", err)
146147
}
147148

148149
// Register the OC Agent exporter
149-
oce, err := ocmetrics.RegisterOCAgentExporter(reconcilermanager.Reconciler)
150+
oce, err := ocmetrics.RegisterOTelExporter(reconcilermanager.Reconciler)
150151
if err != nil {
151152
klog.Fatalf("Failed to register the OC Agent exporter: %v", err)
152153
}
153154

154155
defer func() {
155-
if err := oce.Stop(); err != nil {
156+
if err := oce.Shutdown(context.Background()); err != nil {
156157
klog.Fatalf("Unable to stop the OC Agent exporter: %v", err)
157158
}
158159
}()

docs/custom-metric-filter.md

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ To **turn off the custom metrics** in Cloud Monitoring, remove this section:
171171
```yaml
172172
# Remove this entire section
173173
metrics/cloudmonitoring:
174-
receivers: [opencensus]
174+
receivers: [otlp]
175175
processors: [batch, filter/cloudmonitoring, metricstransform/cloudmonitoring, resourcedetection]
176176
exporters: [googlecloud]
177177
```
@@ -183,7 +183,7 @@ To **turn off the report to Cloud Monarch**, remove this section:
183183
```yaml
184184
# Remove this entire section
185185
metrics/kubernetes:
186-
receivers: [opencensus]
186+
receivers: [otlp]
187187
processors: [batch, filter/kubernetes, metricstransform/kubernetes, resourcedetection]
188188
exporters: [googlecloud/kubernetes]
189189
```
@@ -235,7 +235,12 @@ metadata:
235235
data:
236236
otel-collector-config.yaml: |
237237
receivers:
238-
opencensus:
238+
otlp:
239+
protocols:
240+
grpc:
241+
endpoint: 0.0.0.0:4317
242+
http:
243+
endpoint: 0.0.0.0:4318
239244
exporters:
240245
debug:
241246
verbosity: detailed
@@ -245,7 +250,7 @@ data:
245250
batch:
246251
pipelines:
247252
metrics:
248-
receivers: [opencensus]
253+
receivers: [otlp]
249254
processors: [batch]
250255
exporters: [debug]
251256
```

e2e/nomostest/prometheus_metrics.go

Lines changed: 47 additions & 47 deletions
Large diffs are not rendered by default.

e2e/testcases/otel_collector_test.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,12 @@ func TestOtelCollectorDeployment(t *testing.T) {
150150
nt.Must(rootSyncGitRepo.CommitAndPush("Adding foo namespace"))
151151
nt.Must(nt.WatchForAllSyncs())
152152

153-
nt.T.Log("Watch for metrics in GCM, timeout 2 minutes")
153+
nt.T.Log("Watch for default metrics in GCM")
154154
ctx := nt.Context
155155
client, err := createGCMClient(ctx)
156156
if err != nil {
157157
nt.T.Fatal(err)
158158
}
159-
// retry for 2 minutes until metric is accessible from GCM
160159
nt.Must(validateMetricTypes(ctx, nt, client, startTime, DefaultGCMMetricTypes))
161160

162161
nt.T.Log("Checking the otel-collector log contains no failure...")
@@ -237,10 +236,10 @@ func TestGCMMetrics(t *testing.T) {
237236

238237
nt.T.Log("Apply custom otel-collector ConfigMap that exports full metric list to GCM")
239238
nt.MustKubectl("apply", "-f", "../testdata/otel-collector/otel-cm-full-gcm.yaml")
239+
nt.Must(nt.Watcher.WatchForCurrentStatus(kinds.Deployment(), csmetrics.OtelCollectorName, configmanagement.MonitoringNamespace))
240240

241241
startTime := time.Now().UTC()
242242

243-
nt.T.Log("Watch for full list of metrics in GCM, timeout 2 minutes")
244243
ctx := nt.Context
245244
client, err := createGCMClient(ctx)
246245
if err != nil {
@@ -308,7 +307,7 @@ func TestOtelCollectorGCMLabelAggregation(t *testing.T) {
308307
nt.T.Fatal(err)
309308
}
310309
// retry for 2 minutes until metric is accessible from GCM
311-
nt.Must(validateMetricTypes(ctx, nt, client, startTime, metricsWithCommitLabel, metricDoesNotHaveLabel(metrics.KeyCommit.Name())))
310+
nt.Must(validateMetricTypes(ctx, nt, client, startTime, metricsWithCommitLabel, metricDoesNotHaveLabel(string(metrics.KeyCommit))))
312311
}
313312

314313
func setupMetricsServiceAccount(nt *nomostest.NT) {

e2e/testdata/otel-collector/otel-cm-full-gcm.yaml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@ apiVersion: v1
1616
data:
1717
otel-collector-config.yaml: |-
1818
receivers:
19-
opencensus:
20-
endpoint: 0.0.0.0:55678
19+
otlp:
20+
protocols:
21+
grpc:
22+
endpoint: 0.0.0.0:4317
23+
http:
24+
endpoint: 0.0.0.0:4318
2125
exporters:
2226
prometheus:
2327
endpoint: 0.0.0.0:8675
@@ -71,10 +75,6 @@ data:
7175
enabled: false
7276
processors:
7377
batch:
74-
# resourcedetection: This processor is needed to correctly mirror resource
75-
# labels from OpenCensus to OpenTelemetry. We also want to keep this same
76-
# processor in Otel Agent configuration as the resource labels are added from
77-
# there
7878
resourcedetection:
7979
detectors: [env, gcp]
8080
# Aggregate some metrics sent to Cloud Monitoring to remove high-cardinality labels (e.g. "commit")
@@ -309,15 +309,15 @@ data:
309309
extensions: [health_check]
310310
pipelines:
311311
metrics/cloudmonitoring:
312-
receivers: [opencensus]
312+
receivers: [otlp]
313313
processors: [batch, filter/cloudmonitoring, metricstransform/cloudmonitoring, resourcedetection]
314314
exporters: [googlecloud]
315315
metrics/prometheus:
316-
receivers: [opencensus]
316+
receivers: [otlp]
317317
processors: [batch]
318318
exporters: [prometheus]
319319
metrics/kubernetes:
320-
receivers: [opencensus]
320+
receivers: [otlp]
321321
processors: [batch, filter/kubernetes, metricstransform/kubernetes, resourcedetection]
322322
exporters: [googlecloud/kubernetes]
323323
kind: ConfigMap

e2e/testdata/otel-collector/otel-cm-kustomize-rejected-labels.yaml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,12 @@ apiVersion: v1
2020
data:
2121
otel-collector-config.yaml: |-
2222
receivers:
23-
opencensus:
24-
endpoint: 0.0.0.0:55678
23+
otlp:
24+
protocols:
25+
grpc:
26+
endpoint: 0.0.0.0:4317
27+
http:
28+
endpoint: 0.0.0.0:4318
2529
exporters:
2630
prometheus:
2731
endpoint: 0.0.0.0:8675
@@ -75,10 +79,6 @@ data:
7579
enabled: false
7680
processors:
7781
batch:
78-
# resourcedetection: This processor is needed to correctly mirror resource
79-
# labels from OpenCensus to OpenTelemetry. We also want to keep this same
80-
# processor in Otel Agent configuration as the resource labels are added from
81-
# there
8282
resourcedetection:
8383
detectors: [env, gcp]
8484
filter/cloudmonitoring:
@@ -264,15 +264,15 @@ data:
264264
extensions: [health_check]
265265
pipelines:
266266
metrics/cloudmonitoring:
267-
receivers: [opencensus]
267+
receivers: [otlp]
268268
processors: [batch, filter/cloudmonitoring, metricstransform/cloudmonitoring, resourcedetection]
269269
exporters: [googlecloud]
270270
metrics/prometheus:
271-
receivers: [opencensus]
271+
receivers: [otlp]
272272
processors: [batch]
273273
exporters: [prometheus]
274274
metrics/kubernetes:
275-
receivers: [opencensus]
275+
receivers: [otlp]
276276
processors: [batch, filter/kubernetes, metricstransform/kubernetes, resourcedetection]
277277
exporters: [googlecloud/kubernetes]
278278
kind: ConfigMap

e2e/testdata/otel-collector/otel-cm-monarch-rejected-labels.yaml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,12 @@ apiVersion: v1
2020
data:
2121
otel-collector-config.yaml: |-
2222
receivers:
23-
opencensus:
24-
endpoint: 0.0.0.0:55678
23+
otlp:
24+
protocols:
25+
grpc:
26+
endpoint: 0.0.0.0:4317
27+
http:
28+
endpoint: 0.0.0.0:4318
2529
exporters:
2630
prometheus:
2731
endpoint: 0.0.0.0:8675
@@ -75,10 +79,6 @@ data:
7579
enabled: false
7680
processors:
7781
batch:
78-
# resourcedetection: This processor is needed to correctly mirror resource
79-
# labels from OpenCensus to OpenTelemetry. We also want to keep this same
80-
# processor in Otel Agent configuration as the resource labels are added from
81-
# there
8282
resourcedetection:
8383
detectors: [env, gcp]
8484
filter/cloudmonitoring:
@@ -173,15 +173,15 @@ data:
173173
extensions: [health_check]
174174
pipelines:
175175
metrics/cloudmonitoring:
176-
receivers: [opencensus]
176+
receivers: [otlp]
177177
processors: [batch, filter/cloudmonitoring, resourcedetection]
178178
exporters: [googlecloud]
179179
metrics/prometheus:
180-
receivers: [opencensus]
180+
receivers: [otlp]
181181
processors: [batch]
182182
exporters: [prometheus]
183183
metrics/kubernetes:
184-
receivers: [opencensus]
184+
receivers: [otlp]
185185
processors: [batch, filter/kubernetes, metricstransform/kubernetes, resourcedetection]
186186
exporters: [googlecloud/kubernetes]
187187
kind: ConfigMap

go.mod

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ require (
88
cloud.google.com/go/logging v1.13.0
99
cloud.google.com/go/monitoring v1.24.3
1010
cloud.google.com/go/trace v1.11.7
11-
contrib.go.opencensus.io/exporter/ocagent v0.7.0
1211
github.com/GoogleContainerTools/kpt-functions-catalog/functions/go/set-namespace v0.4.1-0.20220713210718-d955e7d3a800
1312
github.com/GoogleContainerTools/kpt-functions-sdk/go/fn v0.0.0-20220706221933-7181f451a663
1413
github.com/Masterminds/semver v1.5.0
@@ -33,7 +32,11 @@ require (
3332
github.com/spf13/cobra v1.10.1
3433
github.com/spyzhov/ajson v0.9.6
3534
github.com/stretchr/testify v1.11.1
36-
go.opencensus.io v0.24.0
35+
go.opentelemetry.io/otel v1.38.0
36+
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0
37+
go.opentelemetry.io/otel/metric v1.38.0
38+
go.opentelemetry.io/otel/sdk v1.38.0
39+
go.opentelemetry.io/otel/sdk/metric v1.38.0
3740
go.uber.org/multierr v1.11.0
3841
go.uber.org/zap v1.27.0
3942
golang.org/x/exp v0.0.0-20241217172543-b2144cdd0a67
@@ -76,7 +79,7 @@ require (
7679
github.com/beorn7/perks v1.0.1 // indirect
7780
github.com/blang/semver/v4 v4.0.0 // indirect
7881
github.com/bmatcuk/doublestar/v4 v4.0.2 // indirect
79-
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
82+
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
8083
github.com/cespare/xxhash/v2 v2.3.0 // indirect
8184
github.com/chai2010/gettext-go v1.0.2 // indirect
8285
github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect
@@ -108,7 +111,7 @@ require (
108111
github.com/googleapis/gax-go/v2 v2.15.0 // indirect
109112
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect
110113
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
111-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
114+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect
112115
github.com/inconshreveable/mousetrap v1.1.0 // indirect
113116
github.com/jonboulle/clockwork v0.5.0 // indirect
114117
github.com/josharian/intern v1.0.0 // indirect
@@ -145,12 +148,12 @@ require (
145148
github.com/vbatts/tar-split v0.12.1 // indirect
146149
github.com/x448/float16 v0.8.4 // indirect
147150
github.com/xlab/treeprint v1.2.0 // indirect
151+
go.opencensus.io v0.24.0 // indirect
148152
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
149153
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.61.0 // indirect
150154
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
151-
go.opentelemetry.io/otel v1.37.0 // indirect
152-
go.opentelemetry.io/otel/metric v1.37.0 // indirect
153-
go.opentelemetry.io/otel/trace v1.37.0 // indirect
155+
go.opentelemetry.io/otel/trace v1.38.0 // indirect
156+
go.opentelemetry.io/proto/otlp v1.7.1 // indirect
154157
go.uber.org/atomic v1.11.0 // indirect
155158
go.yaml.in/yaml/v2 v2.4.3 // indirect
156159
go.yaml.in/yaml/v3 v3.0.4 // indirect
@@ -166,7 +169,7 @@ require (
166169
golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated // indirect
167170
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
168171
google.golang.org/genproto v0.0.0-20250603155806-513f23925822 // indirect
169-
google.golang.org/genproto/googleapis/api v0.0.0-20250818200422-3122310a409c // indirect
172+
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 // indirect
170173
google.golang.org/genproto/googleapis/rpc v0.0.0-20251002232023-7c0ddcbb5797 // indirect
171174
google.golang.org/grpc v1.75.1 // indirect
172175
google.golang.org/protobuf v1.36.10 // indirect

0 commit comments

Comments
 (0)