@@ -6,10 +6,13 @@ import (
6
6
"strings"
7
7
"sync"
8
8
9
+ "github.com/go-logr/logr"
9
10
"github.com/kubernetes-sigs/alibaba-cloud-csi-driver/pkg/utils"
10
11
"github.com/prometheus/client_golang/prometheus"
11
12
versioncollector "github.com/prometheus/client_golang/prometheus/collectors/version"
12
13
"github.com/prometheus/client_golang/prometheus/promhttp"
14
+ "k8s.io/component-base/metrics/legacyregistry"
15
+ _ "k8s.io/component-base/metrics/prometheus/restclient"
13
16
"k8s.io/klog/v2"
14
17
)
15
18
@@ -49,18 +52,35 @@ func NewMetricHandler(driverNames []string, serviceType utils.ServiceType) *Hand
49
52
return newHandler ()
50
53
}
51
54
55
+ type logger struct {
56
+ logr.Logger
57
+ }
58
+
59
+ func (l logger ) Println (v ... interface {}) {
60
+ if len (v ) == 2 {
61
+ msg , ok1 := v [0 ].(string )
62
+ err , ok2 := v [1 ].(error )
63
+ if ok1 && ok2 {
64
+ l .Logger .Error (err , msg )
65
+ return
66
+ }
67
+ }
68
+ l .Logger .Error (nil , "failed to gather metrics" , "error" , v )
69
+ }
70
+
52
71
func (h * Handler ) innerHandler () (http.Handler , error ) {
53
72
r := prometheus .NewRegistry ()
54
- r .MustRegister (versioncollector .NewCollector ("alibaba_cloud_csi_driver" ))
55
- if err := r .Register (csiCollectorInstance ); err != nil {
56
- return nil , fmt .Errorf ("Couldn't register node collector: %s" , err )
57
- }
58
- handler := promhttp .HandlerFor (
59
- r ,
73
+ r .MustRegister (
74
+ versioncollector .NewCollector ("alibaba_cloud_csi_driver" ),
75
+ csiCollectorInstance )
76
+ handler := promhttp .InstrumentMetricHandler (r , promhttp .HandlerFor (
77
+ prometheus.Gatherers {r , legacyregistry .DefaultGatherer },
60
78
promhttp.HandlerOpts {
61
79
ErrorHandling : promhttp .ContinueOnError ,
80
+ ErrorLog : logger {klog .Background ()},
81
+ Registry : r ,
62
82
},
63
- )
83
+ ))
64
84
return handler , nil
65
85
}
66
86
0 commit comments