Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
0f64be0
feat(exporters): replace opencensus with opentelemetry
daveoy Sep 26, 2025
a709143
fix(test): allow for summary and histogram types to be emit
daveoy Sep 26, 2025
7d3161a
fix(otel): remove otel_scope labels
daveoy Sep 26, 2025
489522d
fix(stackdriver_exporter): filter resource attributes for gcp
daveoy Feb 17, 2026
db54f02
fix(metrics): retain early nil return with no name
daveoy Feb 17, 2026
7463028
chore(exporters): remove deprecated prometheus opts, use otel translator
daveoy Feb 17, 2026
4a15cd8
feat(metric): use metricdata for unit tests
daveoy Feb 17, 2026
2645450
fix(metrics/test): test our New() funcs
daveoy Feb 17, 2026
c131a3d
feat(stackdriver_exporter/test): add cloudmock and use it to test met…
daveoy Feb 18, 2026
531cd83
chore(lint): make the linter happy by not returning some errs
daveoy Feb 18, 2026
bd62f33
fix(stackdriver): restore gce_instance resource, instance_name and ap…
hakman Jul 5, 2026
442e4a7
fix(prometheus): serve metrics from a dedicated registry
hakman Jul 5, 2026
416f151
fix(metrics): error on unsupported aggregation and undeclared labels
hakman Jul 5, 2026
376f166
refactor(metrics): dedupe int64/float64 metric implementations
hakman Jul 5, 2026
dac5ea3
chore: remove dead code from metrics, otel and cloudmock
hakman Jul 5, 2026
261f359
refactor(metrics): simplify otelMetric internals
hakman Jul 5, 2026
7d68780
fix(prometheus): drop target_info from scrape output
hakman Jul 5, 2026
4e6f02c
fix(systemstatsmonitor): key disk_percent_used by device_name only
hakman Jul 5, 2026
94dc11c
fix(prometheus): preserve legacy metric names
hakman Jul 22, 2026
0bb9606
fix(stackdriver): disable client telemetry
hakman Jul 22, 2026
d21b64f
fix(metrics): preserve legacy metric names
hakman Jul 25, 2026
151c8f1
fix(metrics): preserve declared labels
hakman Jul 25, 2026
2ea6993
fix(stackdriver): skip descriptor management
hakman Jul 25, 2026
ba58a18
chore(deps): update module metadata
hakman Jul 25, 2026
719e9b4
fix(metrics): align fake label handling
hakman Jul 25, 2026
81ba6c6
fix(metrics): reject normalized name collisions
hakman Jul 25, 2026
a2fa92f
fix(stackdriver): preserve custom metric names
hakman Jul 25, 2026
4c875dc
fix(stackdriver): use portable metric paths
hakman Jul 25, 2026
d777a2d
fix(otel): shut down meter provider on exit and reject late registrat…
hakman Aug 22, 2026
b824cff
chore(deps): tidy go.sum after rebase
hakman Aug 22, 2026
d5a256f
chore(deps): remove OTel migration scaffold
hakman Aug 22, 2026
ec63dca
refactor(metrics): consolidate metric mappings
hakman Aug 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
32 changes: 24 additions & 8 deletions cmd/nodeproblemdetector/node_problem_detector.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ package main

import (
"context"
"time"

"k8s.io/klog/v2"

Expand All @@ -29,7 +30,9 @@ import (
"k8s.io/node-problem-detector/pkg/exporters/prometheusexporter"
"k8s.io/node-problem-detector/pkg/problemdaemon"
"k8s.io/node-problem-detector/pkg/problemdetector"
"k8s.io/node-problem-detector/pkg/problemmetrics"
"k8s.io/node-problem-detector/pkg/types"
otelutil "k8s.io/node-problem-detector/pkg/util/otel"
"k8s.io/node-problem-detector/pkg/version"
)

Expand All @@ -43,13 +46,7 @@ func npdMain(ctx context.Context, npdo *options.NodeProblemDetectorOptions) erro
npdo.SetConfigFromDeprecatedOptionsOrDie()
npdo.ValidOrDie()

// Initialize problem daemons.
problemDaemons := problemdaemon.NewProblemDaemons(npdo.MonitorConfigPaths)
if len(problemDaemons) == 0 {
klog.Fatalf("No problem daemon is configured")
}

// Initialize exporters.
// Initialize exporters first to set up the OpenTelemetry readers.
defaultExporters := []types.Exporter{}
if ke := k8sexporter.NewExporterOrDie(ctx, npdo); ke != nil {
defaultExporters = append(defaultExporters, ke)
Expand All @@ -59,9 +56,28 @@ func npdMain(ctx context.Context, npdo *options.NodeProblemDetectorOptions) erro
defaultExporters = append(defaultExporters, pe)
klog.Info("Prometheus exporter started.")
}

plugableExporters := exporters.NewExporters()

// Initialize OpenTelemetry meter provider with all registered readers
// This must be called after all exporters have been created and registered their readers
meterProvider := otelutil.InitializeMeterProvider()
defer func() {
// Drop the cancellation of ctx because it is likely already canceled
// at shutdown, which would prevent flushing pending metrics.
shutdownCtx, cancel := context.WithTimeout(context.WithoutCancel(ctx), 10*time.Second)
defer cancel()
if err := meterProvider.Shutdown(shutdownCtx); err != nil {
klog.Errorf("Failed to shut down OpenTelemetry meter provider: %v", err)
}
}()
problemmetrics.InitializeGlobalProblemMetricsManager()

// Initialize problem daemons.
problemDaemons := problemdaemon.NewProblemDaemons(npdo.MonitorConfigPaths)
if len(problemDaemons) == 0 {
klog.Fatalf("No problem daemon is configured")
}

npdExporters := []types.Exporter{}
npdExporters = append(npdExporters, defaultExporters...)
npdExporters = append(npdExporters, plugableExporters...)
Expand Down
31 changes: 8 additions & 23 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,31 @@ go 1.26.5

require (
cloud.google.com/go/compute/metadata v0.9.0
contrib.go.opencensus.io/exporter/prometheus v0.4.2
contrib.go.opencensus.io/exporter/stackdriver v0.13.14
cloud.google.com/go/monitoring v1.24.3
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0
github.com/acobaugh/osrelease v0.1.0
github.com/avast/retry-go/v4 v4.7.0
github.com/coreos/go-systemd/v22 v22.6.0
github.com/euank/go-kmsg-parser v2.0.0+incompatible
github.com/hpcloud/tail v1.0.0
github.com/prometheus/client_golang v1.23.2
github.com/prometheus/client_model v0.6.2
github.com/prometheus/common v0.67.5
github.com/prometheus/otlptranslator v1.0.0
github.com/prometheus/procfs v0.20.1
github.com/shirou/gopsutil/v4 v4.25.12
github.com/spf13/pflag v1.0.10
github.com/stretchr/testify v1.11.1
go.opencensus.io v0.24.0
go.opentelemetry.io/otel v1.44.0
go.opentelemetry.io/otel/exporters/prometheus v0.66.0
go.opentelemetry.io/otel/metric v1.44.0
go.opentelemetry.io/otel/sdk v1.44.0
go.opentelemetry.io/otel/sdk/metric v1.44.0
golang.org/x/sys v0.46.0
google.golang.org/api v0.272.0
google.golang.org/genproto/googleapis/api v0.0.0-20260319201613-d00831a3d3e7
google.golang.org/grpc v1.79.3
google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af
k8s.io/api v0.35.7
k8s.io/apimachinery v0.35.7
k8s.io/client-go v0.35.7
Expand All @@ -35,20 +39,14 @@ require (
require (
cloud.google.com/go/auth v0.18.2 // indirect
cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect
cloud.google.com/go/monitoring v1.24.3 // indirect
cloud.google.com/go/trace v1.11.7 // indirect
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect
github.com/aws/aws-sdk-go v1.44.72 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/ebitengine/purego v0.9.1 // indirect
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
github.com/go-kit/log v0.2.1 // indirect
github.com/go-logfmt/logfmt v0.5.1 // indirect
github.com/go-logr/logr v1.4.3 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
Expand All @@ -66,33 +64,24 @@ require (
github.com/go-openapi/swag/stringutils v0.25.5 // indirect
github.com/go-openapi/swag/typeutils v0.25.5 // indirect
github.com/go-openapi/swag/yamlutils v0.25.5 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/gnostic-models v0.7.0 // indirect
github.com/google/s2a-go v0.1.9 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect
github.com/googleapis/gax-go/v2 v2.18.0 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/power-devops/perfstat v0.0.0-20240221224432-82ca36839d55 // indirect
github.com/prometheus/client_golang v1.23.2 // indirect
github.com/prometheus/prometheus v0.311.3 // indirect
github.com/prometheus/statsd_exporter v0.22.7 // indirect
github.com/tklauser/go-sysconf v0.3.16 // indirect
github.com/tklauser/numcpus v0.11.0 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/yusufpapurcu/wmi v1.2.4 // indirect
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect
go.opentelemetry.io/otel/metric v1.44.0 // indirect
go.opentelemetry.io/otel/sdk v1.44.0 // indirect
go.opentelemetry.io/otel/trace v1.44.0 // indirect
go.yaml.in/yaml/v2 v2.4.4 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
Expand All @@ -104,15 +93,11 @@ require (
golang.org/x/text v0.39.0 // indirect
golang.org/x/time v0.15.0 // indirect
google.golang.org/genproto v0.0.0-20260217215200-42d3e9bedb6d // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20260319201613-d00831a3d3e7 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c // indirect
google.golang.org/grpc v1.79.3 // indirect
google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // indirect
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
gopkg.in/fsnotify.v1 v1.4.7 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
Expand Down
Loading
Loading