Skip to content

Commit a5c5757

Browse files
authored
Merge pull request ceph#61770 from rkachach/fix_issue_69484
Prometheus configuration generation improvements Reviewed-by: nizamial09 <[email protected]>
2 parents d16a12b + 4ffc0de commit a5c5757

File tree

13 files changed

+261
-395
lines changed

13 files changed

+261
-395
lines changed

src/pybind/mgr/cephadm/http_server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from typing import TYPE_CHECKING
55

66
from cephadm.agent import AgentEndpoint
7-
from cephadm.service_discovery import ServiceDiscovery
7+
from cephadm.services.service_discovery import ServiceDiscovery
88
from mgr_util import test_port_allocation, PortAlreadyInUse
99
from orchestrator import OrchestratorError
1010

src/pybind/mgr/cephadm/module.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -743,6 +743,11 @@ def _init_cert_mgr(self) -> None:
743743

744744
self.cert_mgr.init_tlsobject_store()
745745

746+
def _get_mgr_ips(self) -> List[str]:
747+
return [self.inventory.get_addr(d.hostname)
748+
for d in self.cache.get_daemons_by_service('mgr')
749+
if d.hostname is not None]
750+
746751
def _get_security_config(self) -> Tuple[bool, bool, bool]:
747752
oauth2_proxy_enabled = len(self.cache.get_daemons_by_service('oauth2-proxy')) > 0
748753
mgmt_gw_enabled = len(self.cache.get_daemons_by_service('mgmt-gateway')) > 0

src/pybind/mgr/cephadm/services/cephadmservice.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,10 @@ class CephadmService(metaclass=ABCMeta):
266266
Base class for service types. Often providing a create() and config() fn.
267267
"""
268268

269+
@property
270+
def needs_monitoring(self) -> bool:
271+
return False
272+
269273
@property
270274
@abstractmethod
271275
def TYPE(self) -> str:
@@ -1419,6 +1423,10 @@ class CephExporterService(CephService):
14191423
TYPE = 'ceph-exporter'
14201424
DEFAULT_SERVICE_PORT = 9926
14211425

1426+
@property
1427+
def needs_monitoring(self) -> bool:
1428+
return True
1429+
14221430
@classmethod
14231431
def get_dependencies(cls, mgr: "CephadmOrchestrator",
14241432
spec: Optional[ServiceSpec] = None,

src/pybind/mgr/cephadm/services/ingress.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ class IngressService(CephService):
2222
TYPE = 'ingress'
2323
MAX_KEEPALIVED_PASS_LEN = 8
2424

25+
@property
26+
def needs_monitoring(self) -> bool:
27+
return True
28+
2529
@classmethod
2630
def get_dependencies(cls, mgr: "CephadmOrchestrator",
2731
spec: Optional[ServiceSpec] = None,

src/pybind/mgr/cephadm/services/monitoring.py

Lines changed: 123 additions & 139 deletions
Large diffs are not rendered by default.

src/pybind/mgr/cephadm/services/nfs.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ class NFSService(CephService):
2626
TYPE = 'nfs'
2727
DEFAULT_EXPORTER_PORT = 9587
2828

29+
@property
30+
def needs_monitoring(self) -> bool:
31+
return True
32+
2933
def ranked(self, spec: ServiceSpec) -> bool:
3034
return True
3135

src/pybind/mgr/cephadm/services/nvmeof.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ class NvmeofService(CephService):
2525
TYPE = 'nvmeof'
2626
PROMETHEUS_PORT = 10008
2727

28+
@property
29+
def needs_monitoring(self) -> bool:
30+
return True
31+
2832
def config(self, spec: NvmeofServiceSpec) -> None: # type: ignore
2933
assert self.TYPE == spec.service_type
3034
# Looking at src/pybind/mgr/cephadm/services/iscsi.py

src/pybind/mgr/cephadm/service_discovery.py renamed to src/pybind/mgr/cephadm/services/service_discovery.py

Lines changed: 17 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ def index(self) -> str:
145145
<head><title>Cephadm HTTP Endpoint</title></head>
146146
<body>
147147
<h2>Cephadm Service Discovery Endpoints</h2>
148-
<p><a href='prometheus/sd-config?service=mgr-prometheus'>mgr/Prometheus http sd-config</a></p>
148+
<p><a href='prometheus/sd-config?service=ceph'>mgr/Prometheus http sd-config</a></p>
149149
<p><a href='prometheus/sd-config?service=alertmanager'>Alertmanager http sd-config</a></p>
150150
<p><a href='prometheus/sd-config?service=node-exporter'>Node exporter http sd-config</a></p>
151151
<p><a href='prometheus/sd-config?service=haproxy'>HAProxy http sd-config</a></p>
@@ -161,26 +161,23 @@ def index(self) -> str:
161161
@cherrypy.tools.json_out()
162162
def get_sd_config(self, service: str) -> List[Dict[str, Collection[str]]]:
163163
"""Return <http_sd_config> compatible prometheus config for the specified service."""
164-
if service == 'mgr-prometheus':
165-
return self.prometheus_sd_config()
166-
elif service == 'alertmanager':
167-
return self.alertmgr_sd_config()
168-
elif service == 'node-exporter':
169-
return self.node_exporter_sd_config()
170-
elif service == 'haproxy':
171-
return self.haproxy_sd_config()
172-
elif service == 'ceph-exporter':
173-
return self.ceph_exporter_sd_config()
174-
elif service == 'nvmeof':
175-
return self.nvmeof_sd_config()
176-
elif service == 'nfs':
177-
return self.nfs_sd_config()
178-
elif service == 'smb':
179-
return self.smb_sd_config()
180-
elif service.startswith("container"):
164+
165+
if service.startswith("container"):
181166
return self.container_sd_config(service)
182-
else:
183-
return []
167+
168+
service_to_config = {
169+
'mgr-prometheus': self.prometheus_sd_config,
170+
'ceph': self.prometheus_sd_config,
171+
'alertmanager': self.alertmgr_sd_config,
172+
'node-exporter': self.node_exporter_sd_config,
173+
'haproxy': self.haproxy_sd_config,
174+
'ingress': self.haproxy_sd_config,
175+
'ceph-exporter': self.ceph_exporter_sd_config,
176+
'nvmeof': self.nvmeof_sd_config,
177+
'nfs': self.nfs_sd_config,
178+
'smb': self.smb_sd_config,
179+
}
180+
return service_to_config.get(service, lambda: [])()
184181

185182
def prometheus_sd_config(self) -> List[Dict[str, Collection[str]]]:
186183
"""Return <http_sd_config> compatible prometheus config for prometheus service.

src/pybind/mgr/cephadm/services/service_registry.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
import os
2424
import logging
25-
from typing import Type, Dict, TYPE_CHECKING
25+
from typing import Type, Dict, List, TYPE_CHECKING
2626
import importlib
2727
import pkgutil
2828

@@ -66,6 +66,12 @@ def get_service(self, service_type: str) -> "CephadmService":
6666
"""Retrieves an initialized service instance by type."""
6767
return self._services[service_type]
6868

69+
def get_services_requiring_monitoring(self) -> List[str]:
70+
"""Return a list with service types that requiere monitoring."""
71+
services_to_monitor = [svc for svc in self._services if self._services[svc].needs_monitoring]
72+
services_to_monitor.append('ceph') # this is needed for mgr-prometheus targets
73+
return sorted(services_to_monitor)
74+
6975

7076
def register_cephadm_service(cls: Type["CephadmService"]) -> Type["CephadmService"]:
7177
"""

src/pybind/mgr/cephadm/services/smb.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ class SMBService(CephService):
2525
TYPE = 'smb'
2626
smb_pool = '.smb' # minor layering violation. try to clean up later.
2727

28+
@property
29+
def needs_monitoring(self) -> bool:
30+
return True
31+
2832
def config(self, spec: ServiceSpec) -> None:
2933
assert self.TYPE == spec.service_type
3034
smb_spec = cast(SMBSpec, spec)

0 commit comments

Comments
 (0)