From 834323c1e17f77ac1b9874f7151a80221f55cee2 Mon Sep 17 00:00:00 2001 From: Redouane Kachach Date: Thu, 19 Jun 2025 09:46:22 +0200 Subject: [PATCH] mgr/cephadm: adding needs_monitoring flag This new flag indicates whether a given service needs monitoring (to be included in Prometheus jobs as scraping target) or not Signed-off-by: Redouane Kachach --- src/pybind/mgr/cephadm/services/cephadmservice.py | 8 ++++++++ src/pybind/mgr/cephadm/services/ingress.py | 4 ++++ src/pybind/mgr/cephadm/services/monitoring.py | 8 ++++++++ src/pybind/mgr/cephadm/services/nfs.py | 4 ++++ src/pybind/mgr/cephadm/services/nvmeof.py | 4 ++++ src/pybind/mgr/cephadm/services/service_registry.py | 8 +++++++- src/pybind/mgr/cephadm/services/smb.py | 4 ++++ 7 files changed, 39 insertions(+), 1 deletion(-) diff --git a/src/pybind/mgr/cephadm/services/cephadmservice.py b/src/pybind/mgr/cephadm/services/cephadmservice.py index 9e618d42866d7..3dbb31eafc467 100644 --- a/src/pybind/mgr/cephadm/services/cephadmservice.py +++ b/src/pybind/mgr/cephadm/services/cephadmservice.py @@ -266,6 +266,10 @@ class CephadmService(metaclass=ABCMeta): Base class for service types. Often providing a create() and config() fn. """ + @property + def needs_monitoring(self) -> bool: + return False + @property @abstractmethod def TYPE(self) -> str: @@ -1419,6 +1423,10 @@ class CephExporterService(CephService): TYPE = 'ceph-exporter' DEFAULT_SERVICE_PORT = 9926 + @property + def needs_monitoring(self) -> bool: + return True + @classmethod def get_dependencies(cls, mgr: "CephadmOrchestrator", spec: Optional[ServiceSpec] = None, diff --git a/src/pybind/mgr/cephadm/services/ingress.py b/src/pybind/mgr/cephadm/services/ingress.py index 182f272203f80..7b436346986fc 100644 --- a/src/pybind/mgr/cephadm/services/ingress.py +++ b/src/pybind/mgr/cephadm/services/ingress.py @@ -22,6 +22,10 @@ class IngressService(CephService): TYPE = 'ingress' MAX_KEEPALIVED_PASS_LEN = 8 + @property + def needs_monitoring(self) -> bool: + return True + @classmethod def get_dependencies(cls, mgr: "CephadmOrchestrator", spec: Optional[ServiceSpec] = None, diff --git a/src/pybind/mgr/cephadm/services/monitoring.py b/src/pybind/mgr/cephadm/services/monitoring.py index f040218b305f3..b2fddd01da710 100644 --- a/src/pybind/mgr/cephadm/services/monitoring.py +++ b/src/pybind/mgr/cephadm/services/monitoring.py @@ -279,6 +279,10 @@ class AlertmanagerService(CephadmService): USER_CFG_KEY = 'alertmanager/web_user' PASS_CFG_KEY = 'alertmanager/web_password' + @property + def needs_monitoring(self) -> bool: + return True + def prepare_create(self, daemon_spec: CephadmDaemonDeploySpec) -> CephadmDaemonDeploySpec: assert self.TYPE == daemon_spec.daemon_type daemon_spec.final_config, daemon_spec.deps = self.generate_config(daemon_spec) @@ -800,6 +804,10 @@ class NodeExporterService(CephadmService): TYPE = 'node-exporter' DEFAULT_SERVICE_PORT = 9100 + @property + def needs_monitoring(self) -> bool: + return True + @classmethod def get_dependencies(cls, mgr: "CephadmOrchestrator", spec: Optional[ServiceSpec] = None, diff --git a/src/pybind/mgr/cephadm/services/nfs.py b/src/pybind/mgr/cephadm/services/nfs.py index 6b41651eb3bb6..65522089202a2 100644 --- a/src/pybind/mgr/cephadm/services/nfs.py +++ b/src/pybind/mgr/cephadm/services/nfs.py @@ -26,6 +26,10 @@ class NFSService(CephService): TYPE = 'nfs' DEFAULT_EXPORTER_PORT = 9587 + @property + def needs_monitoring(self) -> bool: + return True + def ranked(self, spec: ServiceSpec) -> bool: return True diff --git a/src/pybind/mgr/cephadm/services/nvmeof.py b/src/pybind/mgr/cephadm/services/nvmeof.py index f34f107adf372..f08ba9462a070 100644 --- a/src/pybind/mgr/cephadm/services/nvmeof.py +++ b/src/pybind/mgr/cephadm/services/nvmeof.py @@ -25,6 +25,10 @@ class NvmeofService(CephService): TYPE = 'nvmeof' PROMETHEUS_PORT = 10008 + @property + def needs_monitoring(self) -> bool: + return True + def config(self, spec: NvmeofServiceSpec) -> None: # type: ignore assert self.TYPE == spec.service_type # Looking at src/pybind/mgr/cephadm/services/iscsi.py diff --git a/src/pybind/mgr/cephadm/services/service_registry.py b/src/pybind/mgr/cephadm/services/service_registry.py index 1efb5e49b3d7d..10fb893a3e2b5 100644 --- a/src/pybind/mgr/cephadm/services/service_registry.py +++ b/src/pybind/mgr/cephadm/services/service_registry.py @@ -22,7 +22,7 @@ Usage: import os import logging -from typing import Type, Dict, TYPE_CHECKING +from typing import Type, Dict, List, TYPE_CHECKING import importlib import pkgutil @@ -66,6 +66,12 @@ class CephadmServiceRegistry: """Retrieves an initialized service instance by type.""" return self._services[service_type] + def get_services_requiring_monitoring(self) -> List[str]: + """Return a list with service types that requiere monitoring.""" + services_to_monitor = [svc for svc in self._services if self._services[svc].needs_monitoring] + services_to_monitor.append('ceph') # this is needed for mgr-prometheus targets + return sorted(services_to_monitor) + def register_cephadm_service(cls: Type["CephadmService"]) -> Type["CephadmService"]: """ diff --git a/src/pybind/mgr/cephadm/services/smb.py b/src/pybind/mgr/cephadm/services/smb.py index e8d0388b10a38..616a0cfbfeee4 100644 --- a/src/pybind/mgr/cephadm/services/smb.py +++ b/src/pybind/mgr/cephadm/services/smb.py @@ -25,6 +25,10 @@ class SMBService(CephService): TYPE = 'smb' smb_pool = '.smb' # minor layering violation. try to clean up later. + @property + def needs_monitoring(self) -> bool: + return True + def config(self, spec: ServiceSpec) -> None: assert self.TYPE == spec.service_type smb_spec = cast(SMBSpec, spec) -- 2.39.5