@cryptotaxi247 / netdata-1 / commits / 390e7025c

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