From 5e0931336b54a9a0c38c37c7c1afe1ca41033c5f Mon Sep 17 00:00:00 2001 From: Sascha Grunert Date: Fri, 8 Sep 2023 09:08:56 +0200 Subject: [PATCH] kubelet: fix metric container_start_time_seconds's timestamp Adapting the tests and reverting https://github.com/kubernetes/kubernetes/pull/103429 Carry-over from https://github.com/kubernetes/kubernetes/pull/117881 Signed-off-by: Sascha Grunert --- pkg/kubelet/metrics/collectors/resource_metrics.go | 3 +-- .../metrics/collectors/resource_metrics_test.go | 10 +++++----- test/e2e_node/resource_metrics_test.go | 4 ++++ 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/pkg/kubelet/metrics/collectors/resource_metrics.go b/pkg/kubelet/metrics/collectors/resource_metrics.go index 36d29be4f6f..c1b1cdffc2a 100644 --- a/pkg/kubelet/metrics/collectors/resource_metrics.go +++ b/pkg/kubelet/metrics/collectors/resource_metrics.go @@ -211,8 +211,7 @@ func (rc *resourceMetricsCollector) collectContainerStartTime(ch chan<- metrics. return } - ch <- metrics.NewLazyMetricWithTimestamp(s.StartTime.Time, - metrics.NewLazyConstMetric(containerStartTimeDesc, metrics.GaugeValue, float64(s.StartTime.UnixNano())/float64(time.Second), s.Name, pod.PodRef.Name, pod.PodRef.Namespace)) + ch <- metrics.NewLazyConstMetric(containerStartTimeDesc, metrics.GaugeValue, float64(s.StartTime.UnixNano())/float64(time.Second), s.Name, pod.PodRef.Name, pod.PodRef.Namespace) } func (rc *resourceMetricsCollector) collectContainerCPUMetrics(ch chan<- metrics.Metric, pod summary.PodStats, s summary.ContainerStats) { diff --git a/pkg/kubelet/metrics/collectors/resource_metrics_test.go b/pkg/kubelet/metrics/collectors/resource_metrics_test.go index f2bf39433c5..cc1cc573b55 100644 --- a/pkg/kubelet/metrics/collectors/resource_metrics_test.go +++ b/pkg/kubelet/metrics/collectors/resource_metrics_test.go @@ -213,9 +213,9 @@ func TestCollectResourceMetrics(t *testing.T) { container_memory_working_set_bytes{container="container_b",namespace="namespace_a",pod="pod_a"} 1000 1624396278302 # HELP container_start_time_seconds [STABLE] Start time of the container since unix epoch in seconds # TYPE container_start_time_seconds gauge - container_start_time_seconds{container="container_a",namespace="namespace_a",pod="pod_a"} 1.6243962483020916e+09 1624396248302 - container_start_time_seconds{container="container_a",namespace="namespace_b",pod="pod_b"} 1.6243956783020916e+09 1624395678302 - container_start_time_seconds{container="container_b",namespace="namespace_a",pod="pod_a"} 1.6243961583020916e+09 1624396158302 + container_start_time_seconds{container="container_a",namespace="namespace_a",pod="pod_a"} 1.6243962483020916e+09 + container_start_time_seconds{container="container_a",namespace="namespace_b",pod="pod_b"} 1.6243956783020916e+09 + container_start_time_seconds{container="container_b",namespace="namespace_a",pod="pod_a"} 1.6243961583020916e+09 # HELP container_swap_usage_bytes [ALPHA] Current amount of the container swap usage in bytes. Reported only on non-windows systems # TYPE container_swap_usage_bytes gauge container_swap_usage_bytes{container="container_a",namespace="namespace_a",pod="pod_a"} 1000 1624396278302 @@ -319,8 +319,8 @@ func TestCollectResourceMetrics(t *testing.T) { container_memory_working_set_bytes{container="container_a",namespace="namespace_b",pod="pod_b"} 1000 1624396278302 # HELP container_start_time_seconds [STABLE] Start time of the container since unix epoch in seconds # TYPE container_start_time_seconds gauge - container_start_time_seconds{container="container_a",namespace="namespace_a",pod="pod_a"} 1.6243962483020916e+09 1624396248302 - container_start_time_seconds{container="container_a",namespace="namespace_b",pod="pod_b"} 1.6243956783020916e+09 1624395678302 + container_start_time_seconds{container="container_a",namespace="namespace_a",pod="pod_a"} 1.6243962483020916e+09 + container_start_time_seconds{container="container_a",namespace="namespace_b",pod="pod_b"} 1.6243956783020916e+09 # HELP scrape_error [ALPHA] 1 if there was an error while getting container metrics, 0 otherwise # TYPE scrape_error gauge scrape_error 0 diff --git a/test/e2e_node/resource_metrics_test.go b/test/e2e_node/resource_metrics_test.go index a84b449ea03..542d0cce1e9 100644 --- a/test/e2e_node/resource_metrics_test.go +++ b/test/e2e_node/resource_metrics_test.go @@ -163,6 +163,10 @@ func boundedSample(lower, upper interface{}) types.GomegaMatcher { "Metric": gstruct.Ignore(), "Value": gomega.And(gomega.BeNumerically(">=", lower), gomega.BeNumerically("<=", upper)), "Timestamp": gomega.WithTransform(func(t model.Time) time.Time { + if t.Unix() <= 0 { + return time.Now() + } + // model.Time is in Milliseconds since epoch return time.Unix(0, int64(t)*int64(time.Millisecond)) },