python.d/ceph: fix get_osd_perf() for 14.2+ (#8248)
* ceph:fix get_osd_perf() for 14.2+ * ceph: fix get_osd_perf() for 14.2+ v2
Austin S. Hemmelgarn committed
Mar 4, 2020 at 13:11 UTC
ebe6af9215e3f849139b1a439e0927f6a2824ba4
1 file changed
+14
-4
collectors/python.d.plugin/ceph/ceph.chart.py
+14
-4
@@ -206,8 +206,10 @@ class Service(SimpleService):
206
df = self._get_df()
207
osd_df = self._get_osd_df()
208
osd_perf = self._get_osd_perf()
209
+ osd_perf_infos = get_osd_perf_infos(osd_perf)
210
pool_stats = self._get_osd_pool_stats()
210
- data.update(self._get_general(osd_perf, pool_stats))
211
+
212
+ data.update(self._get_general(osd_perf_infos, pool_stats))
213
for pool in df['pools']:
214
data.update(self._get_pool_usage(pool))
215
data.update(self._get_pool_objects(pool))
@@ -215,14 +217,14 @@ class Service(SimpleService):
217
data.update(self._get_pool_rw(pool_io))
218
for osd in osd_df['nodes']:
219
data.update(self._get_osd_usage(osd))
218
- for osd_apply_commit in osd_perf['osd_perf_infos']:
220
+ for osd_apply_commit in osd_perf_infos:
221
data.update(self._get_osd_latency(osd_apply_commit))
222
return data
223
except (ValueError, AttributeError) as error:
224
self.error(error)
225
return None
226
225
- def _get_general(self, osd_perf, pool_stats):
227
+ def _get_general(self, osd_perf_infos, pool_stats):
228
"""
229
Get ceph's general usage
230
:return: dict
@@ -240,7 +242,7 @@ class Service(SimpleService):
242
write_bytes_sec += pool_rw_io_b['client_io_rate'].get('write_bytes_sec', 0)
243
read_op_per_sec += pool_rw_io_b['client_io_rate'].get('read_op_per_sec', 0)
244
write_op_per_sec += pool_rw_io_b['client_io_rate'].get('write_op_per_sec', 0)
243
- for perf in osd_perf['osd_perf_infos']:
245
+ for perf in osd_perf_infos:
246
apply_latency += perf['perf_stats']['apply_latency_ms']
247
commit_latency += perf['perf_stats']['commit_latency_ms']
248
@@ -345,3 +347,11 @@ class Service(SimpleService):
347
'prefix': 'osd pool stats',
348
'format': 'json'
349
}), '')[1].decode('utf-8'))
350
+
351
+
352
+def get_osd_perf_infos(osd_perf):
353
+ # https://github.com/netdata/netdata/issues/8247
354
+ # module uses 'osd_perf_infos' data, its been moved under 'osdstats` since Ceph v14.2
355
+ if 'osd_perf_infos' in osd_perf:
356
+ return osd_perf['osd_perf_infos']
357
+ return osd_perf['osdstats']['osd_perf_infos']