add "kubelet_volume_stat_cal_duration_seconds_bucket" VolumeStatCalDuration metrics for fsquato monitoring benchmark

This commit is contained in:
Paco Xu 2021-12-23 16:18:32 +08:00
parent a6299aa2ab
commit c5d8354e0e
2 changed files with 22 additions and 1 deletions

View File

@ -64,6 +64,19 @@ var (
},
[]string{"method", "path", "server_type", "long_running"},
)
// VolumeStatCalDuration tracks the duration in seconds to calculate volume stats.
// this metric is mainly for comparison between fsquota monitoring and `du` for disk usage.
VolumeStatCalDuration = metrics.NewHistogramVec(
&metrics.HistogramOpts{
Subsystem: kubeletSubsystem,
Name: "volume_stat_cal_duration_seconds",
Help: "Duration in seconds to calculate volume stats",
// Use DefBuckets for now, will customize the buckets if necessary.
Buckets: metrics.DefBuckets,
StabilityLevel: metrics.ALPHA,
},
[]string{},
)
)
var registerMetrics sync.Once
@ -74,6 +87,7 @@ func Register() {
legacyregistry.MustRegister(HTTPRequests)
legacyregistry.MustRegister(HTTPRequestsDuration)
legacyregistry.MustRegister(HTTPInflightRequests)
legacyregistry.MustRegister(VolumeStatCalDuration)
})
}

View File

@ -30,6 +30,7 @@ import (
"k8s.io/klog/v2"
stats "k8s.io/kubelet/pkg/apis/stats/v1alpha1"
"k8s.io/kubernetes/pkg/features"
servermetrics "k8s.io/kubernetes/pkg/kubelet/server/metrics"
"k8s.io/kubernetes/pkg/volume"
"k8s.io/kubernetes/pkg/volume/util"
)
@ -133,7 +134,13 @@ func (s *volumeStatCalculator) calcAndStoreStats() {
var ephemeralStats []stats.VolumeStats
var persistentStats []stats.VolumeStats
for name, v := range metricVolumes {
metric, err := v.GetMetrics()
metric, err := func() (*volume.Metrics, error) {
startTime := time.Now()
defer func() {
servermetrics.VolumeStatCalDuration.WithLabelValues().Observe(servermetrics.SinceInSeconds(startTime))
}()
return v.GetMetrics()
}()
if err != nil {
// Expected for Volumes that don't support Metrics
if !volume.IsNotSupported(err) {