Add Apply/Commit latency chart
lets00 committed
Jan 12, 2018 at 17:10 UTC
390e7025cf2d62727b7bc9598b75e2f07d533433
2 files changed
+48
-1
python.d/ceph.chart.py
+39
-1
@@ -16,7 +16,8 @@ update_every = 10
16
priority = 60000
17
retries = 60
18
19
-ORDER = ['general', 'pool_usage', 'pool_objects', 'pool_write_iops', 'pool_read_iops', 'osd_usage']
19
+ORDER = ['general', 'pool_usage', 'pool_objects', 'pool_write_iops',
20
+ 'pool_read_iops', 'osd_usage', 'osd_apply_latency','osd_commit_latency']
21
22
CHARTS = {
23
'general': {
@@ -45,7 +46,16 @@ CHARTS = {
46
'osd_usage': {
47
'options': [None, 'Ceph OSDs', 'KB', 'osd', 'ceph.osd_usage', 'line'],
48
'lines': []
49
+ },
50
+ 'osd_apply_latency': {
51
+ 'options': [None, 'Ceph OSDs apply latency', 'milliseconds', 'pool', 'ceph.apply_latency', 'line'],
52
+ 'lines': []
53
+ },
54
+ 'osd_commit_latency': {
55
+ 'options': [None, 'Ceph OSDs commit latency', 'milliseconds', 'pool', 'ceph.commit_latency', 'line'],
56
+ 'lines': []
57
}
58
+
59
}
60
61
@@ -102,6 +112,12 @@ class Service(SimpleService):
112
self.definitions['osd_usage']['lines'].append([osd['name'],
113
osd['name'],
114
'absolute'])
115
+ self.definitions['osd_apply_latency']['lines'].append(['apply_latency_{0}'.format(osd['name']),
116
+ osd['name'],
117
+ 'absolute'])
118
+ self.definitions['osd_commit_latency']['lines'].append(['commit_latency_{0}'.format(osd['name']),
119
+ osd['name'],
120
+ 'absolute'])
121
122
def get_data(self):
123
"""
@@ -117,6 +133,7 @@ class Service(SimpleService):
133
data.update(self._get_pool_rw_io(pool))
134
for osd in self._get_osd_df()['nodes']:
135
data.update(self._get_osd_usage(osd))
136
+ data.update(self._get_osd_latency())
137
return data
138
except (ValueError, AttributeError) as error:
139
self.error(error)
@@ -164,6 +181,17 @@ class Service(SimpleService):
181
"""
182
return {osd['name']: float(osd['kb_used'])}
183
184
+ def _get_osd_latency(self):
185
+ """
186
+ Get ceph osd apply and commit latency
187
+ :return: A osd dict with osd name's key with both apply and commit latency values
188
+ """
189
+ osd_latency = {}
190
+ for osd in self._get_osd_perf()['osd_perf_infos']:
191
+ osd_latency.update({'apply_latency_osd.{0}'.format(osd['id']): osd['perf_stats']['apply_latency_ms'],
192
+ 'commit_latency_osd.{0}'.format(osd['id']): osd['perf_stats']['commit_latency_ms']})
193
+ return osd_latency
194
+
195
def _get_df(self):
196
"""
197
Get ceph df output
@@ -184,3 +212,13 @@ class Service(SimpleService):
212
'format': 'json'
213
}), '')[1])
214
215
+ def _get_osd_perf(self):
216
+ """
217
+ Get ceph osd performance
218
+ :return: ceph osd perf --format json
219
+ """
220
+ return json.loads(self.cluster.mon_command(json.dumps({
221
+ 'prefix': 'osd perf',
222
+ 'format': 'json'
223
+ }), '')[1])
224
+
web/dashboard_info.js
+9
@@ -1337,10 +1337,19 @@ netdataDashboard.context = {
1337
'ceph.pool_rio': {
1338
info: 'Shows info about read operations on a pool.'
1339
},
1340
+
1341
'ceph.osd_usage': {
1342
info: 'Shows info about osd usage.'
1343
},
1344
1345
+ 'ceph.apply_latency': {
1346
+ info: 'Shows time for an operation to get applied to the backing filesystem.'
1347
+ },
1348
+
1349
+ 'ceph.commit_latency': {
1350
+ info: 'Shows time for an operation to be applied on a OSD.'
1351
+ },
1352
+
1353
// ------------------------------------------------------------------------
1354
// web_log
1355