From c7593731aadb7bdca0be6cd76d72496cd8c3b082 Mon Sep 17 00:00:00 2001 From: Boris Ranto Date: Tue, 1 May 2018 01:12:02 +0200 Subject: [PATCH] prometheus: Handle the TIME perf counter type metrics This patch correctly sets the PERFCOUNTER_MASK to 3 so that the PERFCOUNTER_TIME metrics are not ignored by the mgr_module code. It also converts the TIME metrics from nanoseconds to seconds just like the ceph perf dump does and exposes the metrics via prometheus module. Signed-off-by: Boris Ranto (cherry picked from commit 056bc08d51306f4e4d031d1e3ff68ad7312c55d8) Conflicts: src/pybind/mgr/mgr_module.py: trivial resolution --- src/pybind/mgr/mgr_module.py | 11 +++++++++-- src/pybind/mgr/prometheus/module.py | 3 ++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/pybind/mgr/mgr_module.py b/src/pybind/mgr/mgr_module.py index 38283d2446d3..933858151ff4 100644 --- a/src/pybind/mgr/mgr_module.py +++ b/src/pybind/mgr/mgr_module.py @@ -221,7 +221,7 @@ class MgrModule(ceph_module.BaseMgrModule): PERFCOUNTER_LONGRUNAVG = 4 PERFCOUNTER_COUNTER = 8 PERFCOUNTER_HISTOGRAM = 0x10 - PERFCOUNTER_TYPE_MASK = ~2 + PERFCOUNTER_TYPE_MASK = ~3 def __init__(self, module_name, py_modules_ptr, this_ptr): self.module_name = module_name @@ -313,6 +313,13 @@ class MgrModule(ceph_module.BaseMgrModule): return '' + def _perfvalue_to_value(self, stattype, value): + if stattype & self.PERFCOUNTER_TIME: + # Convert from ns to seconds + return value / 1000000000.0 + else: + return value + def get_server(self, hostname): """ Called by the plugin to load information about a particular @@ -597,4 +604,4 @@ class MgrModule(ceph_module.BaseMgrModule): and/or the monitor cluster is down. """ - return self._ceph_have_mon_connection() \ No newline at end of file + return self._ceph_have_mon_connection() diff --git a/src/pybind/mgr/prometheus/module.py b/src/pybind/mgr/prometheus/module.py index c7daa128dd8a..dea9b5971788 100644 --- a/src/pybind/mgr/prometheus/module.py +++ b/src/pybind/mgr/prometheus/module.py @@ -554,7 +554,8 @@ class Module(MgrModule): ("ceph_daemon",), )) - self.metrics.append(path, counter_info['value'], (daemon,)) + value = self._perfvalue_to_value(counter_info['type'], counter_info['value']) + self.metrics.append(path, value, (daemon,)) # It is sufficient to reset the pending metrics once per scrape self.metrics.reset() -- 2.47.3