diff --git a/cfg_checker/modules/ceph/info.py b/cfg_checker/modules/ceph/info.py
index f6d5758..2a23936 100644
--- a/cfg_checker/modules/ceph/info.py
+++ b/cfg_checker/modules/ceph/info.py
@@ -594,3 +594,63 @@
         )
 
         return
+
+    def gather_osd_configs(self):
+        _total_osd = len(self.ceph_info["ceph_osd_df"]["data"]["nodes"])
+        logger_cli.info(
+            "-> Gathering OSD configuration ({})".format(_total_osd)
+        )
+        # Shortcuts
+        # _c = self._safe_tools_cmd
+        _cj = self._safe_get_cmd_output_as_json
+        _progress = Progress(_total_osd)
+        _idx = 1
+        _cfgs = {}
+        for _osd in self.ceph_info["ceph_osd_df"]["data"]["nodes"]:
+            _progress.write_progress(_idx, note=_osd["name"])
+            _cfgs[_osd["name"]] = _cj(
+                "ceph config show-with-defaults -f json {}".format(
+                    _osd["name"]
+                )
+            )
+            _idx += 1
+        _progress.end()
+
+        # Process configs
+        _base = {}
+        _uniq = {}
+        logger_cli.info("-> Filtering config values")
+        _progress = Progress(_total_osd)
+        _idx = 1
+        for _osd, _data in _cfgs.items():
+            _progress.write_progress(_idx, note=_osd)
+            for _o in _data:
+                _name = _o.pop("name")
+                if not _o["value"]:
+                    _o["value"] = "-"
+                if _name not in _base:
+                    _base[_name] = _o
+                elif _base[_name]["value"] != _o["value"]:
+                    _progress.clearline()
+                    logger_cli.info(
+                        "...specific value for {} (src: '{}'): {}={}".format(
+                            _osd,
+                            _o["source"],
+                            _name,
+                            _o["value"]
+                        )
+                    )
+                    _uniq[_osd] = {
+                        _name: _o
+                    }
+            _idx += 1
+        _progress.end()
+        self._add_ceph_info_item(
+            "osd_config_data",
+            "OSD Configuration values",
+            {
+                "common": _base,
+                "uniq": _uniq
+            }
+        )
+        return
