From f54f88cd39fade523b7d2b1c4a9d8ab76a1dd7d3 Mon Sep 17 00:00:00 2001 From: avi robusta Date: Mon, 24 Jul 2023 14:56:41 +0300 Subject: [PATCH 1/4] header fix and increase minimum values --- robusta_krr/core/integrations/prometheus/prometheus_client.py | 3 ++- robusta_krr/core/models/config.py | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/robusta_krr/core/integrations/prometheus/prometheus_client.py b/robusta_krr/core/integrations/prometheus/prometheus_client.py index 824cd925..93ee16fc 100644 --- a/robusta_krr/core/integrations/prometheus/prometheus_client.py +++ b/robusta_krr/core/integrations/prometheus/prometheus_client.py @@ -27,7 +27,8 @@ def __init__( retry: Retry = None, auth: tuple = None, ): - super().__init__(url, headers, disable_ssl, retry, auth) + super().__init__(url=url, headers=headers, disable_ssl=disable_ssl, retry=retry) + self.auth=auth self._session = requests.Session() self._session.mount(self.url, HTTPAdapter(max_retries=retry, pool_maxsize=10, pool_block=True)) diff --git a/robusta_krr/core/models/config.py b/robusta_krr/core/models/config.py index 36eb1529..77a96a99 100644 --- a/robusta_krr/core/models/config.py +++ b/robusta_krr/core/models/config.py @@ -19,8 +19,8 @@ class Config(pd.BaseSettings): selector: Optional[str] = None # Value settings - cpu_min_value: int = pd.Field(5, ge=0) # in millicores - memory_min_value: int = pd.Field(10, ge=0) # in megabytes + cpu_min_value: int = pd.Field(100, ge=0) # in millicores + memory_min_value: int = pd.Field(100, ge=0) # in megabytes # Prometheus Settings prometheus_url: Optional[str] = pd.Field(None) From fba238898e184602ef1b5438e17b32389dc7b4d5 Mon Sep 17 00:00:00 2001 From: avi robusta Date: Mon, 24 Jul 2023 17:25:14 +0300 Subject: [PATCH 2/4] limit size of pod selector --- .../core/integrations/prometheus/metrics/cpu_metric.py | 5 ++++- .../integrations/prometheus/metrics/memory_metric.py | 10 ++++++++-- .../core/integrations/prometheus/prometheus_client.py | 3 +-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/robusta_krr/core/integrations/prometheus/metrics/cpu_metric.py b/robusta_krr/core/integrations/prometheus/metrics/cpu_metric.py index a6046524..419c6e74 100644 --- a/robusta_krr/core/integrations/prometheus/metrics/cpu_metric.py +++ b/robusta_krr/core/integrations/prometheus/metrics/cpu_metric.py @@ -10,7 +10,10 @@ @bind_metric(ResourceType.CPU) class CPUMetricLoader(BaseFilteredMetricLoader): def get_query(self, object: K8sObjectData, resolution: Optional[str]) -> str: - pods_selector = "|".join(pod.name for pod in object.pods) + if len(object.pods) < 20: + pods_selector = "|".join(pod.name for pod in object.pods) + else: + pods_selector = "|".join(set([pod.name[:pod.name.rfind('-')] + '-[0-9a-z]{5}' for pod in object.pods])) cluster_label = self.get_prometheus_cluster_label() return ( "sum(irate(container_cpu_usage_seconds_total{" diff --git a/robusta_krr/core/integrations/prometheus/metrics/memory_metric.py b/robusta_krr/core/integrations/prometheus/metrics/memory_metric.py index fa4fd871..c867c300 100644 --- a/robusta_krr/core/integrations/prometheus/metrics/memory_metric.py +++ b/robusta_krr/core/integrations/prometheus/metrics/memory_metric.py @@ -10,7 +10,10 @@ @bind_metric(ResourceType.Memory) class MemoryMetricLoader(BaseFilteredMetricLoader): def get_query(self, object: K8sObjectData, resolution: Optional[str]) -> str: - pods_selector = "|".join(pod.name for pod in object.pods) + if len(object.pods) < 20: + pods_selector = "|".join(pod.name for pod in object.pods) + else: + pods_selector = "|".join(set([pod.name[:pod.name.rfind('-')] + '-[0-9a-z]{5}' for pod in object.pods])) cluster_label = self.get_prometheus_cluster_label() return ( "sum(container_memory_working_set_bytes{" @@ -33,7 +36,10 @@ class SimpleMemoryMetricLoader(MemoryMetricLoader): """ def get_query(self, object: K8sObjectData, resolution: Optional[str]) -> str: - pods_selector = "|".join(pod.name for pod in object.pods) + if len(object.pods) < 20: + pods_selector = "|".join(pod.name for pod in object.pods) + else: + pods_selector = "|".join(set([pod.name[:pod.name.rfind('-')] + '-[0-9a-z]{5}' for pod in object.pods])) cluster_label = self.get_prometheus_cluster_label() resolution_formatted = f"[{resolution}]" if resolution else "" return ( diff --git a/robusta_krr/core/integrations/prometheus/prometheus_client.py b/robusta_krr/core/integrations/prometheus/prometheus_client.py index 93ee16fc..824cd925 100644 --- a/robusta_krr/core/integrations/prometheus/prometheus_client.py +++ b/robusta_krr/core/integrations/prometheus/prometheus_client.py @@ -27,8 +27,7 @@ def __init__( retry: Retry = None, auth: tuple = None, ): - super().__init__(url=url, headers=headers, disable_ssl=disable_ssl, retry=retry) - self.auth=auth + super().__init__(url, headers, disable_ssl, retry, auth) self._session = requests.Session() self._session.mount(self.url, HTTPAdapter(max_retries=retry, pool_maxsize=10, pool_block=True)) From 71e21e9dbad6063be7ebac2aa38a630b37c502ce Mon Sep 17 00:00:00 2001 From: avi robusta Date: Tue, 25 Jul 2023 09:20:24 +0300 Subject: [PATCH 3/4] fixed pod selector issue --- .../prometheus/metrics/base_filtered_metric.py | 9 ++++++++- .../core/integrations/prometheus/metrics/cpu_metric.py | 5 +---- .../integrations/prometheus/metrics/memory_metric.py | 10 ++-------- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/robusta_krr/core/integrations/prometheus/metrics/base_filtered_metric.py b/robusta_krr/core/integrations/prometheus/metrics/base_filtered_metric.py index 5927aa48..df482759 100644 --- a/robusta_krr/core/integrations/prometheus/metrics/base_filtered_metric.py +++ b/robusta_krr/core/integrations/prometheus/metrics/base_filtered_metric.py @@ -1,7 +1,7 @@ from typing import Any, Optional from robusta_krr.core.abstract.strategies import Metric - +from robusta_krr.core.models.objects import K8sObjectData from .base_metric import BaseMetricLoader, QueryType PrometheusSeries = Any @@ -22,6 +22,13 @@ def get_target_name(series: PrometheusSeries) -> Optional[str]: return series["metric"][label] return None + @staticmethod + def get_pods_selector(object: K8sObjectData) -> Optional[str]: + if len(object.pods) < 20: + return "|".join(pod.name for pod in object.pods) + else: + return "|".join(set([pod.name[:pod.name.rfind('-')] + '-[0-9a-z]{5}' for pod in object.pods])) + @staticmethod def filter_prom_jobs_results( series_list_result: list[PrometheusSeries], diff --git a/robusta_krr/core/integrations/prometheus/metrics/cpu_metric.py b/robusta_krr/core/integrations/prometheus/metrics/cpu_metric.py index 419c6e74..fb7a7b10 100644 --- a/robusta_krr/core/integrations/prometheus/metrics/cpu_metric.py +++ b/robusta_krr/core/integrations/prometheus/metrics/cpu_metric.py @@ -10,10 +10,7 @@ @bind_metric(ResourceType.CPU) class CPUMetricLoader(BaseFilteredMetricLoader): def get_query(self, object: K8sObjectData, resolution: Optional[str]) -> str: - if len(object.pods) < 20: - pods_selector = "|".join(pod.name for pod in object.pods) - else: - pods_selector = "|".join(set([pod.name[:pod.name.rfind('-')] + '-[0-9a-z]{5}' for pod in object.pods])) + pods_selector = self.get_pods_selector(object) cluster_label = self.get_prometheus_cluster_label() return ( "sum(irate(container_cpu_usage_seconds_total{" diff --git a/robusta_krr/core/integrations/prometheus/metrics/memory_metric.py b/robusta_krr/core/integrations/prometheus/metrics/memory_metric.py index c867c300..bbfbe9d4 100644 --- a/robusta_krr/core/integrations/prometheus/metrics/memory_metric.py +++ b/robusta_krr/core/integrations/prometheus/metrics/memory_metric.py @@ -10,10 +10,7 @@ @bind_metric(ResourceType.Memory) class MemoryMetricLoader(BaseFilteredMetricLoader): def get_query(self, object: K8sObjectData, resolution: Optional[str]) -> str: - if len(object.pods) < 20: - pods_selector = "|".join(pod.name for pod in object.pods) - else: - pods_selector = "|".join(set([pod.name[:pod.name.rfind('-')] + '-[0-9a-z]{5}' for pod in object.pods])) + pods_selector = self.get_pods_selector(object) cluster_label = self.get_prometheus_cluster_label() return ( "sum(container_memory_working_set_bytes{" @@ -36,10 +33,7 @@ class SimpleMemoryMetricLoader(MemoryMetricLoader): """ def get_query(self, object: K8sObjectData, resolution: Optional[str]) -> str: - if len(object.pods) < 20: - pods_selector = "|".join(pod.name for pod in object.pods) - else: - pods_selector = "|".join(set([pod.name[:pod.name.rfind('-')] + '-[0-9a-z]{5}' for pod in object.pods])) + pods_selector = self.get_pods_selector(object) cluster_label = self.get_prometheus_cluster_label() resolution_formatted = f"[{resolution}]" if resolution else "" return ( From 8be07594931d0c1edb1c51349d87bd74a118a987 Mon Sep 17 00:00:00 2001 From: avi robusta Date: Tue, 25 Jul 2023 09:32:36 +0300 Subject: [PATCH 4/4] fixed pod selector for statefulsets --- .../integrations/prometheus/metrics/base_filtered_metric.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robusta_krr/core/integrations/prometheus/metrics/base_filtered_metric.py b/robusta_krr/core/integrations/prometheus/metrics/base_filtered_metric.py index df482759..e3ca2af9 100644 --- a/robusta_krr/core/integrations/prometheus/metrics/base_filtered_metric.py +++ b/robusta_krr/core/integrations/prometheus/metrics/base_filtered_metric.py @@ -27,7 +27,7 @@ def get_pods_selector(object: K8sObjectData) -> Optional[str]: if len(object.pods) < 20: return "|".join(pod.name for pod in object.pods) else: - return "|".join(set([pod.name[:pod.name.rfind('-')] + '-[0-9a-z]{5}' for pod in object.pods])) + return "|".join(set([pod.name[:pod.name.rfind('-')] + '-[0-9a-z]{0,5}' for pod in object.pods])) @staticmethod def filter_prom_jobs_results(