]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/cephadm: adding needs_monitoring flag
authorRedouane Kachach <rkachach@ibm.com>
Thu, 19 Jun 2025 07:46:22 +0000 (09:46 +0200)
committerRedouane Kachach <rkachach@ibm.com>
Thu, 7 Aug 2025 14:39:47 +0000 (16:39 +0200)
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 <rkachach@ibm.com>
src/pybind/mgr/cephadm/services/cephadmservice.py
src/pybind/mgr/cephadm/services/ingress.py
src/pybind/mgr/cephadm/services/monitoring.py
src/pybind/mgr/cephadm/services/nfs.py
src/pybind/mgr/cephadm/services/nvmeof.py
src/pybind/mgr/cephadm/services/service_registry.py
src/pybind/mgr/cephadm/services/smb.py

index 9e618d42866d73a520d486b098f85a7d3ba819ca..3dbb31eafc467663be0f0f4ab40228e984d1b448 100644 (file)
@@ -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,
index 182f272203f800fa34b57e2092b4f812de717bf5..7b436346986fcb9c094a20278f9ef753aa50178e 100644 (file)
@@ -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,
index f040218b305f3206a2b447b69ba67a1a7f28b950..b2fddd01da7103e4781c4757a95c2e13c206bba0 100644 (file)
@@ -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,
index 6b41651eb3bb6567cf07c0027b9c6a02add20759..65522089202a20af4dbc7756bbc5d81e1c66c463 100644 (file)
@@ -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
 
index f34f107adf37255f1adf86e84662655e0d386956..f08ba9462a0704650e06c25c4fa68b49f53f69bd 100644 (file)
@@ -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
index 1efb5e49b3d7d557990f992645938ea8889a1955..10fb893a3e2b549aab6e1b1f733223037be75bfc 100644 (file)
@@ -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"]:
     """
index e8d0388b10a38a6d7e8e7b35a9a659a8dfb34126..616a0cfbfeee4c4638294c20cea9f7521a6dd73a 100644 (file)
@@ -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)