clusters.
* The telemetry module now has a 'device' channel, enabled by default, that
- will report anonymized hard disk and SSD health metrics to telemetry.ceph.com
+ will report anonymized hard disk and SSD hea lth metrics to telemetry.ceph.com
in order to build and improve device failure prediction algorithms. Because
the content of telemetry reports has changed, you will need to either re-opt-in
with::
- how many hosts are in the cluster, and how many hosts have each type of daemon
- whether a separate OSD cluster network is being used
- how many RBD pools and images are in the cluster, and how many pools have RBD mirroring enabled
+ - how many RGW daemons, zones, and zonegroups are present; which RGW frontends are in use
If you had telemetry enabled, you will need to re-opt-in with::
# - added host count, and counts for hosts with each of (mon, osd, mds, mgr)
# - whether an OSD cluster network is in use
# - rbd pool and image count, and rbd mirror mode (pool-level)
+# - rgw daemons, zones, zonegroups; which rgw frontends
class Module(MgrModule):
config = dict()
report['services'] = defaultdict(int)
for key, value in service_map['services'].items():
report['services'][key] += 1
+ if key == 'rgw':
+ report['rgw'] = {
+ 'count': 0,
+ }
+ zones = set()
+ realms = set()
+ zonegroups = set()
+ frontends = set()
+ d = value.get('daemons', dict())
+
+ for k,v in d.items():
+ if k == 'summary' and v:
+ report['rgw'][k] = v
+ elif isinstance(v, dict) and 'metadata' in v:
+ report['rgw']['count'] += 1
+ zones.add(v['metadata']['zone_id'])
+ zonegroups.add(v['metadata']['zonegroup_id'])
+ frontends.add(v['metadata']['frontend_type#0'])
+
+ # we could actually iterate over all the keys of
+ # the dict and check for how many frontends there
+ # are, but it is unlikely that one would be running
+ # more than 2 supported ones
+ f2 = v['metadata'].get('frontend_type#1', None)
+ if f2:
+ frontends.add(f2)
+
+ report['rgw']['zones'] = len(zones)
+ report['rgw']['zonegroups'] = len(zonegroups)
+ report['rgw']['frontends'] = list(frontends) # sets aren't json-serializable
try:
report['balancer'] = self.remote('balancer', 'gather_telemetry')