]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
prometheus: Add OSD full and nearfull ratio to prometheus
authorAnkush Behl <cloudbehl@gmail.com>
Thu, 7 Aug 2025 11:43:19 +0000 (17:13 +0530)
committerAnkush Behl <cloudbehl@gmail.com>
Fri, 8 Aug 2025 13:15:21 +0000 (18:45 +0530)
Fixes: https://tracker.ceph.com/issues/72495
Signed-off-by: Ankush Behl <cloudbehl@gmail.com>
src/pybind/mgr/prometheus/module.py

index 3c204d7c59983c06ea0424145680c18646de9fac..80c3cada54ede87e7daba50e89eaa6f4b50b8b38 100644 (file)
@@ -89,6 +89,11 @@ OSD_METADATA = ('back_iface', 'ceph_daemon', 'cluster_addr', 'device_class',
                 'front_iface', 'hostname', 'objectstore', 'public_addr',
                 'ceph_version')
 
+
+OSD_NEARFULL_RATIO = ()
+
+OSD_FULL_RATIO = ()
+
 OSD_STATUS = ['weight', 'up', 'in']
 
 OSD_STATS = ['apply_latency_ms', 'commit_latency_ms']
@@ -703,6 +708,18 @@ class Module(MgrModule, OrchestratorClientMixin):
             'OSD Metadata',
             OSD_METADATA
         )
+        metrics['osd_nearfull_ratio'] = Metric(
+            'gauge',
+            'osd_nearfull_ratio',
+            'OSD cluster-wide nearfull ratio',
+            ()
+        )
+        metrics['osd_full_ratio'] = Metric(  # <-- Add this block
+            'gauge',
+            'osd_full_ratio',
+            'OSD cluster-wide full ratio',
+            ()
+        )
 
         # The reason for having this separate to OSD_METADATA is
         # so that we can stably use the same tag names that
@@ -1138,6 +1155,14 @@ class Module(MgrModule, OrchestratorClientMixin):
     @profile_method()
     def get_metadata_and_osd_status(self) -> None:
         osd_map = self.get('osd_map')
+
+        cluster_nearfull_ratio = osd_map.get('nearfull_ratio', None)
+        cluster_full_ratio = osd_map.get('full_ratio', None)
+        if cluster_nearfull_ratio is not None:
+            self.metrics['osd_nearfull_ratio'].set(cluster_nearfull_ratio, ('cluster',))
+        if cluster_full_ratio is not None:
+            self.metrics['osd_full_ratio'].set(cluster_full_ratio, ('cluster',))
+
         osd_flags = osd_map['flags'].split(',')
         for flag in OSD_FLAGS:
             self.metrics['osd_flag_{}'.format(flag)].set(