Add read/write pool IO operations chart
lets00 committed
Jan 12, 2018 at 16:15 UTC
385648109983e5e818e32a0f5b7e1e6be56e20b6
2 files changed
+37
-3
python.d/ceph.chart.py
+28
-1
@@ -16,7 +16,7 @@ update_every = 10
16
priority = 60000
17
retries = 60
18
19
-ORDER = ['general', 'pool_usage', 'pool_objects', 'osd_usage']
19
+ORDER = ['general', 'pool_usage', 'pool_objects', 'pool_write_iops', 'pool_read_iops', 'osd_usage']
20
21
CHARTS = {
22
'general': {
@@ -34,6 +34,14 @@ CHARTS = {
34
'options': [None, 'Ceph Pools', 'objects', 'pool', 'ceph.pool_objects', 'line'],
35
'lines': []
36
},
37
+ 'pool_write_iops': {
38
+ 'options': [None, 'Ceph Write Pool IOPS', 'KB', 'pool', 'ceph.pool_wio', 'line'],
39
+ 'lines': []
40
+ },
41
+ 'pool_read_iops': {
42
+ 'options': [None, 'Ceph Read Pool IOPS', 'KB', 'pool', 'ceph.pool_rio', 'line'],
43
+ 'lines': []
44
+ },
45
'osd_usage': {
46
'options': [None, 'Ceph OSDs', 'KB', 'osd', 'ceph.osd_usage', 'line'],
47
'lines': []
@@ -83,6 +91,13 @@ class Service(SimpleService):
91
self.definitions['pool_objects']['lines'].append(["obj_{0}".format(pool['name']),
92
pool['name'],
93
'absolute'])
94
+ self.definitions['pool_write_iops']['lines'].append(['write_{0}'.format(pool['name']),
95
+ pool['name'],
96
+ 'incremental'])
97
+ self.definitions['pool_read_iops']['lines'].append(['read_{0}'.format(pool['name']),
98
+ pool['name'],
99
+ 'incremental'])
100
+
101
for osd in sorted(self._get_osd_df()['nodes']):
102
self.definitions['osd_usage']['lines'].append([osd['name'],
103
osd['name'],
@@ -99,6 +114,7 @@ class Service(SimpleService):
114
for pool in self._get_df()['pools']:
115
data.update(self._get_pool_usage(pool))
116
data.update(self._get_pool_objects(pool))
117
+ data.update(self._get_pool_rw_io(pool))
118
for osd in self._get_osd_df()['nodes']:
119
data.update(self._get_osd_usage(osd))
120
return data
@@ -130,6 +146,17 @@ class Service(SimpleService):
146
"""
147
return {'obj_{0}'.format(pool['name']): pool['stats']['objects']}
148
149
+ def _get_pool_rw_io(self, pool):
150
+ """
151
+ Get read/write kb operations in a pool
152
+ :return: dict
153
+ """
154
+ ioctx = self.cluster.open_ioctx(pool['name'])
155
+ pool_status = ioctx.get_stats()
156
+ ioctx.close()
157
+ return {'read_{0}'.format(pool['name']): pool_status['num_rd_kb'],
158
+ 'write_{0}'.format(pool['name']): pool_status['num_wr_kb']}
159
+
160
def _get_osd_usage(self, osd):
161
"""
162
Process raw data into osd dict information to get osd usage
web/dashboard_info.js
+9
-2
@@ -1330,9 +1330,16 @@ netdataDashboard.context = {
1330
info: 'Shows info about number of objects presents on a pool.'
1331
},
1332
1333
+ 'ceph.pool_wio': {
1334
+ info: 'Shows info about write operations on a pool.'
1335
+ },
1336
+
1337
+ 'ceph.pool_rio': {
1338
+ info: 'Shows info about read operations on a pool.'
1339
+ },
1340
'ceph.osd_usage': {
1334
- info: 'Shows info about osd usage'
1335
- },
1341
+ info: 'Shows info about osd usage.'
1342
+ },
1343
1344
// ------------------------------------------------------------------------
1345
// web_log