From 8f3971db61019ce7a5bb30426b60648c26150478 Mon Sep 17 00:00:00 2001 From: Jan Fajerski Date: Tue, 27 Feb 2018 10:19:39 +0100 Subject: [PATCH] pybind/mgr/prometheus: extend daemon metadata with hostname and ceph version Signed-off-by: Jan Fajerski (cherry picked from commit d03c79676b1761b016ceaed82f7e3f03f99cda73) --- src/pybind/mgr/prometheus/module.py | 43 +++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/src/pybind/mgr/prometheus/module.py b/src/pybind/mgr/prometheus/module.py index 4ca0ad0d1efb9..421ca1e7309a4 100644 --- a/src/pybind/mgr/prometheus/module.py +++ b/src/pybind/mgr/prometheus/module.py @@ -58,11 +58,12 @@ OSD_FLAGS = ('noup', 'nodown', 'noout', 'noin', 'nobackfill', 'norebalance', FS_METADATA = ('data_pools', 'id', 'metadata_pool', 'name') -MDS_METADATA = ('id', 'fs', 'public_addr', 'rank') +MDS_METADATA = ('id', 'fs', 'hostname', 'public_addr', 'rank', 'ceph_version') -MON_METADATA = ('id', 'public_addr', 'rank') +MON_METADATA = ('id', 'hostname', 'public_addr', 'rank', 'ceph_version') -OSD_METADATA = ('cluster_addr', 'device_class', 'id', 'public_addr') +OSD_METADATA = ('cluster_addr', 'device_class', 'id', 'hostname', 'public_addr', + 'ceph_version') OSD_STATUS = ['weight', 'up', 'in'] @@ -341,6 +342,7 @@ class Module(MgrModule): def get_fs(self): fs_map = self.get('fs_map') + servers = self.get_service_list() active_daemons = [] for fs in fs_map['filesystems']: # collect fs metadata @@ -351,16 +353,24 @@ class Module(MgrModule): fs['mdsmap']['metadata_pool'], fs['mdsmap']['fs_name'])) for gid, daemon in fs['mdsmap']['info'].items(): + id_ = daemon['name'] + host_version = servers.get((id_, 'mds'), ('','')) self.metrics.append('mds_metadata', 1, - (daemon['name'], fs['id'], daemon['addr'], daemon['rank'])) + (id_, fs['id'], host_version[0], + daemon['addr'], daemon['rank'], + host_version[1])) def get_quorum_status(self): mon_status = json.loads(self.get('mon_status')['json']) + servers = self.get_service_list() for mon in mon_status['monmap']['mons']: rank = mon['rank'] id_ = mon['name'] + host_version = servers.get((id_, 'mon'), ('','')) self.metrics.append('mon_metadata', 1, - (id_, mon['public_addr'].split(':')[0], rank)) + (id_, host_version[0], + mon['public_addr'].split(':')[0], rank, + host_version[1])) in_quorum = int(rank in mon_status['quorum']) self.metrics.append('mon_quorum_status', in_quorum, ('mon_{}'.format(id_),)) @@ -400,16 +410,27 @@ class Module(MgrModule): self.metrics.append('osd_{}'.format(stat), val, ('osd.{}'.format(id_),)) + def get_service_list(self): + ret = {} + for server in self.list_servers(): + version = server.get('ceph_version', '') + host = server.get('hostname', '') + for service in server.get('services', []): + ret.update({(service['id'], service['type']): (host, version)}) + return ret + def get_metadata_and_osd_status(self): osd_map = self.get('osd_map') osd_flags = osd_map['flags'].split(',') for flag in OSD_FLAGS: self.metrics.set('osd_flag_{}'.format(flag), int(flag in osd_flags)) + osd_devices = self.get('osd_map_crush')['devices'] + servers = self.get_service_list() for osd in osd_map['osds']: # id can be used to link osd metrics and metadata - id_ = osd['osd'] + id_ = str(osd['osd']) # collect osd metadata p_addr = osd['public_addr'].split(':')[0] c_addr = osd['cluster_addr'].split(':')[0] @@ -419,8 +440,12 @@ class Module(MgrModule): " and metadata records for this osd".format(id_) ) continue - dev_class = next((osd for osd in osd_devices if osd['id'] == id_)) - self.metrics.append('osd_metadata', 1, (c_addr, dev_class.get('class',''), id_, p_addr)) + dev_class = next((osd for osd in osd_devices if str(osd['id']) == id_)) + host_version = servers.get((id_, 'osd'), ('','')) + self.metrics.append('osd_metadata', 1, (c_addr, + dev_class.get('class',''), + id_, host_version[0], + p_addr, host_version[1])) # collect osd status for state in OSD_STATUS: @@ -429,7 +454,7 @@ class Module(MgrModule): ('osd.{}'.format(id_),)) # collect disk occupation metadata - osd_metadata = self.get_metadata("osd", str(id_)) + osd_metadata = self.get_metadata("osd", id_) if osd_metadata is None: continue dev_keys = ("backend_filestore_dev_node", "bluestore_bdev_dev_node") -- 2.39.5