Merge ~aluria/charm-grafana/+git/grafana-charm:snap-support into ~prometheus-charmers/charm-grafana:master

Proposed by Alvaro Uria
Status: Merged
Merged at revision: d7d8337d46360dcd4591adf9f117f84eba6a808e
Proposed branch: ~aluria/charm-grafana/+git/grafana-charm:snap-support
Merge into: ~prometheus-charmers/charm-grafana:master
Diff against target: 12555 lines (+12290/-59)
11 files modified
config.yaml (+13/-0)
layer.yaml (+1/-1)
reactive/grafana.py (+200/-56)
templates/dashboards/prometheus/CephCluster.json.j2 (+2260/-0)
templates/dashboards/prometheus/CephOSD.json.j2 (+990/-0)
templates/dashboards/prometheus/CephPools.json.j2 (+702/-0)
templates/dashboards/prometheus/OpenStackCloud.json.j2 (+3819/-0)
templates/dashboards/prometheus/RabbitMQ.json.j2 (+927/-0)
templates/dashboards/prometheus/Swift.json.j2 (+976/-0)
templates/dashboards/prometheus/Telegraf.json.j2 (+2396/-0)
templates/grafana.ini.j2 (+6/-2)
Reviewer Review Type Date Requested Status
Prometheus Charmers Pending
Review via email: mp+337429@code.launchpad.net

Commit message

Add install_method support [apt,snap]

To post a comment you must log in.
Revision history for this message
Canonical IS Mergebot (canonical-is-mergebot) wrote :

This merge proposal is being monitored by mergebot. Change the status to Approved to merge.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/config.yaml b/config.yaml
2index 3e1313a..8a19f24 100644
3--- a/config.yaml
4+++ b/config.yaml
5@@ -201,3 +201,16 @@ options:
6 type: string
7 description: |
8 Google Universal Analytics ID per http://docs.grafana.org/installation/configuration/#google-analytics-ua-id
9+ install_method:
10+ default: "apt"
11+ type: string
12+ description: >
13+ How to install Grafana. If set to "apt", empty string or unset, the
14+ package will be installed using apt-get.
15+ If set to "snap", snap package will be installed
16+ snap_channel:
17+ default: "stable"
18+ type: string
19+ description: |
20+ If install_method is set to "snap" this option controlls channel name.
21+ Supported values are: "stable", "candidate", "beta" and "edge"
22diff --git a/layer.yaml b/layer.yaml
23index 8c2fb73..0eb7b9b 100644
24--- a/layer.yaml
25+++ b/layer.yaml
26@@ -1,3 +1,3 @@
27-includes: ['layer:basic', 'interface:nrpe-external-master', 'interface:grafana-source', 'interface:http']
28+includes: ['layer:basic', 'layer:snap', 'interface:nrpe-external-master', 'interface:grafana-source', 'interface:http']
29 ignore: ['.*.swp' ]
30 repo: https://git.launchpad.net/grafana-charm
31diff --git a/reactive/grafana.py b/reactive/grafana.py
32index 302beca..0850138 100644
33--- a/reactive/grafana.py
34+++ b/reactive/grafana.py
35@@ -29,6 +29,21 @@ from charms.reactive import (
36 when_not,
37 )
38
39+from charms.layer import snap
40+
41+SVCNAME = {'snap': 'snap.grafana.grafana',
42+ 'apt': 'grafana-server'}
43+SNAP_NAME = 'grafana'
44+SNAP_DATA = '/var/snap/{}/current'.format(SNAP_NAME)
45+SNAP_COMMON = '/var/snap/{}/common/data'.format(SNAP_NAME)
46+
47+GRAFANA_INI = {'snap': '{}/conf/grafana.ini'.format(SNAP_DATA),
48+ 'apt': '/etc/grafana/grafana.ini'}
49+GRAFANA_INI_TMPL = 'grafana.ini.j2'
50+GRAFANA_DEPS = ['libfontconfig1']
51+DASHBOARDS_BACKUP_CRON = '/etc/cron.d/juju-dashboards-backup'
52+DASHBOARDS_BACKUP_CRON_TMPL = 'juju-dashboards-backup.j2'
53+
54 import time
55
56 try:
57@@ -46,50 +61,82 @@ except ImportError:
58 fetch.apt_install(['python-pbkdf2'])
59 import pbkdf2
60
61-SVCNAME = 'grafana-server'
62-GRAFANA_INI = '/etc/grafana/grafana.ini'
63-GRAFANA_INI_TMPL = 'grafana.ini.j2'
64-GRAFANA_DEPS = ['libfontconfig1']
65-DASHBOARDS_BACKUP_CRON = '/etc/cron.d/juju-dashboards-backup'
66-DASHBOARDS_BACKUP_CRON_TMPL = 'juju-dashboards-backup.j2'
67
68
69 @when_not('grafana.installed')
70 def install_packages():
71 config = hookenv.config()
72- install_opts = ('install_sources', 'install_keys')
73- hookenv.status_set('maintenance', 'Installing grafana')
74+ source = config.get('install_method', 'apt')
75+ channel = config.get('snap_channel', 'stable')
76
77- if config.get('http_proxy'):
78- proxy = {"http": config.get('http_proxy'),
79- "https": config.get('http_proxy'),
80- }
81+ kv = unitdata.kv()
82+ if not kv.get('install_method', False):
83+ kv.set('install_method', source)
84+ elif kv.get('install_method') != source:
85+ hookenv.status_set('blocked',
86+ 'Install method changes are not supported, '
87+ 'revert install_method option to previous value')
88+ return
89+
90+ if source == 'apt':
91+ install_opts = ('install_sources', 'install_keys')
92+ hookenv.status_set('maintenance', 'Installing grafana')
93+
94+ if config.get('http_proxy'):
95+ proxy = {"http": config.get('http_proxy'),
96+ "https": config.get('http_proxy'),
97+ }
98+ else:
99+ proxy = {}
100+
101+ if config.changed('install_file') and config.get('install_file', False):
102+ hookenv.status_set('maintenance', 'Installing deb pkgs')
103+ fetch.apt_install(GRAFANA_DEPS)
104+ pkg_file = '/tmp/grafana.deb'
105+ with open(pkg_file, 'wb') as f:
106+ r = requests.get(config.get('install_file'), stream=True,
107+ proxies=proxy)
108+ for block in r.iter_content(1024):
109+ f.write(block)
110+ subprocess.check_call(['dpkg', '-i', pkg_file])
111+ elif any(config.changed(opt) for opt in install_opts):
112+ hookenv.status_set('maintenance', 'Installing deb pkgs')
113+ packages = ['grafana']
114+ fetch.configure_sources(update=True)
115+ fetch.apt_install(packages)
116+ set_state('grafana.installed')
117+ hookenv.status_set('active', 'Completed installing grafana')
118+ elif source == 'snap' and \
119+ (host.lsb_release()['DISTRIB_CODENAME'] >= 'xenial' or
120+ host.lsb_release()['DISTRIB_CODENAME'] < 'p'):
121+ # NOTE(aluria): precise is the last supported Ubuntu release, so
122+ # anything below 'p' is actually newer than xenial (systemd support)
123+ snap.install(SNAP_NAME, channel=channel, force_dangerous=False)
124+ set_state('grafana.installed')
125+ hookenv.status_set('blocked', 'Missing relations: grafana-source')
126+ else:
127+ hookenv.status_set('blocked', 'Unsupported install_method')
128+
129+
130+def data_path():
131+ data_dir = {'snap': SNAP_COMMON,
132+ 'apt': '/var/lib/grafana'}
133+ kv = unitdata.kv()
134+ source = kv.get('install_method')
135+ if source in ('snap', 'apt'):
136+ return data_dir[source]
137 else:
138- proxy = {}
139-
140- if config.changed('install_file') and config.get('install_file', False):
141- hookenv.status_set('maintenance', 'Installing deb pkgs')
142- fetch.apt_install(GRAFANA_DEPS)
143- pkg_file = '/tmp/grafana.deb'
144- with open(pkg_file, 'wb') as f:
145- r = requests.get(config.get('install_file'), stream=True,
146- proxies=proxy)
147- for block in r.iter_content(1024):
148- f.write(block)
149- subprocess.check_call(['dpkg', '-i', pkg_file])
150- elif any(config.changed(opt) for opt in install_opts):
151- hookenv.status_set('maintenance', 'Installing deb pkgs')
152- packages = ['grafana']
153- fetch.configure_sources(update=True)
154- fetch.apt_install(packages)
155- set_state('grafana.installed')
156- hookenv.status_set('active', 'Completed installing grafana')
157+ hookenv.status_set('blocked', 'Unsupported install_method')
158+ remove_state('grafana.installed')
159
160
161 @when('grafana.installed')
162 @when('config.changed.install_plugins')
163 def install_plugins():
164- plugins_dir = '/var/lib/grafana/plugins/'
165+ data_dir = data_path()
166+ if not data_dir:
167+ return
168+ plugins_dir = '{}/plugins/'.format(data_dir)
169
170 if os.path.exists(plugins_dir):
171 hookenv.log('Cleaning up currently installed plugins')
172@@ -148,7 +195,10 @@ def check_ports(new_port):
173
174
175 def select_query(query, params=None):
176- conn = sqlite3.connect('/var/lib/grafana/grafana.db', timeout=30)
177+ data_dir = data_path()
178+ if not data_dir:
179+ return
180+ conn = sqlite3.connect('{}/grafana.db'.format(data_dir), timeout=30)
181 cur = conn.cursor()
182 if params:
183 return cur.execute(query, params).fetchall()
184@@ -157,7 +207,10 @@ def select_query(query, params=None):
185
186
187 def insert_query(query, params=None):
188- conn = sqlite3.connect('/var/lib/grafana/grafana.db', timeout=30)
189+ data_dir = data_path()
190+ if not data_dir:
191+ return
192+ conn = sqlite3.connect('{}/grafana.db'.format(data_dir), timeout=30)
193 cur = conn.cursor()
194 if params:
195 cur.execute(query, params)
196@@ -201,6 +254,13 @@ def add_backup_api_keys():
197 @when('grafana.installed')
198 @when_not('grafana.configured')
199 def setup_grafana():
200+ kv = unitdata.kv()
201+ source = kv.get('install_method')
202+ if source in ('snap', 'apt'):
203+ grafana_ini = GRAFANA_INI[source]
204+ else:
205+ hookenv.status_set('blocked', 'Unsupported install_method')
206+ return
207 hookenv.status_set('maintenance', 'Configuring grafana')
208 config = hookenv.config()
209 settings = {'config': config}
210@@ -209,10 +269,10 @@ def setup_grafana():
211 settings['smtp_user'] = smtp_auth.split(':')[0]
212 settings['smtp_password'] = smtp_auth.split(':')[1]
213 render(source=GRAFANA_INI_TMPL,
214- target=GRAFANA_INI,
215+ target=grafana_ini,
216 context=settings,
217- owner='root', group='grafana',
218- perms=0o640,
219+ owner='root', group='root',
220+ perms=0o644,
221 )
222 check_ports(config.get('port'))
223 set_state('grafana.configured')
224@@ -250,44 +310,55 @@ def setup_backup_shedule():
225 @when('grafana.configured')
226 @when_not('grafana.started')
227 def restart_grafana():
228- if not host.service_running(SVCNAME):
229- msg = 'Starting {}'.format(SVCNAME)
230+ kv = unitdata.kv()
231+ source = kv.get('install_method')
232+ if source in ('snap', 'apt'):
233+ svcname = SVCNAME[source]
234+ grafana_ini = GRAFANA_INI[source]
235+ else:
236+ hookenv.status_set('blocked', 'Unsupported install_method')
237+ return
238+
239+ if not host.service_running(svcname):
240+ msg = 'Starting {}'.format(svcname)
241 hookenv.status_set('maintenance', msg)
242 hookenv.log(msg)
243- host.service_start(SVCNAME)
244- elif any_file_changed([GRAFANA_INI]) or is_state('config.changed.install_plugins'):
245- msg = 'Restarting {}'.format(SVCNAME)
246+ host.service_start(svcname)
247+ elif any_file_changed([grafana_ini]) or is_state('config.changed.install_plugins'):
248+ msg = 'Restarting {}'.format(svcname)
249 hookenv.log(msg)
250 hookenv.status_set('maintenance', msg)
251- host.service_restart(SVCNAME)
252+ host.service_restart(svcname)
253 hookenv.status_set('active', 'Ready')
254 set_state('grafana.started')
255- hookenv.status_set('active', 'Started {}'.format(SVCNAME))
256+ hookenv.status_set('active', 'Started {}'.format(svcname))
257
258
259 @when('grafana.started')
260 @when('nrpe-external-master.available')
261 def update_nrpe_config(svc):
262+ kv = unitdata.kv()
263+ source = kv.get('install_method')
264+ if source in ('snap', 'apt'):
265+ svcname = SVCNAME[source]
266+ else:
267+ hookenv.status_set('blocked', 'Unsupported install_method')
268+ return
269 # python-dbus is used by check_upstart_job
270 fetch.apt_install('python-dbus')
271 hostname = nrpe.get_nagios_hostname()
272 current_unit = nrpe.get_nagios_unit_name()
273 nrpe_setup = nrpe.NRPE(hostname=hostname)
274- nrpe.add_init_service_checks(nrpe_setup, [SVCNAME], current_unit)
275+ nrpe.add_init_service_checks(nrpe_setup, [svcname], current_unit)
276 nrpe_setup.write()
277
278- # XXX: Update this when this is merged:
279- # https://code.launchpad.net/~paulgear/charm-helpers/nrpe-service-immediate-check/+merge/300682
280- output = open('/var/lib/nagios/service-check-grafana.txt', 'w')
281- cmd = '/usr/local/lib/nagios/plugins/check_exit_status.pl -s /etc/init.d/grafana'
282- ret = subprocess.call(cmd.split(), stdout=output, stderr=subprocess.STDOUT)
283- hookenv.log('{} returned {}'.format(cmd, ret))
284-
285
286 @when_not('nrpe-external-master.available')
287 def wipe_nrpe_checks():
288 checks = ['/etc/nagios/nrpe.d/check_grafana-server.cfg',
289- '/var/lib/nagios/export/service__*_grafana-server.cfg']
290+ '/etc/nagios/nrpe.d/check_grafana.cfg',
291+ '/var/lib/nagios/export/service__*_grafana-server.cfg',
292+ '/var/lib/nagios/export/service__*_grafana.cfg']
293 for check in checks:
294 for f in glob.glob(check):
295 if os.path.isfile(f):
296@@ -298,14 +369,25 @@ def wipe_nrpe_checks():
297 @when('grafana-source.available')
298 def configure_sources(relation):
299 sources = relation.datasources()
300+ config = hookenv.config()
301+ gf_adminpasswd = config.get('admin_password', False)
302+ if not gf_adminpasswd:
303+ kv = unitdata.kv()
304+ gf_adminpasswd = kv.get('grafana.admin_password')
305+
306 for ds in sources:
307 hookenv.log('Found datasource: {}'.format(str(ds)))
308 # Ensure datasource is configured
309 check_datasource(ds)
310+ if ds['type'] == 'prometheus':
311+ generate_prometheus_dashboards(gf_adminpasswd, ds)
312
313
314 @hook('grafana-source-relation-departed')
315 def sources_gone(relation):
316+ data_dir = data_path()
317+ if not data_dir:
318+ return
319 hookenv.log('sources gone')
320 hookenv.log(relation)
321 # Update the datasources now with the new information that something is
322@@ -321,7 +403,7 @@ def sources_gone(relation):
323 hookenv.log(ds)
324
325 if ds:
326- conn = sqlite3.connect('/var/lib/grafana/grafana.db', timeout=30)
327+ conn = sqlite3.connect('{}/grafana.db'.format(data_dir), timeout=30)
328 cur = conn.cursor()
329 cur.execute(
330 'DELETE FROM DATA_SOURCE WHERE type=? AND url=?',
331@@ -384,7 +466,10 @@ def check_datasource(ds):
332 # 'username': 'username,
333 # 'password': 'password
334 # }
335- conn = sqlite3.connect('/var/lib/grafana/grafana.db', timeout=30)
336+ data_dir = data_path()
337+ if not data_dir:
338+ return
339+ conn = sqlite3.connect('{}/grafana.db'.format(data_dir), timeout=30)
340 cur = conn.cursor()
341 query = cur.execute('SELECT id, type, name, url, is_default FROM DATA_SOURCE')
342 rows = query.fetchall()
343@@ -405,6 +490,62 @@ def check_datasource(ds):
344 conn.close()
345
346
347+def generate_prometheus_dashboards(gf_adminpasswd, ds):
348+ # prometheus_host = ds
349+ ds_name = '{} - {}'.format(ds['service_name'], ds['description'])
350+ config = hookenv.config()
351+
352+ if 'username' in ds:
353+ return
354+ prom_req = requests.get('{}/metrics'.format(ds['url']))
355+ if prom_req.status_code != 200:
356+ hookenv.log('[DEBUG] could not retrieve /metrics from prometheus')
357+ return
358+ prom_metrics = prom_req.text
359+
360+ # get_req = 'http://127.0.0.1:{}/{}'.format(config['port'],
361+ # 'api/search/')
362+ # r = requests.get(get_req, auth=('admin', gf_adminpasswd))
363+ # if r.status_code != 200:
364+ # return
365+ # dash_titles = [dash['title'] for dash in json.loads(r.text)]
366+
367+ templates_dir = 'templates/dashboards/prometheus'
368+ templates_dict = {'prometheus-ceph-exporter':
369+ ['CephCluster.json.j2',
370+ 'CephOSD.json.j2',
371+ 'CephPools.json.j2'],
372+ 'prometheus-openstack-exporter':
373+ ['OpenStackCloud.json.j2'],
374+ 'rabbitmq_overview_queues':
375+ ['RabbitMQ.json.j2'],
376+ 'swift_replication_duration_seconds':
377+ ['Swift.json.j2'],
378+ 'telegraf':
379+ ['Telegraf.json.j2'],
380+ }
381+
382+ dash_enabled = {}
383+ for exporter in templates_dict:
384+ if exporter in prom_metrics:
385+ dash_enabled[exporter] = True
386+
387+ post_req = 'http://127.0.0.1:{}/{}'.format(config['port'],
388+ 'api/dashboards/db')
389+ settings = {'datasource': ds_name}
390+ for exporter in dash_enabled:
391+ for DASH_TMPL in templates_dict[exporter]:
392+ dash_str = render(source=DASH_TMPL,
393+ target=None,
394+ context=settings,
395+ templates_dir=templates_dir)
396+ dash_json = json.loads(dash_str)
397+ r = requests.post(post_req, json=dash_json, auth=('admin', gf_adminpasswd))
398+ if r.status_code != 200:
399+ hookenv.log('[DEBUG] dash upload fail: {}'.format(r.text))
400+ break
401+
402+
403 def generate_query(ds, is_default, id=None):
404 if not id:
405 fields = [
406@@ -522,7 +663,10 @@ def check_adminuser():
407 stmt += ", password=?, theme='light'"
408 stmt += " WHERE id = ?"
409
410- conn = sqlite3.connect('/var/lib/grafana/grafana.db', timeout=30)
411+ data_dir = data_path()
412+ if not data_dir:
413+ return
414+ conn = sqlite3.connect('{}/grafana.db'.format(data_dir), timeout=30)
415 cur = conn.cursor()
416 # Check if we have more than one user in the db
417 for x in range(0, 5):
418diff --git a/templates/dashboards/prometheus/CephCluster.json.j2 b/templates/dashboards/prometheus/CephCluster.json.j2
419new file mode 100644
420index 0000000..3c7718a
421--- /dev/null
422+++ b/templates/dashboards/prometheus/CephCluster.json.j2
423@@ -0,0 +1,2260 @@
424+{
425+"dashboard":
426+{
427+ "__inputs": [
428+ {
429+ "name": "{{ datasource }}",
430+ "label": "prometheus - Juju generated source",
431+ "description": "",
432+ "type": "datasource",
433+ "pluginId": "prometheus",
434+ "pluginName": "Prometheus"
435+ }
436+ ],
437+ "__requires": [
438+ {
439+ "type": "grafana",
440+ "id": "grafana",
441+ "name": "Grafana",
442+ "version": "4.6.2"
443+ },
444+ {
445+ "type": "panel",
446+ "id": "graph",
447+ "name": "Graph",
448+ "version": ""
449+ },
450+ {
451+ "type": "datasource",
452+ "id": "prometheus",
453+ "name": "Prometheus",
454+ "version": "1.0.0"
455+ },
456+ {
457+ "type": "panel",
458+ "id": "singlestat",
459+ "name": "Singlestat",
460+ "version": ""
461+ }
462+ ],
463+ "annotations": {
464+ "list": [
465+ {
466+ "builtIn": 1,
467+ "datasource": "-- Grafana --",
468+ "enable": true,
469+ "hide": true,
470+ "iconColor": "rgba(0, 211, 255, 1)",
471+ "name": "Annotations & Alerts",
472+ "type": "dashboard"
473+ }
474+ ]
475+ },
476+ "description": "Ceph Cluster overview.\r\n",
477+ "editable": true,
478+ "gnetId": 917,
479+ "graphTooltip": 0,
480+ "hideControls": false,
481+ "id": null,
482+ "links": [],
483+ "refresh": "1m",
484+ "rows": [
485+ {
486+ "collapse": false,
487+ "height": "150px",
488+ "panels": [
489+ {
490+ "cacheTimeout": null,
491+ "colorBackground": false,
492+ "colorValue": true,
493+ "colors": [
494+ "rgba(245, 54, 54, 0.9)",
495+ "rgba(237, 129, 40, 0.89)",
496+ "rgba(50, 172, 45, 0.97)"
497+ ],
498+ "datasource": "{{ datasource }}",
499+ "editable": true,
500+ "error": false,
501+ "format": "none",
502+ "gauge": {
503+ "maxValue": 100,
504+ "minValue": 0,
505+ "show": false,
506+ "thresholdLabels": false,
507+ "thresholdMarkers": true
508+ },
509+ "id": 21,
510+ "interval": "1m",
511+ "links": [],
512+ "mappingType": 1,
513+ "mappingTypes": [
514+ {
515+ "name": "value to text",
516+ "value": 1
517+ },
518+ {
519+ "name": "range to text",
520+ "value": 2
521+ }
522+ ],
523+ "maxDataPoints": 100,
524+ "nullPointMode": "connected",
525+ "nullText": null,
526+ "postfix": "",
527+ "postfixFontSize": "50%",
528+ "prefix": "",
529+ "prefixFontSize": "50%",
530+ "rangeMaps": [
531+ {
532+ "from": "null",
533+ "text": "N/A",
534+ "to": "null"
535+ }
536+ ],
537+ "span": 2,
538+ "sparkline": {
539+ "fillColor": "rgba(31, 118, 189, 0.18)",
540+ "full": false,
541+ "lineColor": "rgb(31, 120, 193)",
542+ "show": false
543+ },
544+ "tableColumn": "",
545+ "targets": [
546+ {
547+ "expr": "count(ceph_health_status)",
548+ "interval": "$interval",
549+ "intervalFactor": 1,
550+ "refId": "A",
551+ "step": 60
552+ }
553+ ],
554+ "thresholds": "0,1",
555+ "title": "Status",
556+ "transparent": false,
557+ "type": "singlestat",
558+ "valueFontSize": "100%",
559+ "valueMaps": [
560+ {
561+ "op": "=",
562+ "text": "N/A",
563+ "value": "null"
564+ },
565+ {
566+ "op": "=",
567+ "text": "WARNING",
568+ "value": "0"
569+ },
570+ {
571+ "op": "=",
572+ "text": "HEALTHY",
573+ "value": "1"
574+ }
575+ ],
576+ "valueName": "current"
577+ },
578+ {
579+ "cacheTimeout": null,
580+ "colorBackground": false,
581+ "colorValue": true,
582+ "colors": [
583+ "rgba(245, 54, 54, 0.9)",
584+ "rgba(237, 129, 40, 0.89)",
585+ "rgba(50, 172, 45, 0.97)"
586+ ],
587+ "datasource": "{{ datasource }}",
588+ "editable": true,
589+ "error": false,
590+ "format": "none",
591+ "gauge": {
592+ "maxValue": 100,
593+ "minValue": 0,
594+ "show": false,
595+ "thresholdLabels": false,
596+ "thresholdMarkers": true
597+ },
598+ "id": 14,
599+ "interval": "1m",
600+ "links": [],
601+ "mappingType": 1,
602+ "mappingTypes": [
603+ {
604+ "name": "value to text",
605+ "value": 1
606+ },
607+ {
608+ "name": "range to text",
609+ "value": 2
610+ }
611+ ],
612+ "maxDataPoints": 100,
613+ "nullPointMode": "connected",
614+ "nullText": null,
615+ "postfix": "",
616+ "postfixFontSize": "50%",
617+ "prefix": "",
618+ "prefixFontSize": "50%",
619+ "rangeMaps": [
620+ {
621+ "from": "null",
622+ "text": "N/A",
623+ "to": "null"
624+ }
625+ ],
626+ "span": 2,
627+ "sparkline": {
628+ "fillColor": "rgba(31, 118, 189, 0.18)",
629+ "full": false,
630+ "lineColor": "rgb(31, 120, 193)",
631+ "show": false
632+ },
633+ "tableColumn": "",
634+ "targets": [
635+ {
636+ "expr": "ceph_monitor_quorum_count",
637+ "interval": "$interval",
638+ "intervalFactor": 1,
639+ "legendFormat": "",
640+ "refId": "A",
641+ "step": 60
642+ }
643+ ],
644+ "thresholds": "2,3",
645+ "title": "Monitors In Quorum",
646+ "transparent": false,
647+ "type": "singlestat",
648+ "valueFontSize": "100%",
649+ "valueMaps": [
650+ {
651+ "op": "=",
652+ "text": "N/A",
653+ "value": "null"
654+ }
655+ ],
656+ "valueName": "current"
657+ },
658+ {
659+ "cacheTimeout": null,
660+ "colorBackground": false,
661+ "colorValue": false,
662+ "colors": [
663+ "rgba(245, 54, 54, 0.9)",
664+ "rgba(237, 129, 40, 0.89)",
665+ "rgba(50, 172, 45, 0.97)"
666+ ],
667+ "datasource": "{{ datasource }}",
668+ "editable": true,
669+ "error": false,
670+ "format": "none",
671+ "gauge": {
672+ "maxValue": 100,
673+ "minValue": 0,
674+ "show": false,
675+ "thresholdLabels": false,
676+ "thresholdMarkers": true
677+ },
678+ "id": 22,
679+ "interval": "1m",
680+ "links": [],
681+ "mappingType": 1,
682+ "mappingTypes": [
683+ {
684+ "name": "value to text",
685+ "value": 1
686+ },
687+ {
688+ "name": "range to text",
689+ "value": 2
690+ }
691+ ],
692+ "maxDataPoints": 100,
693+ "nullPointMode": "connected",
694+ "nullText": null,
695+ "postfix": "",
696+ "postfixFontSize": "50%",
697+ "prefix": "",
698+ "prefixFontSize": "50%",
699+ "rangeMaps": [
700+ {
701+ "from": "null",
702+ "text": "N/A",
703+ "to": "null"
704+ }
705+ ],
706+ "span": 2,
707+ "sparkline": {
708+ "fillColor": "rgba(31, 118, 189, 0.18)",
709+ "full": true,
710+ "lineColor": "rgb(31, 120, 193)",
711+ "show": true
712+ },
713+ "tableColumn": "",
714+ "targets": [
715+ {
716+ "expr": "count(ceph_pool_available_bytes)",
717+ "interval": "$interval",
718+ "intervalFactor": 1,
719+ "legendFormat": "",
720+ "refId": "A",
721+ "step": 60
722+ }
723+ ],
724+ "thresholds": "",
725+ "title": "Pools",
726+ "transparent": false,
727+ "type": "singlestat",
728+ "valueFontSize": "100%",
729+ "valueMaps": [
730+ {
731+ "op": "=",
732+ "text": "N/A",
733+ "value": "null"
734+ }
735+ ],
736+ "valueName": "current"
737+ },
738+ {
739+ "cacheTimeout": null,
740+ "colorBackground": false,
741+ "colorValue": false,
742+ "colors": [
743+ "rgba(50, 172, 45, 0.97)",
744+ "rgba(237, 129, 40, 0.89)",
745+ "rgba(245, 54, 54, 0.9)"
746+ ],
747+ "datasource": "{{ datasource }}",
748+ "editable": true,
749+ "error": false,
750+ "format": "bytes",
751+ "gauge": {
752+ "maxValue": 100,
753+ "minValue": 0,
754+ "show": false,
755+ "thresholdLabels": false,
756+ "thresholdMarkers": true
757+ },
758+ "id": 33,
759+ "interval": "1m",
760+ "links": [],
761+ "mappingType": 1,
762+ "mappingTypes": [
763+ {
764+ "name": "value to text",
765+ "value": 1
766+ },
767+ {
768+ "name": "range to text",
769+ "value": 2
770+ }
771+ ],
772+ "maxDataPoints": 100,
773+ "nullPointMode": "connected",
774+ "nullText": null,
775+ "postfix": "",
776+ "postfixFontSize": "50%",
777+ "prefix": "",
778+ "prefixFontSize": "50%",
779+ "rangeMaps": [
780+ {
781+ "from": "null",
782+ "text": "N/A",
783+ "to": "null"
784+ }
785+ ],
786+ "span": 2,
787+ "sparkline": {
788+ "fillColor": "rgba(31, 118, 189, 0.18)",
789+ "full": true,
790+ "lineColor": "rgb(31, 120, 193)",
791+ "show": true
792+ },
793+ "tableColumn": "",
794+ "targets": [
795+ {
796+ "expr": "ceph_cluster_capacity_bytes",
797+ "interval": "$interval",
798+ "intervalFactor": 1,
799+ "legendFormat": "",
800+ "refId": "A",
801+ "step": 60
802+ }
803+ ],
804+ "thresholds": "0.025,0.1",
805+ "title": "Cluster Capacity",
806+ "transparent": false,
807+ "type": "singlestat",
808+ "valueFontSize": "100%",
809+ "valueMaps": [
810+ {
811+ "op": "=",
812+ "text": "N/A",
813+ "value": "null"
814+ }
815+ ],
816+ "valueName": "current"
817+ },
818+ {
819+ "cacheTimeout": null,
820+ "colorBackground": false,
821+ "colorValue": false,
822+ "colors": [
823+ "rgba(50, 172, 45, 0.97)",
824+ "rgba(237, 129, 40, 0.89)",
825+ "rgba(245, 54, 54, 0.9)"
826+ ],
827+ "datasource": "{{ datasource }}",
828+ "editable": true,
829+ "error": false,
830+ "format": "bytes",
831+ "gauge": {
832+ "maxValue": 100,
833+ "minValue": 0,
834+ "show": false,
835+ "thresholdLabels": false,
836+ "thresholdMarkers": true
837+ },
838+ "id": 34,
839+ "interval": "1m",
840+ "links": [],
841+ "mappingType": 1,
842+ "mappingTypes": [
843+ {
844+ "name": "value to text",
845+ "value": 1
846+ },
847+ {
848+ "name": "range to text",
849+ "value": 2
850+ }
851+ ],
852+ "maxDataPoints": 100,
853+ "nullPointMode": "connected",
854+ "nullText": null,
855+ "postfix": "",
856+ "postfixFontSize": "50%",
857+ "prefix": "",
858+ "prefixFontSize": "50%",
859+ "rangeMaps": [
860+ {
861+ "from": "null",
862+ "text": "N/A",
863+ "to": "null"
864+ }
865+ ],
866+ "span": 2,
867+ "sparkline": {
868+ "fillColor": "rgba(31, 118, 189, 0.18)",
869+ "full": true,
870+ "lineColor": "rgb(31, 120, 193)",
871+ "show": true
872+ },
873+ "tableColumn": "",
874+ "targets": [
875+ {
876+ "expr": "ceph_cluster_used_bytes",
877+ "interval": "$interval",
878+ "intervalFactor": 1,
879+ "legendFormat": "",
880+ "refId": "A",
881+ "step": 60
882+ }
883+ ],
884+ "thresholds": "0.025,0.1",
885+ "title": "Used Capacity",
886+ "transparent": false,
887+ "type": "singlestat",
888+ "valueFontSize": "100%",
889+ "valueMaps": [
890+ {
891+ "op": "=",
892+ "text": "N/A",
893+ "value": "null"
894+ }
895+ ],
896+ "valueName": "current"
897+ },
898+ {
899+ "cacheTimeout": null,
900+ "colorBackground": false,
901+ "colorValue": true,
902+ "colors": [
903+ "rgba(50, 172, 45, 0.97)",
904+ "rgba(237, 129, 40, 0.89)",
905+ "rgba(245, 54, 54, 0.9)"
906+ ],
907+ "datasource": "{{ datasource }}",
908+ "editable": true,
909+ "error": false,
910+ "format": "percentunit",
911+ "gauge": {
912+ "maxValue": 100,
913+ "minValue": 0,
914+ "show": true,
915+ "thresholdLabels": false,
916+ "thresholdMarkers": true
917+ },
918+ "id": 23,
919+ "interval": "1m",
920+ "links": [],
921+ "mappingType": 1,
922+ "mappingTypes": [
923+ {
924+ "name": "value to text",
925+ "value": 1
926+ },
927+ {
928+ "name": "range to text",
929+ "value": 2
930+ }
931+ ],
932+ "maxDataPoints": 100,
933+ "nullPointMode": "connected",
934+ "nullText": null,
935+ "postfix": "",
936+ "postfixFontSize": "50%",
937+ "prefix": "",
938+ "prefixFontSize": "50%",
939+ "rangeMaps": [
940+ {
941+ "from": "null",
942+ "text": "N/A",
943+ "to": "null"
944+ }
945+ ],
946+ "span": 2,
947+ "sparkline": {
948+ "fillColor": "rgba(31, 118, 189, 0.18)",
949+ "full": true,
950+ "lineColor": "rgb(31, 120, 193)",
951+ "show": false
952+ },
953+ "tableColumn": "",
954+ "targets": [
955+ {
956+ "expr": "ceph_cluster_available_bytes/ceph_cluster_capacity_bytes",
957+ "interval": "$interval",
958+ "intervalFactor": 1,
959+ "legendFormat": "",
960+ "refId": "A",
961+ "step": 60
962+ }
963+ ],
964+ "thresholds": "70,80",
965+ "title": "Available Capacity",
966+ "transparent": false,
967+ "type": "singlestat",
968+ "valueFontSize": "100%",
969+ "valueMaps": [
970+ {
971+ "op": "=",
972+ "text": "N/A",
973+ "value": "null"
974+ }
975+ ],
976+ "valueName": "current"
977+ }
978+ ],
979+ "repeat": null,
980+ "repeatIteration": null,
981+ "repeatRowId": null,
982+ "showTitle": false,
983+ "title": "New row",
984+ "titleSize": "h6"
985+ },
986+ {
987+ "collapse": false,
988+ "height": "100px",
989+ "panels": [
990+ {
991+ "cacheTimeout": null,
992+ "colorBackground": false,
993+ "colorValue": false,
994+ "colors": [
995+ "rgba(245, 54, 54, 0.9)",
996+ "rgba(237, 129, 40, 0.89)",
997+ "rgba(50, 172, 45, 0.97)"
998+ ],
999+ "datasource": "{{ datasource }}",
1000+ "editable": true,
1001+ "error": false,
1002+ "format": "none",
1003+ "gauge": {
1004+ "maxValue": 100,
1005+ "minValue": 0,
1006+ "show": false,
1007+ "thresholdLabels": false,
1008+ "thresholdMarkers": true
1009+ },
1010+ "id": 26,
1011+ "interval": null,
1012+ "links": [],
1013+ "mappingType": 1,
1014+ "mappingTypes": [
1015+ {
1016+ "name": "value to text",
1017+ "value": 1
1018+ },
1019+ {
1020+ "name": "range to text",
1021+ "value": 2
1022+ }
1023+ ],
1024+ "maxDataPoints": 100,
1025+ "nullPointMode": "connected",
1026+ "nullText": null,
1027+ "postfix": "",
1028+ "postfixFontSize": "50%",
1029+ "prefix": "",
1030+ "prefixFontSize": "50%",
1031+ "rangeMaps": [
1032+ {
1033+ "from": "null",
1034+ "text": "N/A",
1035+ "to": "null"
1036+ }
1037+ ],
1038+ "span": 1,
1039+ "sparkline": {
1040+ "fillColor": "rgba(31, 118, 189, 0.18)",
1041+ "full": false,
1042+ "lineColor": "rgb(31, 120, 193)",
1043+ "show": false
1044+ },
1045+ "tableColumn": "",
1046+ "targets": [
1047+ {
1048+ "expr": "ceph_osds_in",
1049+ "interval": "$interval",
1050+ "intervalFactor": 1,
1051+ "legendFormat": "",
1052+ "refId": "A",
1053+ "step": 60
1054+ }
1055+ ],
1056+ "thresholds": "",
1057+ "title": "OSDs IN",
1058+ "type": "singlestat",
1059+ "valueFontSize": "80%",
1060+ "valueMaps": [
1061+ {
1062+ "op": "=",
1063+ "text": "N/A",
1064+ "value": "null"
1065+ }
1066+ ],
1067+ "valueName": "current"
1068+ },
1069+ {
1070+ "cacheTimeout": null,
1071+ "colorBackground": true,
1072+ "colorValue": false,
1073+ "colors": [
1074+ "rgba(50, 172, 45, 0.97)",
1075+ "rgba(237, 40, 40, 0.89)",
1076+ "rgba(245, 54, 54, 0.9)"
1077+ ],
1078+ "datasource": "{{ datasource }}",
1079+ "editable": true,
1080+ "error": false,
1081+ "format": "none",
1082+ "gauge": {
1083+ "maxValue": 100,
1084+ "minValue": 0,
1085+ "show": false,
1086+ "thresholdLabels": false,
1087+ "thresholdMarkers": true
1088+ },
1089+ "id": 27,
1090+ "interval": null,
1091+ "links": [],
1092+ "mappingType": 1,
1093+ "mappingTypes": [
1094+ {
1095+ "name": "value to text",
1096+ "value": 1
1097+ },
1098+ {
1099+ "name": "range to text",
1100+ "value": 2
1101+ }
1102+ ],
1103+ "maxDataPoints": 100,
1104+ "nullPointMode": "connected",
1105+ "nullText": null,
1106+ "postfix": "",
1107+ "postfixFontSize": "50%",
1108+ "prefix": "",
1109+ "prefixFontSize": "50%",
1110+ "rangeMaps": [
1111+ {
1112+ "from": "null",
1113+ "text": "N/A",
1114+ "to": "null"
1115+ }
1116+ ],
1117+ "span": 1,
1118+ "sparkline": {
1119+ "fillColor": "rgba(31, 118, 189, 0.18)",
1120+ "full": false,
1121+ "lineColor": "rgb(31, 120, 193)",
1122+ "show": false
1123+ },
1124+ "tableColumn": "",
1125+ "targets": [
1126+ {
1127+ "expr": "ceph_osds - ceph_osds_in",
1128+ "interval": "$interval",
1129+ "intervalFactor": 1,
1130+ "legendFormat": "",
1131+ "refId": "A",
1132+ "step": 60
1133+ }
1134+ ],
1135+ "thresholds": "1,1",
1136+ "title": "OSDs OUT",
1137+ "type": "singlestat",
1138+ "valueFontSize": "80%",
1139+ "valueMaps": [
1140+ {
1141+ "op": "=",
1142+ "text": "N/A",
1143+ "value": "null"
1144+ }
1145+ ],
1146+ "valueName": "current"
1147+ },
1148+ {
1149+ "cacheTimeout": null,
1150+ "colorBackground": false,
1151+ "colorValue": false,
1152+ "colors": [
1153+ "rgba(245, 54, 54, 0.9)",
1154+ "rgba(237, 129, 40, 0.89)",
1155+ "rgba(50, 172, 45, 0.97)"
1156+ ],
1157+ "datasource": "{{ datasource }}",
1158+ "editable": true,
1159+ "error": false,
1160+ "format": "none",
1161+ "gauge": {
1162+ "maxValue": 100,
1163+ "minValue": 0,
1164+ "show": false,
1165+ "thresholdLabels": false,
1166+ "thresholdMarkers": true
1167+ },
1168+ "id": 28,
1169+ "interval": null,
1170+ "links": [],
1171+ "mappingType": 1,
1172+ "mappingTypes": [
1173+ {
1174+ "name": "value to text",
1175+ "value": 1
1176+ },
1177+ {
1178+ "name": "range to text",
1179+ "value": 2
1180+ }
1181+ ],
1182+ "maxDataPoints": 100,
1183+ "nullPointMode": "connected",
1184+ "nullText": null,
1185+ "postfix": "",
1186+ "postfixFontSize": "50%",
1187+ "prefix": "",
1188+ "prefixFontSize": "50%",
1189+ "rangeMaps": [
1190+ {
1191+ "from": "null",
1192+ "text": "N/A",
1193+ "to": "null"
1194+ }
1195+ ],
1196+ "span": 1,
1197+ "sparkline": {
1198+ "fillColor": "rgba(31, 118, 189, 0.18)",
1199+ "full": false,
1200+ "lineColor": "rgb(31, 120, 193)",
1201+ "show": false
1202+ },
1203+ "tableColumn": "",
1204+ "targets": [
1205+ {
1206+ "expr": "sum(ceph_osd_up)",
1207+ "interval": "$interval",
1208+ "intervalFactor": 1,
1209+ "legendFormat": "",
1210+ "refId": "A",
1211+ "step": 60
1212+ }
1213+ ],
1214+ "thresholds": "",
1215+ "title": "OSDs UP",
1216+ "type": "singlestat",
1217+ "valueFontSize": "80%",
1218+ "valueMaps": [
1219+ {
1220+ "op": "=",
1221+ "text": "N/A",
1222+ "value": "null"
1223+ }
1224+ ],
1225+ "valueName": "current"
1226+ },
1227+ {
1228+ "cacheTimeout": null,
1229+ "colorBackground": true,
1230+ "colorValue": false,
1231+ "colors": [
1232+ "rgba(50, 172, 45, 0.97)",
1233+ "rgba(237, 40, 40, 0.89)",
1234+ "rgba(245, 54, 54, 0.9)"
1235+ ],
1236+ "datasource": "{{ datasource }}",
1237+ "editable": true,
1238+ "error": false,
1239+ "format": "none",
1240+ "gauge": {
1241+ "maxValue": 100,
1242+ "minValue": 0,
1243+ "show": false,
1244+ "thresholdLabels": false,
1245+ "thresholdMarkers": true
1246+ },
1247+ "id": 29,
1248+ "interval": null,
1249+ "links": [],
1250+ "mappingType": 1,
1251+ "mappingTypes": [
1252+ {
1253+ "name": "value to text",
1254+ "value": 1
1255+ },
1256+ {
1257+ "name": "range to text",
1258+ "value": 2
1259+ }
1260+ ],
1261+ "maxDataPoints": 100,
1262+ "nullPointMode": "connected",
1263+ "nullText": null,
1264+ "postfix": "",
1265+ "postfixFontSize": "50%",
1266+ "prefix": "",
1267+ "prefixFontSize": "50%",
1268+ "rangeMaps": [
1269+ {
1270+ "from": "null",
1271+ "text": "N/A",
1272+ "to": "null"
1273+ }
1274+ ],
1275+ "span": 1,
1276+ "sparkline": {
1277+ "fillColor": "rgba(31, 118, 189, 0.18)",
1278+ "full": false,
1279+ "lineColor": "rgb(31, 120, 193)",
1280+ "show": false
1281+ },
1282+ "tableColumn": "",
1283+ "targets": [
1284+ {
1285+ "expr": "ceph_osds_down",
1286+ "interval": "$interval",
1287+ "intervalFactor": 1,
1288+ "legendFormat": "",
1289+ "refId": "A",
1290+ "step": 60
1291+ }
1292+ ],
1293+ "thresholds": "1,1",
1294+ "title": "OSDs DOWN",
1295+ "type": "singlestat",
1296+ "valueFontSize": "80%",
1297+ "valueMaps": [
1298+ {
1299+ "op": "=",
1300+ "text": "N/A",
1301+ "value": "null"
1302+ }
1303+ ],
1304+ "valueName": "current"
1305+ },
1306+ {
1307+ "cacheTimeout": null,
1308+ "colorBackground": false,
1309+ "colorValue": true,
1310+ "colors": [
1311+ "rgba(50, 172, 45, 0.97)",
1312+ "rgba(237, 129, 40, 0.89)",
1313+ "rgba(245, 54, 54, 0.9)"
1314+ ],
1315+ "datasource": "{{ datasource }}",
1316+ "editable": true,
1317+ "error": false,
1318+ "format": "none",
1319+ "gauge": {
1320+ "maxValue": 100,
1321+ "minValue": 0,
1322+ "show": false,
1323+ "thresholdLabels": false,
1324+ "thresholdMarkers": true
1325+ },
1326+ "id": 30,
1327+ "interval": null,
1328+ "links": [],
1329+ "mappingType": 1,
1330+ "mappingTypes": [
1331+ {
1332+ "name": "value to text",
1333+ "value": 1
1334+ },
1335+ {
1336+ "name": "range to text",
1337+ "value": 2
1338+ }
1339+ ],
1340+ "maxDataPoints": 100,
1341+ "nullPointMode": "connected",
1342+ "nullText": null,
1343+ "postfix": "",
1344+ "postfixFontSize": "50%",
1345+ "prefix": "",
1346+ "prefixFontSize": "50%",
1347+ "rangeMaps": [
1348+ {
1349+ "from": "null",
1350+ "text": "N/A",
1351+ "to": "null"
1352+ }
1353+ ],
1354+ "span": 2,
1355+ "sparkline": {
1356+ "fillColor": "rgba(31, 118, 189, 0.18)",
1357+ "full": true,
1358+ "lineColor": "rgb(31, 120, 193)",
1359+ "show": true
1360+ },
1361+ "tableColumn": "",
1362+ "targets": [
1363+ {
1364+ "expr": "avg(ceph_osd_pgs)",
1365+ "interval": "$interval",
1366+ "intervalFactor": 1,
1367+ "legendFormat": "",
1368+ "refId": "A",
1369+ "step": 60
1370+ }
1371+ ],
1372+ "thresholds": "250,300",
1373+ "title": "Agerage PGs per OSD",
1374+ "type": "singlestat",
1375+ "valueFontSize": "80%",
1376+ "valueMaps": [
1377+ {
1378+ "op": "=",
1379+ "text": "N/A",
1380+ "value": "null"
1381+ }
1382+ ],
1383+ "valueName": "current"
1384+ },
1385+ {
1386+ "cacheTimeout": null,
1387+ "colorBackground": false,
1388+ "colorValue": true,
1389+ "colors": [
1390+ "rgba(50, 172, 45, 0.97)",
1391+ "rgba(237, 129, 40, 0.89)",
1392+ "rgba(245, 54, 54, 0.9)"
1393+ ],
1394+ "datasource": "{{ datasource }}",
1395+ "editable": true,
1396+ "error": false,
1397+ "format": "s",
1398+ "gauge": {
1399+ "maxValue": 100,
1400+ "minValue": 0,
1401+ "show": false,
1402+ "thresholdLabels": false,
1403+ "thresholdMarkers": true
1404+ },
1405+ "id": 31,
1406+ "interval": null,
1407+ "links": [],
1408+ "mappingType": 1,
1409+ "mappingTypes": [
1410+ {
1411+ "name": "value to text",
1412+ "value": 1
1413+ },
1414+ {
1415+ "name": "range to text",
1416+ "value": 2
1417+ }
1418+ ],
1419+ "maxDataPoints": 100,
1420+ "nullPointMode": "connected",
1421+ "nullText": null,
1422+ "postfix": "",
1423+ "postfixFontSize": "50%",
1424+ "prefix": "",
1425+ "prefixFontSize": "50%",
1426+ "rangeMaps": [
1427+ {
1428+ "from": "null",
1429+ "text": "N/A",
1430+ "to": "null"
1431+ }
1432+ ],
1433+ "span": 2,
1434+ "sparkline": {
1435+ "fillColor": "rgba(31, 118, 189, 0.18)",
1436+ "full": true,
1437+ "lineColor": "rgb(31, 120, 193)",
1438+ "show": true
1439+ },
1440+ "tableColumn": "",
1441+ "targets": [
1442+ {
1443+ "expr": "avg(ceph_osd_perf_apply_latency_seconds)",
1444+ "interval": "$interval",
1445+ "intervalFactor": 1,
1446+ "legendFormat": "",
1447+ "refId": "A",
1448+ "step": 60
1449+ }
1450+ ],
1451+ "thresholds": "0.01,0.05",
1452+ "title": "Agerage OSD Apply Latency",
1453+ "type": "singlestat",
1454+ "valueFontSize": "80%",
1455+ "valueMaps": [
1456+ {
1457+ "op": "=",
1458+ "text": "N/A",
1459+ "value": "null"
1460+ }
1461+ ],
1462+ "valueName": "avg"
1463+ },
1464+ {
1465+ "cacheTimeout": null,
1466+ "colorBackground": false,
1467+ "colorValue": true,
1468+ "colors": [
1469+ "rgba(50, 172, 45, 0.97)",
1470+ "rgba(237, 129, 40, 0.89)",
1471+ "rgba(245, 54, 54, 0.9)"
1472+ ],
1473+ "datasource": "{{ datasource }}",
1474+ "editable": true,
1475+ "error": false,
1476+ "format": "s",
1477+ "gauge": {
1478+ "maxValue": 100,
1479+ "minValue": 0,
1480+ "show": false,
1481+ "thresholdLabels": false,
1482+ "thresholdMarkers": true
1483+ },
1484+ "id": 32,
1485+ "interval": null,
1486+ "links": [],
1487+ "mappingType": 1,
1488+ "mappingTypes": [
1489+ {
1490+ "name": "value to text",
1491+ "value": 1
1492+ },
1493+ {
1494+ "name": "range to text",
1495+ "value": 2
1496+ }
1497+ ],
1498+ "maxDataPoints": 100,
1499+ "nullPointMode": "connected",
1500+ "nullText": null,
1501+ "postfix": "",
1502+ "postfixFontSize": "50%",
1503+ "prefix": "",
1504+ "prefixFontSize": "50%",
1505+ "rangeMaps": [
1506+ {
1507+ "from": "null",
1508+ "text": "N/A",
1509+ "to": "null"
1510+ }
1511+ ],
1512+ "span": 2,
1513+ "sparkline": {
1514+ "fillColor": "rgba(31, 118, 189, 0.18)",
1515+ "full": true,
1516+ "lineColor": "rgb(31, 120, 193)",
1517+ "show": true
1518+ },
1519+ "tableColumn": "",
1520+ "targets": [
1521+ {
1522+ "expr": "avg(ceph_osd_perf_commit_latency_seconds)",
1523+ "interval": "$interval",
1524+ "intervalFactor": 1,
1525+ "legendFormat": "",
1526+ "refId": "A",
1527+ "step": 60
1528+ }
1529+ ],
1530+ "thresholds": "0.01,0.05",
1531+ "title": "Agerage OSD Commit Latency",
1532+ "type": "singlestat",
1533+ "valueFontSize": "80%",
1534+ "valueMaps": [
1535+ {
1536+ "op": "=",
1537+ "text": "N/A",
1538+ "value": "null"
1539+ }
1540+ ],
1541+ "valueName": "avg"
1542+ },
1543+ {
1544+ "cacheTimeout": null,
1545+ "colorBackground": false,
1546+ "colorValue": true,
1547+ "colors": [
1548+ "rgba(50, 172, 45, 0.97)",
1549+ "rgba(237, 129, 40, 0.89)",
1550+ "rgba(245, 54, 54, 0.9)"
1551+ ],
1552+ "datasource": "{{ datasource }}",
1553+ "editable": true,
1554+ "error": false,
1555+ "format": "s",
1556+ "gauge": {
1557+ "maxValue": 100,
1558+ "minValue": 0,
1559+ "show": false,
1560+ "thresholdLabels": false,
1561+ "thresholdMarkers": true
1562+ },
1563+ "id": 24,
1564+ "interval": "1m",
1565+ "links": [],
1566+ "mappingType": 1,
1567+ "mappingTypes": [
1568+ {
1569+ "name": "value to text",
1570+ "value": 1
1571+ },
1572+ {
1573+ "name": "range to text",
1574+ "value": 2
1575+ }
1576+ ],
1577+ "maxDataPoints": 100,
1578+ "nullPointMode": "connected",
1579+ "nullText": null,
1580+ "postfix": "",
1581+ "postfixFontSize": "50%",
1582+ "prefix": "",
1583+ "prefixFontSize": "50%",
1584+ "rangeMaps": [
1585+ {
1586+ "from": "null",
1587+ "text": "N/A",
1588+ "to": "null"
1589+ }
1590+ ],
1591+ "repeat": null,
1592+ "span": 2,
1593+ "sparkline": {
1594+ "fillColor": "rgba(31, 118, 189, 0.18)",
1595+ "full": true,
1596+ "lineColor": "rgb(31, 120, 193)",
1597+ "show": true
1598+ },
1599+ "tableColumn": "",
1600+ "targets": [
1601+ {
1602+ "expr": "avg(ceph_monitor_latency_seconds)",
1603+ "interval": "$interval",
1604+ "intervalFactor": 1,
1605+ "legendFormat": "",
1606+ "refId": "A",
1607+ "step": 60
1608+ }
1609+ ],
1610+ "thresholds": "70,80",
1611+ "title": "Average Monitor Latency",
1612+ "transparent": false,
1613+ "type": "singlestat",
1614+ "valueFontSize": "100%",
1615+ "valueMaps": [
1616+ {
1617+ "op": "=",
1618+ "text": "N/A",
1619+ "value": "null"
1620+ }
1621+ ],
1622+ "valueName": "current"
1623+ }
1624+ ],
1625+ "repeat": null,
1626+ "repeatIteration": null,
1627+ "repeatRowId": null,
1628+ "showTitle": false,
1629+ "title": "New row",
1630+ "titleSize": "h6"
1631+ },
1632+ {
1633+ "collapse": false,
1634+ "height": "250px",
1635+ "panels": [
1636+ {
1637+ "aliasColors": {
1638+ "Available": "#EAB839",
1639+ "Total Capacity": "#447EBC",
1640+ "Used": "#BF1B00",
1641+ "total_avail": "#6ED0E0",
1642+ "total_space": "#7EB26D",
1643+ "total_used": "#890F02"
1644+ },
1645+ "bars": false,
1646+ "dashLength": 10,
1647+ "dashes": false,
1648+ "datasource": "{{ datasource }}",
1649+ "editable": true,
1650+ "error": false,
1651+ "fill": 4,
1652+ "grid": {},
1653+ "height": "300",
1654+ "id": 1,
1655+ "interval": "$interval",
1656+ "legend": {
1657+ "alignAsTable": true,
1658+ "avg": true,
1659+ "current": true,
1660+ "max": true,
1661+ "min": true,
1662+ "show": true,
1663+ "total": false,
1664+ "values": true
1665+ },
1666+ "lines": true,
1667+ "linewidth": 0,
1668+ "links": [],
1669+ "minSpan": null,
1670+ "nullPointMode": "connected",
1671+ "percentage": false,
1672+ "pointradius": 5,
1673+ "points": false,
1674+ "renderer": "flot",
1675+ "seriesOverrides": [
1676+ {
1677+ "alias": "Total Capacity",
1678+ "fill": 0,
1679+ "linewidth": 3,
1680+ "stack": false
1681+ }
1682+ ],
1683+ "spaceLength": 10,
1684+ "span": 4,
1685+ "stack": true,
1686+ "steppedLine": false,
1687+ "targets": [
1688+ {
1689+ "expr": "ceph_cluster_available_bytes",
1690+ "interval": "$interval",
1691+ "intervalFactor": 1,
1692+ "legendFormat": "Available",
1693+ "refId": "A",
1694+ "step": 60
1695+ },
1696+ {
1697+ "expr": "ceph_cluster_used_bytes",
1698+ "interval": "$interval",
1699+ "intervalFactor": 1,
1700+ "legendFormat": "Used",
1701+ "refId": "B",
1702+ "step": 60
1703+ },
1704+ {
1705+ "expr": "ceph_cluster_capacity_bytes",
1706+ "interval": "$interval",
1707+ "intervalFactor": 1,
1708+ "legendFormat": "Total Capacity",
1709+ "refId": "C",
1710+ "step": 60
1711+ }
1712+ ],
1713+ "thresholds": [],
1714+ "timeFrom": null,
1715+ "timeShift": null,
1716+ "title": "Capacity",
1717+ "tooltip": {
1718+ "msResolution": false,
1719+ "shared": true,
1720+ "sort": 2,
1721+ "value_type": "individual"
1722+ },
1723+ "type": "graph",
1724+ "xaxis": {
1725+ "buckets": null,
1726+ "mode": "time",
1727+ "name": null,
1728+ "show": true,
1729+ "values": []
1730+ },
1731+ "yaxes": [
1732+ {
1733+ "format": "bytes",
1734+ "label": null,
1735+ "logBase": 1,
1736+ "max": null,
1737+ "min": null,
1738+ "show": true
1739+ },
1740+ {
1741+ "format": "short",
1742+ "label": null,
1743+ "logBase": 1,
1744+ "max": null,
1745+ "min": null,
1746+ "show": true
1747+ }
1748+ ]
1749+ },
1750+ {
1751+ "aliasColors": {
1752+ "Total Capacity": "#7EB26D",
1753+ "Used": "#BF1B00",
1754+ "total_avail": "#6ED0E0",
1755+ "total_space": "#7EB26D",
1756+ "total_used": "#890F02"
1757+ },
1758+ "bars": false,
1759+ "dashLength": 10,
1760+ "dashes": false,
1761+ "datasource": "{{ datasource }}",
1762+ "decimals": 0,
1763+ "editable": true,
1764+ "error": false,
1765+ "fill": 1,
1766+ "grid": {},
1767+ "height": "300",
1768+ "id": 3,
1769+ "interval": "$interval",
1770+ "legend": {
1771+ "alignAsTable": true,
1772+ "avg": true,
1773+ "current": true,
1774+ "max": true,
1775+ "min": true,
1776+ "show": true,
1777+ "total": false,
1778+ "values": true
1779+ },
1780+ "lines": true,
1781+ "linewidth": 2,
1782+ "links": [],
1783+ "minSpan": null,
1784+ "nullPointMode": "connected",
1785+ "percentage": false,
1786+ "pointradius": 5,
1787+ "points": false,
1788+ "renderer": "flot",
1789+ "seriesOverrides": [],
1790+ "spaceLength": 10,
1791+ "span": 4,
1792+ "stack": true,
1793+ "steppedLine": false,
1794+ "targets": [
1795+ {
1796+ "expr": "ceph_client_io_write_ops",
1797+ "interval": "$interval",
1798+ "intervalFactor": 1,
1799+ "legendFormat": "Write",
1800+ "refId": "A",
1801+ "step": 60
1802+ },
1803+ {
1804+ "expr": "ceph_client_io_read_ops",
1805+ "interval": "$interval",
1806+ "intervalFactor": 1,
1807+ "legendFormat": "Read",
1808+ "refId": "B",
1809+ "step": 60
1810+ }
1811+ ],
1812+ "thresholds": [],
1813+ "timeFrom": null,
1814+ "timeShift": null,
1815+ "title": "IOPS",
1816+ "tooltip": {
1817+ "msResolution": true,
1818+ "shared": true,
1819+ "sort": 2,
1820+ "value_type": "individual"
1821+ },
1822+ "type": "graph",
1823+ "xaxis": {
1824+ "buckets": null,
1825+ "mode": "time",
1826+ "name": null,
1827+ "show": true,
1828+ "values": []
1829+ },
1830+ "yaxes": [
1831+ {
1832+ "format": "none",
1833+ "label": "",
1834+ "logBase": 1,
1835+ "max": null,
1836+ "min": 0,
1837+ "show": true
1838+ },
1839+ {
1840+ "format": "short",
1841+ "label": null,
1842+ "logBase": 1,
1843+ "max": null,
1844+ "min": 0,
1845+ "show": true
1846+ }
1847+ ]
1848+ },
1849+ {
1850+ "aliasColors": {},
1851+ "bars": false,
1852+ "dashLength": 10,
1853+ "dashes": false,
1854+ "datasource": "{{ datasource }}",
1855+ "editable": true,
1856+ "error": false,
1857+ "fill": 1,
1858+ "grid": {},
1859+ "height": "300",
1860+ "id": 7,
1861+ "interval": "$interval",
1862+ "legend": {
1863+ "alignAsTable": true,
1864+ "avg": true,
1865+ "current": true,
1866+ "max": true,
1867+ "min": true,
1868+ "show": true,
1869+ "total": false,
1870+ "values": true
1871+ },
1872+ "lines": true,
1873+ "linewidth": 2,
1874+ "links": [],
1875+ "nullPointMode": "connected",
1876+ "percentage": false,
1877+ "pointradius": 5,
1878+ "points": false,
1879+ "renderer": "flot",
1880+ "seriesOverrides": [],
1881+ "spaceLength": 10,
1882+ "span": 4,
1883+ "stack": true,
1884+ "steppedLine": false,
1885+ "targets": [
1886+ {
1887+ "expr": "ceph_client_io_write_bytes",
1888+ "interval": "$interval",
1889+ "intervalFactor": 1,
1890+ "legendFormat": "Write",
1891+ "refId": "A",
1892+ "step": 60
1893+ },
1894+ {
1895+ "expr": "ceph_client_io_read_bytes",
1896+ "interval": "$interval",
1897+ "intervalFactor": 1,
1898+ "legendFormat": "Read",
1899+ "refId": "B",
1900+ "step": 60
1901+ }
1902+ ],
1903+ "thresholds": [],
1904+ "timeFrom": null,
1905+ "timeShift": null,
1906+ "title": "Throughput",
1907+ "tooltip": {
1908+ "msResolution": false,
1909+ "shared": true,
1910+ "sort": 2,
1911+ "value_type": "individual"
1912+ },
1913+ "type": "graph",
1914+ "xaxis": {
1915+ "buckets": null,
1916+ "mode": "time",
1917+ "name": null,
1918+ "show": true,
1919+ "values": []
1920+ },
1921+ "yaxes": [
1922+ {
1923+ "format": "Bps",
1924+ "label": null,
1925+ "logBase": 1,
1926+ "max": null,
1927+ "min": 0,
1928+ "show": true
1929+ },
1930+ {
1931+ "format": "short",
1932+ "label": null,
1933+ "logBase": 1,
1934+ "max": null,
1935+ "min": 0,
1936+ "show": true
1937+ }
1938+ ]
1939+ }
1940+ ],
1941+ "repeat": null,
1942+ "repeatIteration": null,
1943+ "repeatRowId": null,
1944+ "showTitle": true,
1945+ "title": "CLUSTER",
1946+ "titleSize": "h6"
1947+ },
1948+ {
1949+ "collapse": false,
1950+ "height": "250px",
1951+ "panels": [
1952+ {
1953+ "aliasColors": {},
1954+ "bars": false,
1955+ "dashLength": 10,
1956+ "dashes": false,
1957+ "datasource": "{{ datasource }}",
1958+ "editable": true,
1959+ "error": false,
1960+ "fill": 1,
1961+ "grid": {},
1962+ "id": 18,
1963+ "legend": {
1964+ "alignAsTable": true,
1965+ "avg": true,
1966+ "current": true,
1967+ "max": false,
1968+ "min": false,
1969+ "rightSide": true,
1970+ "show": true,
1971+ "total": false,
1972+ "values": true
1973+ },
1974+ "lines": true,
1975+ "linewidth": 2,
1976+ "links": [],
1977+ "nullPointMode": "connected",
1978+ "percentage": false,
1979+ "pointradius": 5,
1980+ "points": false,
1981+ "renderer": "flot",
1982+ "seriesOverrides": [
1983+ {
1984+ "alias": "/^Total.*$/",
1985+ "stack": false
1986+ }
1987+ ],
1988+ "spaceLength": 10,
1989+ "span": 12,
1990+ "stack": true,
1991+ "steppedLine": false,
1992+ "targets": [
1993+ {
1994+ "expr": "ceph_cluster_objects",
1995+ "interval": "$interval",
1996+ "intervalFactor": 1,
1997+ "legendFormat": "Total",
1998+ "refId": "A",
1999+ "step": 60
2000+ },
2001+ {
2002+ "expr": "ceph_degraded_objects",
2003+ "interval": "$interval",
2004+ "intervalFactor": 1,
2005+ "legendFormat": "Degraded",
2006+ "refId": "B",
2007+ "step": 60
2008+ },
2009+ {
2010+ "expr": "ceph_misplaced_objects",
2011+ "interval": "$interval",
2012+ "intervalFactor": 1,
2013+ "legendFormat": "Misplaced",
2014+ "refId": "C",
2015+ "step": 60
2016+ }
2017+ ],
2018+ "thresholds": [],
2019+ "timeFrom": null,
2020+ "timeShift": null,
2021+ "title": "Objects in the Cluster",
2022+ "tooltip": {
2023+ "msResolution": false,
2024+ "shared": true,
2025+ "sort": 1,
2026+ "value_type": "individual"
2027+ },
2028+ "type": "graph",
2029+ "xaxis": {
2030+ "buckets": null,
2031+ "mode": "time",
2032+ "name": null,
2033+ "show": true,
2034+ "values": []
2035+ },
2036+ "yaxes": [
2037+ {
2038+ "format": "short",
2039+ "label": null,
2040+ "logBase": 1,
2041+ "max": null,
2042+ "min": null,
2043+ "show": true
2044+ },
2045+ {
2046+ "format": "short",
2047+ "label": null,
2048+ "logBase": 1,
2049+ "max": null,
2050+ "min": null,
2051+ "show": true
2052+ }
2053+ ]
2054+ },
2055+ {
2056+ "aliasColors": {},
2057+ "bars": false,
2058+ "dashLength": 10,
2059+ "dashes": false,
2060+ "datasource": "{{ datasource }}",
2061+ "editable": true,
2062+ "error": false,
2063+ "fill": 1,
2064+ "grid": {},
2065+ "id": 19,
2066+ "legend": {
2067+ "alignAsTable": true,
2068+ "avg": true,
2069+ "current": true,
2070+ "max": false,
2071+ "min": false,
2072+ "rightSide": true,
2073+ "show": true,
2074+ "total": false,
2075+ "values": true
2076+ },
2077+ "lines": true,
2078+ "linewidth": 2,
2079+ "links": [],
2080+ "nullPointMode": "connected",
2081+ "percentage": false,
2082+ "pointradius": 5,
2083+ "points": false,
2084+ "renderer": "flot",
2085+ "seriesOverrides": [
2086+ {
2087+ "alias": "/^Total.*$/",
2088+ "stack": false
2089+ }
2090+ ],
2091+ "spaceLength": 10,
2092+ "span": 6,
2093+ "stack": true,
2094+ "steppedLine": false,
2095+ "targets": [
2096+ {
2097+ "expr": "sum(ceph_osd_pgs)",
2098+ "interval": "$interval",
2099+ "intervalFactor": 1,
2100+ "legendFormat": "Total",
2101+ "refId": "A",
2102+ "step": 60
2103+ },
2104+ {
2105+ "expr": "ceph_degraded_pgs",
2106+ "interval": "$interval",
2107+ "intervalFactor": 1,
2108+ "legendFormat": "Degraded",
2109+ "refId": "B",
2110+ "step": 60
2111+ },
2112+ {
2113+ "expr": "ceph_stale_pgs",
2114+ "interval": "$interval",
2115+ "intervalFactor": 1,
2116+ "legendFormat": "Stale",
2117+ "refId": "C",
2118+ "step": 60
2119+ },
2120+ {
2121+ "expr": "ceph_unclean_pgs",
2122+ "interval": "$interval",
2123+ "intervalFactor": 1,
2124+ "legendFormat": "Unclean",
2125+ "refId": "D",
2126+ "step": 60
2127+ },
2128+ {
2129+ "expr": "ceph_undersized_pgs",
2130+ "interval": "$interval",
2131+ "intervalFactor": 1,
2132+ "legendFormat": "Undersized",
2133+ "refId": "E",
2134+ "step": 60
2135+ },
2136+ {
2137+ "expr": "ceph_stuck_degraded_pgs + ceph_stuck_stale_pgs + ceph_stuck_unclean_pgs + ceph_stuck_undersized_pgs",
2138+ "interval": "$interval",
2139+ "intervalFactor": 1,
2140+ "legendFormat": "Stuck",
2141+ "refId": "F",
2142+ "step": 60
2143+ }
2144+ ],
2145+ "thresholds": [],
2146+ "timeFrom": null,
2147+ "timeShift": null,
2148+ "title": "PGs",
2149+ "tooltip": {
2150+ "msResolution": false,
2151+ "shared": true,
2152+ "sort": 1,
2153+ "value_type": "individual"
2154+ },
2155+ "type": "graph",
2156+ "xaxis": {
2157+ "buckets": null,
2158+ "mode": "time",
2159+ "name": null,
2160+ "show": true,
2161+ "values": []
2162+ },
2163+ "yaxes": [
2164+ {
2165+ "format": "short",
2166+ "label": null,
2167+ "logBase": 1,
2168+ "max": null,
2169+ "min": 0,
2170+ "show": true
2171+ },
2172+ {
2173+ "format": "short",
2174+ "label": null,
2175+ "logBase": 1,
2176+ "max": null,
2177+ "min": null,
2178+ "show": true
2179+ }
2180+ ]
2181+ },
2182+ {
2183+ "aliasColors": {},
2184+ "bars": false,
2185+ "dashLength": 10,
2186+ "dashes": false,
2187+ "datasource": "{{ datasource }}",
2188+ "editable": true,
2189+ "error": false,
2190+ "fill": 1,
2191+ "grid": {},
2192+ "id": 20,
2193+ "legend": {
2194+ "alignAsTable": true,
2195+ "avg": true,
2196+ "current": true,
2197+ "max": false,
2198+ "min": false,
2199+ "rightSide": true,
2200+ "show": true,
2201+ "total": false,
2202+ "values": true
2203+ },
2204+ "lines": true,
2205+ "linewidth": 2,
2206+ "links": [],
2207+ "nullPointMode": "connected",
2208+ "percentage": false,
2209+ "pointradius": 5,
2210+ "points": false,
2211+ "renderer": "flot",
2212+ "seriesOverrides": [
2213+ {
2214+ "alias": "/^Total.*$/",
2215+ "stack": false
2216+ }
2217+ ],
2218+ "spaceLength": 10,
2219+ "span": 6,
2220+ "stack": true,
2221+ "steppedLine": false,
2222+ "targets": [
2223+ {
2224+ "expr": "ceph_stuck_degraded_pgs",
2225+ "interval": "$interval",
2226+ "intervalFactor": 1,
2227+ "legendFormat": "Degraded",
2228+ "refId": "F",
2229+ "step": 60
2230+ },
2231+ {
2232+ "expr": "ceph_stuck_stale_pgs",
2233+ "interval": "$interval",
2234+ "intervalFactor": 1,
2235+ "legendFormat": "Stale",
2236+ "refId": "A",
2237+ "step": 60
2238+ },
2239+ {
2240+ "expr": "ceph_stuck_unclean_pgs",
2241+ "interval": "$interval",
2242+ "intervalFactor": 1,
2243+ "legendFormat": "Unclean",
2244+ "refId": "B",
2245+ "step": 60
2246+ },
2247+ {
2248+ "expr": "ceph_stuck_undersized_pgs",
2249+ "interval": "$interval",
2250+ "intervalFactor": 1,
2251+ "legendFormat": "Undersized",
2252+ "refId": "C",
2253+ "step": 60
2254+ }
2255+ ],
2256+ "thresholds": [],
2257+ "timeFrom": null,
2258+ "timeShift": null,
2259+ "title": "Stuck PGs",
2260+ "tooltip": {
2261+ "msResolution": false,
2262+ "shared": true,
2263+ "sort": 1,
2264+ "value_type": "individual"
2265+ },
2266+ "type": "graph",
2267+ "xaxis": {
2268+ "buckets": null,
2269+ "mode": "time",
2270+ "name": null,
2271+ "show": true,
2272+ "values": []
2273+ },
2274+ "yaxes": [
2275+ {
2276+ "format": "short",
2277+ "label": null,
2278+ "logBase": 1,
2279+ "max": null,
2280+ "min": 0,
2281+ "show": true
2282+ },
2283+ {
2284+ "format": "short",
2285+ "label": null,
2286+ "logBase": 1,
2287+ "max": null,
2288+ "min": null,
2289+ "show": true
2290+ }
2291+ ]
2292+ }
2293+ ],
2294+ "repeat": null,
2295+ "repeatIteration": null,
2296+ "repeatRowId": null,
2297+ "showTitle": false,
2298+ "title": "New row",
2299+ "titleSize": "h6"
2300+ },
2301+ {
2302+ "collapse": false,
2303+ "height": "150px",
2304+ "panels": [
2305+ {
2306+ "aliasColors": {},
2307+ "bars": false,
2308+ "dashLength": 10,
2309+ "dashes": false,
2310+ "datasource": "{{ datasource }}",
2311+ "editable": true,
2312+ "error": false,
2313+ "fill": 1,
2314+ "grid": {},
2315+ "id": 15,
2316+ "legend": {
2317+ "avg": false,
2318+ "current": false,
2319+ "max": false,
2320+ "min": false,
2321+ "show": false,
2322+ "total": false,
2323+ "values": false
2324+ },
2325+ "lines": true,
2326+ "linewidth": 2,
2327+ "links": [],
2328+ "nullPointMode": "connected",
2329+ "percentage": false,
2330+ "pointradius": 5,
2331+ "points": false,
2332+ "renderer": "flot",
2333+ "seriesOverrides": [],
2334+ "spaceLength": 10,
2335+ "span": 4,
2336+ "stack": false,
2337+ "steppedLine": false,
2338+ "targets": [
2339+ {
2340+ "expr": "ceph_recovery_io_bytes",
2341+ "interval": "$interval",
2342+ "intervalFactor": 1,
2343+ "legendFormat": "Bytes",
2344+ "refId": "A",
2345+ "step": 60
2346+ }
2347+ ],
2348+ "thresholds": [],
2349+ "timeFrom": null,
2350+ "timeShift": null,
2351+ "title": "Bytes",
2352+ "tooltip": {
2353+ "msResolution": false,
2354+ "shared": true,
2355+ "sort": 0,
2356+ "value_type": "cumulative"
2357+ },
2358+ "type": "graph",
2359+ "xaxis": {
2360+ "buckets": null,
2361+ "mode": "time",
2362+ "name": null,
2363+ "show": true,
2364+ "values": []
2365+ },
2366+ "yaxes": [
2367+ {
2368+ "format": "short",
2369+ "label": null,
2370+ "logBase": 1,
2371+ "max": null,
2372+ "min": 0,
2373+ "show": true
2374+ },
2375+ {
2376+ "format": "short",
2377+ "label": null,
2378+ "logBase": 1,
2379+ "max": null,
2380+ "min": null,
2381+ "show": true
2382+ }
2383+ ]
2384+ },
2385+ {
2386+ "aliasColors": {},
2387+ "bars": false,
2388+ "dashLength": 10,
2389+ "dashes": false,
2390+ "datasource": "{{ datasource }}",
2391+ "editable": true,
2392+ "error": false,
2393+ "fill": 1,
2394+ "grid": {},
2395+ "id": 16,
2396+ "legend": {
2397+ "avg": false,
2398+ "current": false,
2399+ "max": false,
2400+ "min": false,
2401+ "show": false,
2402+ "total": false,
2403+ "values": false
2404+ },
2405+ "lines": true,
2406+ "linewidth": 2,
2407+ "links": [],
2408+ "nullPointMode": "connected",
2409+ "percentage": false,
2410+ "pointradius": 5,
2411+ "points": false,
2412+ "renderer": "flot",
2413+ "seriesOverrides": [
2414+ {
2415+ "alias": "/^.*/",
2416+ "color": "#E0752D"
2417+ }
2418+ ],
2419+ "spaceLength": 10,
2420+ "span": 4,
2421+ "stack": false,
2422+ "steppedLine": false,
2423+ "targets": [
2424+ {
2425+ "expr": "ceph_recovery_io_keys",
2426+ "interval": "$interval",
2427+ "intervalFactor": 1,
2428+ "legendFormat": "Keys",
2429+ "refId": "A",
2430+ "step": 60
2431+ }
2432+ ],
2433+ "thresholds": [],
2434+ "timeFrom": null,
2435+ "timeShift": null,
2436+ "title": "Keys",
2437+ "tooltip": {
2438+ "msResolution": false,
2439+ "shared": true,
2440+ "sort": 0,
2441+ "value_type": "cumulative"
2442+ },
2443+ "type": "graph",
2444+ "xaxis": {
2445+ "buckets": null,
2446+ "mode": "time",
2447+ "name": null,
2448+ "show": true,
2449+ "values": []
2450+ },
2451+ "yaxes": [
2452+ {
2453+ "format": "short",
2454+ "label": null,
2455+ "logBase": 1,
2456+ "max": null,
2457+ "min": 0,
2458+ "show": true
2459+ },
2460+ {
2461+ "format": "short",
2462+ "label": null,
2463+ "logBase": 1,
2464+ "max": null,
2465+ "min": null,
2466+ "show": true
2467+ }
2468+ ]
2469+ },
2470+ {
2471+ "aliasColors": {},
2472+ "bars": false,
2473+ "dashLength": 10,
2474+ "dashes": false,
2475+ "datasource": "{{ datasource }}",
2476+ "editable": true,
2477+ "error": false,
2478+ "fill": 1,
2479+ "grid": {},
2480+ "id": 17,
2481+ "legend": {
2482+ "avg": false,
2483+ "current": false,
2484+ "max": false,
2485+ "min": false,
2486+ "show": false,
2487+ "total": false,
2488+ "values": false
2489+ },
2490+ "lines": true,
2491+ "linewidth": 2,
2492+ "links": [],
2493+ "nullPointMode": "connected",
2494+ "percentage": false,
2495+ "pointradius": 5,
2496+ "points": false,
2497+ "renderer": "flot",
2498+ "seriesOverrides": [
2499+ {
2500+ "alias": "/^.*$/",
2501+ "color": "#890F02"
2502+ }
2503+ ],
2504+ "spaceLength": 10,
2505+ "span": 4,
2506+ "stack": false,
2507+ "steppedLine": false,
2508+ "targets": [
2509+ {
2510+ "expr": "ceph_recovery_io_objects",
2511+ "interval": "$interval",
2512+ "intervalFactor": 1,
2513+ "legendFormat": "Objects",
2514+ "refId": "A",
2515+ "step": 60
2516+ }
2517+ ],
2518+ "thresholds": [],
2519+ "timeFrom": null,
2520+ "timeShift": null,
2521+ "title": "Objects",
2522+ "tooltip": {
2523+ "msResolution": false,
2524+ "shared": true,
2525+ "sort": 0,
2526+ "value_type": "cumulative"
2527+ },
2528+ "type": "graph",
2529+ "xaxis": {
2530+ "buckets": null,
2531+ "mode": "time",
2532+ "name": null,
2533+ "show": true,
2534+ "values": []
2535+ },
2536+ "yaxes": [
2537+ {
2538+ "format": "short",
2539+ "label": null,
2540+ "logBase": 1,
2541+ "max": null,
2542+ "min": 0,
2543+ "show": true
2544+ },
2545+ {
2546+ "format": "short",
2547+ "label": null,
2548+ "logBase": 1,
2549+ "max": null,
2550+ "min": null,
2551+ "show": true
2552+ }
2553+ ]
2554+ }
2555+ ],
2556+ "repeat": null,
2557+ "repeatIteration": null,
2558+ "repeatRowId": null,
2559+ "showTitle": true,
2560+ "title": "Recovery",
2561+ "titleSize": "h6"
2562+ }
2563+ ],
2564+ "schemaVersion": 14,
2565+ "style": "dark",
2566+ "tags": [
2567+ "ceph",
2568+ "cluster"
2569+ ],
2570+ "templating": {
2571+ "list": [
2572+ {
2573+ "auto": true,
2574+ "auto_count": 10,
2575+ "auto_min": "1m",
2576+ "current": {
2577+ "text": "1m",
2578+ "value": "1m"
2579+ },
2580+ "datasource": null,
2581+ "hide": 0,
2582+ "includeAll": false,
2583+ "label": "Interval",
2584+ "multi": false,
2585+ "name": "interval",
2586+ "options": [
2587+ {
2588+ "selected": false,
2589+ "text": "auto",
2590+ "value": "$__auto_interval"
2591+ },
2592+ {
2593+ "selected": true,
2594+ "text": "1m",
2595+ "value": "1m"
2596+ },
2597+ {
2598+ "selected": false,
2599+ "text": "10m",
2600+ "value": "10m"
2601+ },
2602+ {
2603+ "selected": false,
2604+ "text": "30m",
2605+ "value": "30m"
2606+ },
2607+ {
2608+ "selected": false,
2609+ "text": "1h",
2610+ "value": "1h"
2611+ },
2612+ {
2613+ "selected": false,
2614+ "text": "6h",
2615+ "value": "6h"
2616+ },
2617+ {
2618+ "selected": false,
2619+ "text": "12h",
2620+ "value": "12h"
2621+ },
2622+ {
2623+ "selected": false,
2624+ "text": "1d",
2625+ "value": "1d"
2626+ },
2627+ {
2628+ "selected": false,
2629+ "text": "7d",
2630+ "value": "7d"
2631+ },
2632+ {
2633+ "selected": false,
2634+ "text": "14d",
2635+ "value": "14d"
2636+ },
2637+ {
2638+ "selected": false,
2639+ "text": "30d",
2640+ "value": "30d"
2641+ }
2642+ ],
2643+ "query": "1m,10m,30m,1h,6h,12h,1d,7d,14d,30d",
2644+ "refresh": 2,
2645+ "type": "interval"
2646+ }
2647+ ]
2648+ },
2649+ "time": {
2650+ "from": "now-1h",
2651+ "to": "now"
2652+ },
2653+ "timepicker": {
2654+ "refresh_intervals": [
2655+ "5s",
2656+ "10s",
2657+ "30s",
2658+ "1m",
2659+ "5m",
2660+ "15m",
2661+ "30m",
2662+ "1h",
2663+ "2h",
2664+ "1d"
2665+ ],
2666+ "time_options": [
2667+ "5m",
2668+ "15m",
2669+ "1h",
2670+ "6h",
2671+ "12h",
2672+ "24h",
2673+ "2d",
2674+ "7d",
2675+ "30d"
2676+ ]
2677+ },
2678+ "timezone": "utc",
2679+ "title": "Ceph - Cluster",
2680+ "version": 1
2681+},
2682+"overwrite": true
2683+}
2684diff --git a/templates/dashboards/prometheus/CephOSD.json.j2 b/templates/dashboards/prometheus/CephOSD.json.j2
2685new file mode 100644
2686index 0000000..0ede261
2687--- /dev/null
2688+++ b/templates/dashboards/prometheus/CephOSD.json.j2
2689@@ -0,0 +1,990 @@
2690+{
2691+"dashboard":
2692+{
2693+ "__inputs": [
2694+ {
2695+ "name": "{{ datasource }}",
2696+ "label": "prometheus - Juju generated source",
2697+ "description": "",
2698+ "type": "datasource",
2699+ "pluginId": "prometheus",
2700+ "pluginName": "Prometheus"
2701+ }
2702+ ],
2703+ "__requires": [
2704+ {
2705+ "type": "grafana",
2706+ "id": "grafana",
2707+ "name": "Grafana",
2708+ "version": "4.6.2"
2709+ },
2710+ {
2711+ "type": "panel",
2712+ "id": "graph",
2713+ "name": "Graph",
2714+ "version": ""
2715+ },
2716+ {
2717+ "type": "datasource",
2718+ "id": "prometheus",
2719+ "name": "Prometheus",
2720+ "version": "1.0.0"
2721+ },
2722+ {
2723+ "type": "panel",
2724+ "id": "singlestat",
2725+ "name": "Singlestat",
2726+ "version": ""
2727+ }
2728+ ],
2729+ "annotations": {
2730+ "list": [
2731+ {
2732+ "builtIn": 1,
2733+ "datasource": "-- Grafana --",
2734+ "enable": true,
2735+ "hide": true,
2736+ "iconColor": "rgba(0, 211, 255, 1)",
2737+ "name": "Annotations & Alerts",
2738+ "type": "dashboard"
2739+ }
2740+ ]
2741+ },
2742+ "description": "CEPH OSD Status.",
2743+ "editable": true,
2744+ "gnetId": 923,
2745+ "graphTooltip": 0,
2746+ "hideControls": false,
2747+ "id": null,
2748+ "links": [],
2749+ "refresh": "15m",
2750+ "rows": [
2751+ {
2752+ "collapse": false,
2753+ "height": "100px",
2754+ "panels": [
2755+ {
2756+ "cacheTimeout": null,
2757+ "colorBackground": true,
2758+ "colorValue": false,
2759+ "colors": [
2760+ "rgba(245, 54, 54, 0.9)",
2761+ "rgba(237, 40, 40, 0.89)",
2762+ "rgba(50, 172, 45, 0.97)"
2763+ ],
2764+ "datasource": "{{ datasource }}",
2765+ "editable": true,
2766+ "error": false,
2767+ "format": "none",
2768+ "gauge": {
2769+ "maxValue": 100,
2770+ "minValue": 0,
2771+ "show": false,
2772+ "thresholdLabels": false,
2773+ "thresholdMarkers": true
2774+ },
2775+ "id": 6,
2776+ "interval": null,
2777+ "links": [],
2778+ "mappingType": 2,
2779+ "mappingTypes": [
2780+ {
2781+ "name": "value to text",
2782+ "value": 1
2783+ },
2784+ {
2785+ "name": "range to text",
2786+ "value": 2
2787+ }
2788+ ],
2789+ "maxDataPoints": 100,
2790+ "nullPointMode": "connected",
2791+ "nullText": null,
2792+ "postfix": "",
2793+ "postfixFontSize": "50%",
2794+ "prefix": "",
2795+ "prefixFontSize": "50%",
2796+ "rangeMaps": [
2797+ {
2798+ "from": "null",
2799+ "text": "N/A",
2800+ "to": "null"
2801+ },
2802+ {
2803+ "from": "0",
2804+ "text": "DOWN",
2805+ "to": "0.99"
2806+ },
2807+ {
2808+ "from": "0.99",
2809+ "text": "UP",
2810+ "to": "1"
2811+ }
2812+ ],
2813+ "span": 1,
2814+ "sparkline": {
2815+ "fillColor": "rgba(31, 118, 189, 0.18)",
2816+ "full": false,
2817+ "lineColor": "rgb(31, 120, 193)",
2818+ "show": false
2819+ },
2820+ "tableColumn": "",
2821+ "targets": [
2822+ {
2823+ "expr": "ceph_osd_up{osd=\"$osd\"}",
2824+ "interval": "$interval",
2825+ "intervalFactor": 1,
2826+ "refId": "A",
2827+ "step": 60
2828+ }
2829+ ],
2830+ "thresholds": "0,1",
2831+ "timeFrom": null,
2832+ "title": "Status",
2833+ "transparent": false,
2834+ "type": "singlestat",
2835+ "valueFontSize": "80%",
2836+ "valueMaps": [
2837+ {
2838+ "op": "=",
2839+ "text": "DOWN",
2840+ "value": "0"
2841+ },
2842+ {
2843+ "op": "=",
2844+ "text": "UP",
2845+ "value": "1"
2846+ },
2847+ {
2848+ "op": "=",
2849+ "text": "N/A",
2850+ "value": "null"
2851+ }
2852+ ],
2853+ "valueName": "current"
2854+ },
2855+ {
2856+ "cacheTimeout": null,
2857+ "colorBackground": true,
2858+ "colorValue": false,
2859+ "colors": [
2860+ "rgba(245, 54, 54, 0.9)",
2861+ "rgba(237, 40, 40, 0.89)",
2862+ "rgba(50, 172, 45, 0.97)"
2863+ ],
2864+ "datasource": "{{ datasource }}",
2865+ "editable": true,
2866+ "error": false,
2867+ "format": "none",
2868+ "gauge": {
2869+ "maxValue": 100,
2870+ "minValue": 0,
2871+ "show": false,
2872+ "thresholdLabels": false,
2873+ "thresholdMarkers": true
2874+ },
2875+ "id": 8,
2876+ "interval": null,
2877+ "links": [],
2878+ "mappingType": 2,
2879+ "mappingTypes": [
2880+ {
2881+ "name": "value to text",
2882+ "value": 1
2883+ },
2884+ {
2885+ "name": "range to text",
2886+ "value": 2
2887+ }
2888+ ],
2889+ "maxDataPoints": 100,
2890+ "nullPointMode": "connected",
2891+ "nullText": null,
2892+ "postfix": "",
2893+ "postfixFontSize": "50%",
2894+ "prefix": "",
2895+ "prefixFontSize": "50%",
2896+ "rangeMaps": [
2897+ {
2898+ "from": "null",
2899+ "text": "N/A",
2900+ "to": "null"
2901+ },
2902+ {
2903+ "from": "0",
2904+ "text": "OUT",
2905+ "to": "0.99"
2906+ },
2907+ {
2908+ "from": "0.99",
2909+ "text": "IN",
2910+ "to": "1"
2911+ }
2912+ ],
2913+ "span": 1,
2914+ "sparkline": {
2915+ "fillColor": "rgba(31, 118, 189, 0.18)",
2916+ "full": false,
2917+ "lineColor": "rgb(31, 120, 193)",
2918+ "show": false
2919+ },
2920+ "tableColumn": "",
2921+ "targets": [
2922+ {
2923+ "expr": "ceph_osd_in{osd=\"$osd\"}",
2924+ "interval": "$interval",
2925+ "intervalFactor": 1,
2926+ "refId": "A",
2927+ "step": 60
2928+ }
2929+ ],
2930+ "thresholds": "0,1",
2931+ "timeFrom": null,
2932+ "title": "Available",
2933+ "transparent": false,
2934+ "type": "singlestat",
2935+ "valueFontSize": "80%",
2936+ "valueMaps": [
2937+ {
2938+ "op": "=",
2939+ "text": "DOWN",
2940+ "value": "0"
2941+ },
2942+ {
2943+ "op": "=",
2944+ "text": "UP",
2945+ "value": "1"
2946+ },
2947+ {
2948+ "op": "=",
2949+ "text": "N/A",
2950+ "value": "null"
2951+ }
2952+ ],
2953+ "valueName": "current"
2954+ },
2955+ {
2956+ "cacheTimeout": null,
2957+ "colorBackground": false,
2958+ "colorValue": false,
2959+ "colors": [
2960+ "rgba(245, 54, 54, 0.9)",
2961+ "rgba(237, 129, 40, 0.89)",
2962+ "rgba(50, 172, 45, 0.97)"
2963+ ],
2964+ "datasource": "{{ datasource }}",
2965+ "editable": true,
2966+ "error": false,
2967+ "format": "none",
2968+ "gauge": {
2969+ "maxValue": 100,
2970+ "minValue": 0,
2971+ "show": false,
2972+ "thresholdLabels": false,
2973+ "thresholdMarkers": true
2974+ },
2975+ "id": 10,
2976+ "interval": null,
2977+ "links": [],
2978+ "mappingType": 2,
2979+ "mappingTypes": [
2980+ {
2981+ "name": "value to text",
2982+ "value": 1
2983+ },
2984+ {
2985+ "name": "range to text",
2986+ "value": 2
2987+ }
2988+ ],
2989+ "maxDataPoints": 100,
2990+ "nullPointMode": "connected",
2991+ "nullText": null,
2992+ "postfix": "",
2993+ "postfixFontSize": "50%",
2994+ "prefix": "",
2995+ "prefixFontSize": "50%",
2996+ "rangeMaps": [
2997+ {
2998+ "from": "null",
2999+ "text": "N/A",
3000+ "to": "null"
3001+ }
3002+ ],
3003+ "span": 1,
3004+ "sparkline": {
3005+ "fillColor": "rgba(31, 118, 189, 0.18)",
3006+ "full": false,
3007+ "lineColor": "rgb(31, 120, 193)",
3008+ "show": false
3009+ },
3010+ "tableColumn": "",
3011+ "targets": [
3012+ {
3013+ "expr": "ceph_osds",
3014+ "interval": "$interval",
3015+ "intervalFactor": 1,
3016+ "refId": "A",
3017+ "step": 60
3018+ }
3019+ ],
3020+ "thresholds": "0,1",
3021+ "timeFrom": null,
3022+ "title": "Total OSDs",
3023+ "transparent": false,
3024+ "type": "singlestat",
3025+ "valueFontSize": "80%",
3026+ "valueMaps": [
3027+ {
3028+ "op": "=",
3029+ "text": "DOWN",
3030+ "value": "0"
3031+ },
3032+ {
3033+ "op": "=",
3034+ "text": "UP",
3035+ "value": "1"
3036+ },
3037+ {
3038+ "op": "=",
3039+ "text": "N/A",
3040+ "value": "null"
3041+ }
3042+ ],
3043+ "valueName": "current"
3044+ }
3045+ ],
3046+ "repeat": null,
3047+ "repeatIteration": null,
3048+ "repeatRowId": null,
3049+ "showTitle": false,
3050+ "title": "New row",
3051+ "titleSize": "h6"
3052+ },
3053+ {
3054+ "collapse": false,
3055+ "height": "250px",
3056+ "panels": [
3057+ {
3058+ "aliasColors": {},
3059+ "bars": false,
3060+ "dashLength": 10,
3061+ "dashes": false,
3062+ "datasource": "{{ datasource }}",
3063+ "decimals": 2,
3064+ "editable": true,
3065+ "error": false,
3066+ "fill": 1,
3067+ "grid": {},
3068+ "id": 5,
3069+ "interval": "$interval",
3070+ "legend": {
3071+ "alignAsTable": true,
3072+ "avg": true,
3073+ "current": true,
3074+ "max": true,
3075+ "min": true,
3076+ "show": true,
3077+ "total": false,
3078+ "values": true
3079+ },
3080+ "lines": true,
3081+ "linewidth": 2,
3082+ "links": [],
3083+ "nullPointMode": "connected",
3084+ "percentage": false,
3085+ "pointradius": 5,
3086+ "points": false,
3087+ "renderer": "flot",
3088+ "seriesOverrides": [
3089+ {
3090+ "alias": "/^Average.*/",
3091+ "fill": 0,
3092+ "stack": false
3093+ }
3094+ ],
3095+ "spaceLength": 10,
3096+ "span": 10,
3097+ "stack": true,
3098+ "steppedLine": false,
3099+ "targets": [
3100+ {
3101+ "expr": "ceph_osd_pgs{osd=~\"$osd\"}",
3102+ "interval": "$interval",
3103+ "intervalFactor": 1,
3104+ "legendFormat": "Number of PGs - {{ osd }}",
3105+ "refId": "A",
3106+ "step": 60
3107+ },
3108+ {
3109+ "expr": "avg(ceph_osd_pgs)",
3110+ "interval": "$interval",
3111+ "intervalFactor": 1,
3112+ "legendFormat": "Average Number of PGs in the Cluster",
3113+ "refId": "B",
3114+ "step": 60
3115+ }
3116+ ],
3117+ "thresholds": [
3118+ {
3119+ "colorMode": "custom",
3120+ "line": true,
3121+ "lineColor": "rgba(216, 200, 27, 0.27)",
3122+ "op": "gt",
3123+ "value": 250
3124+ },
3125+ {
3126+ "colorMode": "custom",
3127+ "line": true,
3128+ "lineColor": "rgba(234, 112, 112, 0.22)",
3129+ "op": "gt",
3130+ "value": 300
3131+ }
3132+ ],
3133+ "timeFrom": null,
3134+ "timeShift": null,
3135+ "title": "PGs",
3136+ "tooltip": {
3137+ "msResolution": false,
3138+ "shared": true,
3139+ "sort": 0,
3140+ "value_type": "individual"
3141+ },
3142+ "type": "graph",
3143+ "xaxis": {
3144+ "buckets": null,
3145+ "mode": "time",
3146+ "name": null,
3147+ "show": true,
3148+ "values": []
3149+ },
3150+ "yaxes": [
3151+ {
3152+ "format": "short",
3153+ "label": null,
3154+ "logBase": 1,
3155+ "max": null,
3156+ "min": 0,
3157+ "show": true
3158+ },
3159+ {
3160+ "format": "short",
3161+ "label": null,
3162+ "logBase": 1,
3163+ "max": null,
3164+ "min": 0,
3165+ "show": true
3166+ }
3167+ ]
3168+ },
3169+ {
3170+ "cacheTimeout": null,
3171+ "colorBackground": false,
3172+ "colorValue": true,
3173+ "colors": [
3174+ "rgba(50, 172, 45, 0.97)",
3175+ "rgba(237, 129, 40, 0.89)",
3176+ "rgba(245, 54, 54, 0.9)"
3177+ ],
3178+ "datasource": "{{ datasource }}",
3179+ "editable": true,
3180+ "error": false,
3181+ "format": "percent",
3182+ "gauge": {
3183+ "maxValue": 100,
3184+ "minValue": 0,
3185+ "show": true,
3186+ "thresholdLabels": false,
3187+ "thresholdMarkers": true
3188+ },
3189+ "id": 7,
3190+ "interval": null,
3191+ "links": [],
3192+ "mappingType": 1,
3193+ "mappingTypes": [
3194+ {
3195+ "name": "value to text",
3196+ "value": 1
3197+ },
3198+ {
3199+ "name": "range to text",
3200+ "value": 2
3201+ }
3202+ ],
3203+ "maxDataPoints": 100,
3204+ "nullPointMode": "connected",
3205+ "nullText": null,
3206+ "postfix": "",
3207+ "postfixFontSize": "50%",
3208+ "prefix": "",
3209+ "prefixFontSize": "50%",
3210+ "rangeMaps": [
3211+ {
3212+ "from": "null",
3213+ "text": "N/A",
3214+ "to": "null"
3215+ }
3216+ ],
3217+ "span": 2,
3218+ "sparkline": {
3219+ "fillColor": "rgba(31, 118, 189, 0.18)",
3220+ "full": false,
3221+ "lineColor": "rgb(31, 120, 193)",
3222+ "show": true
3223+ },
3224+ "tableColumn": "",
3225+ "targets": [
3226+ {
3227+ "expr": "ceph_osd_utilization{osd=\"$osd\"}",
3228+ "interval": "$interval",
3229+ "intervalFactor": 1,
3230+ "legendFormat": "",
3231+ "refId": "A",
3232+ "step": 60
3233+ }
3234+ ],
3235+ "thresholds": "60,80",
3236+ "timeFrom": null,
3237+ "title": "Utilization",
3238+ "transparent": false,
3239+ "type": "singlestat",
3240+ "valueFontSize": "80%",
3241+ "valueMaps": [
3242+ {
3243+ "op": "=",
3244+ "text": "N/A",
3245+ "value": "null"
3246+ }
3247+ ],
3248+ "valueName": "current"
3249+ }
3250+ ],
3251+ "repeat": null,
3252+ "repeatIteration": null,
3253+ "repeatRowId": null,
3254+ "showTitle": true,
3255+ "title": "OSD: $osd",
3256+ "titleSize": "h6"
3257+ },
3258+ {
3259+ "collapse": false,
3260+ "height": "250px",
3261+ "panels": [
3262+ {
3263+ "aliasColors": {},
3264+ "bars": false,
3265+ "dashLength": 10,
3266+ "dashes": false,
3267+ "datasource": "{{ datasource }}",
3268+ "decimals": 2,
3269+ "editable": true,
3270+ "error": false,
3271+ "fill": 1,
3272+ "grid": {},
3273+ "id": 4,
3274+ "interval": "$interval",
3275+ "legend": {
3276+ "alignAsTable": true,
3277+ "avg": true,
3278+ "current": true,
3279+ "max": true,
3280+ "min": true,
3281+ "show": true,
3282+ "total": false,
3283+ "values": true
3284+ },
3285+ "lines": false,
3286+ "linewidth": 2,
3287+ "links": [],
3288+ "nullPointMode": "connected",
3289+ "percentage": false,
3290+ "pointradius": 2,
3291+ "points": true,
3292+ "renderer": "flot",
3293+ "seriesOverrides": [],
3294+ "spaceLength": 10,
3295+ "span": 4,
3296+ "stack": false,
3297+ "steppedLine": false,
3298+ "targets": [
3299+ {
3300+ "expr": "ceph_osd_perf_apply_latency_seconds{osd=~\"$osd\"}",
3301+ "interval": "$interval",
3302+ "intervalFactor": 1,
3303+ "legendFormat": "Apply Latency (s) - {{ osd }}",
3304+ "refId": "A",
3305+ "step": 60
3306+ },
3307+ {
3308+ "expr": "ceph_osd_perf_commit_latency_seconds{osd=~\"$osd\"}",
3309+ "interval": "$interval",
3310+ "intervalFactor": 1,
3311+ "legendFormat": "Commit Latency (s) - {{ osd }}",
3312+ "refId": "B",
3313+ "step": 60
3314+ }
3315+ ],
3316+ "thresholds": [],
3317+ "timeFrom": null,
3318+ "timeShift": null,
3319+ "title": "Latency",
3320+ "tooltip": {
3321+ "msResolution": false,
3322+ "shared": true,
3323+ "sort": 0,
3324+ "value_type": "individual"
3325+ },
3326+ "type": "graph",
3327+ "xaxis": {
3328+ "buckets": null,
3329+ "mode": "time",
3330+ "name": null,
3331+ "show": true,
3332+ "values": []
3333+ },
3334+ "yaxes": [
3335+ {
3336+ "format": "s",
3337+ "label": null,
3338+ "logBase": 1,
3339+ "max": null,
3340+ "min": 0,
3341+ "show": true
3342+ },
3343+ {
3344+ "format": "s",
3345+ "label": null,
3346+ "logBase": 1,
3347+ "max": null,
3348+ "min": 0,
3349+ "show": true
3350+ }
3351+ ]
3352+ },
3353+ {
3354+ "aliasColors": {},
3355+ "bars": false,
3356+ "dashLength": 10,
3357+ "dashes": false,
3358+ "datasource": "{{ datasource }}",
3359+ "decimals": 2,
3360+ "editable": true,
3361+ "error": false,
3362+ "fill": 1,
3363+ "grid": {},
3364+ "id": 2,
3365+ "interval": "$interval",
3366+ "legend": {
3367+ "alignAsTable": true,
3368+ "avg": true,
3369+ "current": true,
3370+ "max": true,
3371+ "min": true,
3372+ "show": true,
3373+ "total": false,
3374+ "values": true
3375+ },
3376+ "lines": true,
3377+ "linewidth": 2,
3378+ "links": [],
3379+ "nullPointMode": "connected",
3380+ "percentage": false,
3381+ "pointradius": 5,
3382+ "points": false,
3383+ "renderer": "flot",
3384+ "seriesOverrides": [],
3385+ "spaceLength": 10,
3386+ "span": 4,
3387+ "stack": true,
3388+ "steppedLine": false,
3389+ "targets": [
3390+ {
3391+ "expr": "ceph_osd_avail_bytes{osd=~\"$osd\"}",
3392+ "hide": false,
3393+ "interval": "$interval",
3394+ "intervalFactor": 1,
3395+ "legendFormat": "Available - {{ osd }}",
3396+ "metric": "ceph_osd_avail_bytes",
3397+ "refId": "A",
3398+ "step": 60
3399+ },
3400+ {
3401+ "expr": "ceph_osd_used_bytes{osd=~\"$osd\"}",
3402+ "interval": "$interval",
3403+ "intervalFactor": 1,
3404+ "legendFormat": "Used - {{ osd }}",
3405+ "metric": "ceph_osd_avail_bytes",
3406+ "refId": "B",
3407+ "step": 60
3408+ }
3409+ ],
3410+ "thresholds": [],
3411+ "timeFrom": null,
3412+ "timeShift": null,
3413+ "title": "OSD Storage",
3414+ "tooltip": {
3415+ "msResolution": false,
3416+ "shared": true,
3417+ "sort": 0,
3418+ "value_type": "individual"
3419+ },
3420+ "type": "graph",
3421+ "xaxis": {
3422+ "buckets": null,
3423+ "mode": "time",
3424+ "name": null,
3425+ "show": true,
3426+ "values": []
3427+ },
3428+ "yaxes": [
3429+ {
3430+ "format": "bytes",
3431+ "label": null,
3432+ "logBase": 1,
3433+ "max": null,
3434+ "min": 0,
3435+ "show": true
3436+ },
3437+ {
3438+ "format": "short",
3439+ "label": null,
3440+ "logBase": 1,
3441+ "max": null,
3442+ "min": 0,
3443+ "show": true
3444+ }
3445+ ]
3446+ },
3447+ {
3448+ "aliasColors": {},
3449+ "bars": false,
3450+ "dashLength": 10,
3451+ "dashes": false,
3452+ "datasource": "{{ datasource }}",
3453+ "decimals": 5,
3454+ "editable": true,
3455+ "error": false,
3456+ "fill": 1,
3457+ "grid": {},
3458+ "id": 9,
3459+ "interval": "$interval",
3460+ "legend": {
3461+ "alignAsTable": true,
3462+ "avg": true,
3463+ "current": true,
3464+ "max": true,
3465+ "min": true,
3466+ "show": true,
3467+ "total": false,
3468+ "values": true
3469+ },
3470+ "lines": false,
3471+ "linewidth": 2,
3472+ "links": [],
3473+ "nullPointMode": "connected",
3474+ "percentage": false,
3475+ "pointradius": 2,
3476+ "points": true,
3477+ "renderer": "flot",
3478+ "seriesOverrides": [],
3479+ "spaceLength": 10,
3480+ "span": 4,
3481+ "stack": false,
3482+ "steppedLine": false,
3483+ "targets": [
3484+ {
3485+ "expr": "ceph_osd_variance{osd=~\"$osd\"}",
3486+ "interval": "$interval",
3487+ "intervalFactor": 1,
3488+ "legendFormat": "Available - {{ osd }}",
3489+ "metric": "ceph_osd_avail_bytes",
3490+ "refId": "A",
3491+ "step": 60
3492+ }
3493+ ],
3494+ "thresholds": [],
3495+ "timeFrom": null,
3496+ "timeShift": null,
3497+ "title": "Utilization Variance",
3498+ "tooltip": {
3499+ "msResolution": false,
3500+ "shared": true,
3501+ "sort": 0,
3502+ "value_type": "cumulative"
3503+ },
3504+ "type": "graph",
3505+ "xaxis": {
3506+ "buckets": null,
3507+ "mode": "time",
3508+ "name": null,
3509+ "show": true,
3510+ "values": []
3511+ },
3512+ "yaxes": [
3513+ {
3514+ "format": "none",
3515+ "label": null,
3516+ "logBase": 1,
3517+ "max": null,
3518+ "min": null,
3519+ "show": true
3520+ },
3521+ {
3522+ "format": "none",
3523+ "label": null,
3524+ "logBase": 1,
3525+ "max": null,
3526+ "min": null,
3527+ "show": true
3528+ }
3529+ ]
3530+ }
3531+ ],
3532+ "repeat": null,
3533+ "repeatIteration": null,
3534+ "repeatRowId": null,
3535+ "showTitle": false,
3536+ "title": "New row",
3537+ "titleSize": "h6"
3538+ }
3539+ ],
3540+ "schemaVersion": 14,
3541+ "style": "dark",
3542+ "tags": [
3543+ "ceph",
3544+ "osd"
3545+ ],
3546+ "templating": {
3547+ "list": [
3548+ {
3549+ "auto": true,
3550+ "auto_count": 10,
3551+ "auto_min": "1m",
3552+ "current": {
3553+ "text": "1m",
3554+ "value": "1m"
3555+ },
3556+ "datasource": null,
3557+ "hide": 0,
3558+ "includeAll": false,
3559+ "label": "Interval",
3560+ "multi": false,
3561+ "name": "interval",
3562+ "options": [
3563+ {
3564+ "selected": false,
3565+ "text": "auto",
3566+ "value": "$__auto_interval"
3567+ },
3568+ {
3569+ "selected": true,
3570+ "text": "1m",
3571+ "value": "1m"
3572+ },
3573+ {
3574+ "selected": false,
3575+ "text": "10m",
3576+ "value": "10m"
3577+ },
3578+ {
3579+ "selected": false,
3580+ "text": "30m",
3581+ "value": "30m"
3582+ },
3583+ {
3584+ "selected": false,
3585+ "text": "1h",
3586+ "value": "1h"
3587+ },
3588+ {
3589+ "selected": false,
3590+ "text": "6h",
3591+ "value": "6h"
3592+ },
3593+ {
3594+ "selected": false,
3595+ "text": "12h",
3596+ "value": "12h"
3597+ },
3598+ {
3599+ "selected": false,
3600+ "text": "1d",
3601+ "value": "1d"
3602+ },
3603+ {
3604+ "selected": false,
3605+ "text": "7d",
3606+ "value": "7d"
3607+ },
3608+ {
3609+ "selected": false,
3610+ "text": "14d",
3611+ "value": "14d"
3612+ },
3613+ {
3614+ "selected": false,
3615+ "text": "30d",
3616+ "value": "30d"
3617+ }
3618+ ],
3619+ "query": "1m,10m,30m,1h,6h,12h,1d,7d,14d,30d",
3620+ "refresh": 2,
3621+ "type": "interval"
3622+ },
3623+ {
3624+ "allValue": null,
3625+ "current": {},
3626+ "datasource": "{{ datasource }}",
3627+ "hide": 0,
3628+ "includeAll": false,
3629+ "label": "OSD",
3630+ "multi": false,
3631+ "name": "osd",
3632+ "options": [],
3633+ "query": "label_values(ceph_osd_up, osd)",
3634+ "refresh": 1,
3635+ "regex": "",
3636+ "sort": 0,
3637+ "tagValuesQuery": "",
3638+ "tags": [],
3639+ "tagsQuery": "",
3640+ "type": "query",
3641+ "useTags": false
3642+ }
3643+ ]
3644+ },
3645+ "time": {
3646+ "from": "now-1h",
3647+ "to": "now"
3648+ },
3649+ "timepicker": {
3650+ "refresh_intervals": [
3651+ "5s",
3652+ "10s",
3653+ "30s",
3654+ "1m",
3655+ "5m",
3656+ "15m",
3657+ "30m",
3658+ "1h",
3659+ "2h",
3660+ "1d"
3661+ ],
3662+ "time_options": [
3663+ "5m",
3664+ "15m",
3665+ "1h",
3666+ "6h",
3667+ "12h",
3668+ "24h",
3669+ "2d",
3670+ "7d",
3671+ "30d"
3672+ ]
3673+ },
3674+ "timezone": "utc",
3675+ "title": "Ceph - OSD",
3676+ "version": 1
3677+},
3678+"overwrite": true
3679+}
3680diff --git a/templates/dashboards/prometheus/CephPools.json.j2 b/templates/dashboards/prometheus/CephPools.json.j2
3681new file mode 100644
3682index 0000000..24afd93
3683--- /dev/null
3684+++ b/templates/dashboards/prometheus/CephPools.json.j2
3685@@ -0,0 +1,702 @@
3686+{
3687+"dashboard":
3688+{
3689+ "__inputs": [
3690+ {
3691+ "name": "{{ datasource }}",
3692+ "label": "prometheus - Juju generated source",
3693+ "description": "",
3694+ "type": "datasource",
3695+ "pluginId": "prometheus",
3696+ "pluginName": "Prometheus"
3697+ }
3698+ ],
3699+ "__requires": [
3700+ {
3701+ "type": "grafana",
3702+ "id": "grafana",
3703+ "name": "Grafana",
3704+ "version": "4.6.2"
3705+ },
3706+ {
3707+ "type": "panel",
3708+ "id": "graph",
3709+ "name": "Graph",
3710+ "version": ""
3711+ },
3712+ {
3713+ "type": "datasource",
3714+ "id": "prometheus",
3715+ "name": "Prometheus",
3716+ "version": "1.0.0"
3717+ },
3718+ {
3719+ "type": "panel",
3720+ "id": "singlestat",
3721+ "name": "Singlestat",
3722+ "version": ""
3723+ }
3724+ ],
3725+ "annotations": {
3726+ "list": [
3727+ {
3728+ "builtIn": 1,
3729+ "datasource": "-- Grafana --",
3730+ "enable": true,
3731+ "hide": true,
3732+ "iconColor": "rgba(0, 211, 255, 1)",
3733+ "name": "Annotations & Alerts",
3734+ "type": "dashboard"
3735+ }
3736+ ]
3737+ },
3738+ "description": "Ceph Pools dashboard.",
3739+ "editable": true,
3740+ "gnetId": 926,
3741+ "graphTooltip": 0,
3742+ "hideControls": false,
3743+ "id": null,
3744+ "links": [],
3745+ "refresh": "1m",
3746+ "rows": [
3747+ {
3748+ "collapse": false,
3749+ "height": "250px",
3750+ "panels": [
3751+ {
3752+ "aliasColors": {},
3753+ "bars": false,
3754+ "dashLength": 10,
3755+ "dashes": false,
3756+ "datasource": "{{ datasource }}",
3757+ "decimals": 2,
3758+ "editable": true,
3759+ "error": false,
3760+ "fill": 4,
3761+ "grid": {},
3762+ "height": "",
3763+ "id": 2,
3764+ "interval": "$interval",
3765+ "legend": {
3766+ "alignAsTable": true,
3767+ "avg": true,
3768+ "current": true,
3769+ "max": true,
3770+ "min": true,
3771+ "rightSide": true,
3772+ "show": true,
3773+ "total": false,
3774+ "values": true
3775+ },
3776+ "lines": true,
3777+ "linewidth": 0,
3778+ "links": [],
3779+ "nullPointMode": "connected",
3780+ "percentage": false,
3781+ "pointradius": 5,
3782+ "points": false,
3783+ "renderer": "flot",
3784+ "seriesOverrides": [
3785+ {
3786+ "alias": "/^Total.*$/",
3787+ "fill": 0,
3788+ "linewidth": 4,
3789+ "stack": false
3790+ },
3791+ {
3792+ "alias": "/^Raw.*$/",
3793+ "color": "#BF1B00",
3794+ "fill": 0,
3795+ "linewidth": 4
3796+ }
3797+ ],
3798+ "spaceLength": 10,
3799+ "span": 10,
3800+ "stack": true,
3801+ "steppedLine": false,
3802+ "targets": [
3803+ {
3804+ "expr": "ceph_pool_available_bytes{pool=~\"$pool\"}",
3805+ "interval": "$interval",
3806+ "intervalFactor": 1,
3807+ "legendFormat": "Avilable - {{ pool }}",
3808+ "metric": "ceph_pool_available_bytes",
3809+ "refId": "A",
3810+ "step": 60
3811+ },
3812+ {
3813+ "expr": "ceph_pool_used_bytes{pool=~\"$pool\"}",
3814+ "interval": "$interval",
3815+ "intervalFactor": 1,
3816+ "legendFormat": "Used - {{ pool }}",
3817+ "metric": "ceph_pool",
3818+ "refId": "B",
3819+ "step": 60
3820+ },
3821+ {
3822+ "expr": "ceph_pool_used_bytes{pool=~\"$pool\"} + ceph_pool_available_bytes{pool=~\"$pool\"}",
3823+ "interval": "$interval",
3824+ "intervalFactor": 1,
3825+ "legendFormat": "Total - {{ pool }}",
3826+ "metric": "ceph_pool",
3827+ "refId": "C",
3828+ "step": 60
3829+ },
3830+ {
3831+ "expr": "ceph_pool_raw_used_bytes{pool=~\"$pool\"}",
3832+ "interval": "$interval",
3833+ "intervalFactor": 1,
3834+ "legendFormat": "Raw - {{ pool }}",
3835+ "metric": "ceph_pool",
3836+ "refId": "D",
3837+ "step": 60
3838+ }
3839+ ],
3840+ "thresholds": [],
3841+ "timeFrom": null,
3842+ "timeShift": null,
3843+ "title": "Pool Storage",
3844+ "tooltip": {
3845+ "msResolution": false,
3846+ "shared": true,
3847+ "sort": 0,
3848+ "value_type": "individual"
3849+ },
3850+ "type": "graph",
3851+ "xaxis": {
3852+ "buckets": null,
3853+ "mode": "time",
3854+ "name": null,
3855+ "show": true,
3856+ "values": []
3857+ },
3858+ "yaxes": [
3859+ {
3860+ "format": "bytes",
3861+ "label": null,
3862+ "logBase": 1,
3863+ "max": null,
3864+ "min": 0,
3865+ "show": true
3866+ },
3867+ {
3868+ "format": "short",
3869+ "label": null,
3870+ "logBase": 1,
3871+ "max": null,
3872+ "min": 0,
3873+ "show": true
3874+ }
3875+ ]
3876+ },
3877+ {
3878+ "cacheTimeout": null,
3879+ "colorBackground": false,
3880+ "colorValue": true,
3881+ "colors": [
3882+ "rgba(245, 54, 54, 0.9)",
3883+ "rgba(237, 129, 40, 0.89)",
3884+ "rgba(50, 172, 45, 0.97)"
3885+ ],
3886+ "datasource": "{{ datasource }}",
3887+ "decimals": 2,
3888+ "editable": true,
3889+ "error": false,
3890+ "format": "percentunit",
3891+ "gauge": {
3892+ "maxValue": 1,
3893+ "minValue": 0,
3894+ "show": true,
3895+ "thresholdLabels": false,
3896+ "thresholdMarkers": true
3897+ },
3898+ "id": 10,
3899+ "interval": null,
3900+ "links": [],
3901+ "mappingType": 1,
3902+ "mappingTypes": [
3903+ {
3904+ "name": "value to text",
3905+ "value": 1
3906+ },
3907+ {
3908+ "name": "range to text",
3909+ "value": 2
3910+ }
3911+ ],
3912+ "maxDataPoints": 100,
3913+ "nullPointMode": "connected",
3914+ "nullText": null,
3915+ "postfix": "",
3916+ "postfixFontSize": "50%",
3917+ "prefix": "",
3918+ "prefixFontSize": "50%",
3919+ "rangeMaps": [
3920+ {
3921+ "from": "null",
3922+ "text": "N/A",
3923+ "to": "null"
3924+ }
3925+ ],
3926+ "span": 2,
3927+ "sparkline": {
3928+ "fillColor": "rgba(31, 118, 189, 0.18)",
3929+ "full": false,
3930+ "lineColor": "rgb(31, 120, 193)",
3931+ "show": false
3932+ },
3933+ "tableColumn": "",
3934+ "targets": [
3935+ {
3936+ "expr": " ceph_pool_used_bytes{pool=\"$pool\"} / (ceph_pool_available_bytes{pool=\"$pool\"} + ceph_pool_used_bytes{pool=\"$pool\"})",
3937+ "interval": "$interval",
3938+ "intervalFactor": 1,
3939+ "refId": "A",
3940+ "step": 60
3941+ }
3942+ ],
3943+ "thresholds": "",
3944+ "title": "Usage",
3945+ "type": "singlestat",
3946+ "valueFontSize": "80%",
3947+ "valueMaps": [
3948+ {
3949+ "op": "=",
3950+ "text": "N/A",
3951+ "value": "null"
3952+ }
3953+ ],
3954+ "valueName": "current"
3955+ }
3956+ ],
3957+ "repeat": null,
3958+ "repeatIteration": null,
3959+ "repeatRowId": null,
3960+ "showTitle": true,
3961+ "title": "Pool: $pool",
3962+ "titleSize": "h6"
3963+ },
3964+ {
3965+ "collapse": false,
3966+ "height": "250px",
3967+ "panels": [
3968+ {
3969+ "aliasColors": {},
3970+ "bars": false,
3971+ "dashLength": 10,
3972+ "dashes": false,
3973+ "datasource": "{{ datasource }}",
3974+ "editable": true,
3975+ "error": false,
3976+ "fill": 1,
3977+ "grid": {},
3978+ "height": "",
3979+ "id": 7,
3980+ "legend": {
3981+ "avg": false,
3982+ "current": false,
3983+ "max": false,
3984+ "min": false,
3985+ "show": true,
3986+ "total": false,
3987+ "values": false
3988+ },
3989+ "lines": true,
3990+ "linewidth": 2,
3991+ "links": [],
3992+ "nullPointMode": "connected",
3993+ "percentage": false,
3994+ "pointradius": 5,
3995+ "points": false,
3996+ "renderer": "flot",
3997+ "seriesOverrides": [],
3998+ "spaceLength": 10,
3999+ "span": 6,
4000+ "stack": false,
4001+ "steppedLine": false,
4002+ "targets": [
4003+ {
4004+ "expr": "ceph_pool_objects_total{pool=~\"$pool\"}",
4005+ "interval": "$interval",
4006+ "intervalFactor": 1,
4007+ "legendFormat": "Objects - {{ pool }}",
4008+ "refId": "A",
4009+ "step": 60
4010+ },
4011+ {
4012+ "expr": "ceph_pool_dirty_objects_total{pool=~\"$pool\"}",
4013+ "interval": "$interval",
4014+ "intervalFactor": 1,
4015+ "legendFormat": "Dirty Objects - {{ pool }}",
4016+ "refId": "B",
4017+ "step": 60
4018+ }
4019+ ],
4020+ "thresholds": [],
4021+ "timeFrom": null,
4022+ "timeShift": null,
4023+ "title": "Objects in Pool",
4024+ "tooltip": {
4025+ "msResolution": false,
4026+ "shared": true,
4027+ "sort": 0,
4028+ "value_type": "cumulative"
4029+ },
4030+ "type": "graph",
4031+ "xaxis": {
4032+ "buckets": null,
4033+ "mode": "time",
4034+ "name": null,
4035+ "show": true,
4036+ "values": []
4037+ },
4038+ "yaxes": [
4039+ {
4040+ "format": "short",
4041+ "label": null,
4042+ "logBase": 1,
4043+ "max": null,
4044+ "min": 0,
4045+ "show": true
4046+ },
4047+ {
4048+ "format": "short",
4049+ "label": null,
4050+ "logBase": 1,
4051+ "max": null,
4052+ "min": 0,
4053+ "show": true
4054+ }
4055+ ]
4056+ },
4057+ {
4058+ "aliasColors": {},
4059+ "bars": false,
4060+ "dashLength": 10,
4061+ "dashes": false,
4062+ "datasource": "{{ datasource }}",
4063+ "decimals": 2,
4064+ "editable": true,
4065+ "error": false,
4066+ "fill": 1,
4067+ "grid": {},
4068+ "id": 4,
4069+ "interval": "$interval",
4070+ "legend": {
4071+ "alignAsTable": true,
4072+ "avg": true,
4073+ "current": true,
4074+ "max": true,
4075+ "min": true,
4076+ "show": true,
4077+ "total": false,
4078+ "values": true
4079+ },
4080+ "lines": true,
4081+ "linewidth": 2,
4082+ "links": [],
4083+ "nullPointMode": "connected",
4084+ "percentage": false,
4085+ "pointradius": 5,
4086+ "points": false,
4087+ "renderer": "flot",
4088+ "seriesOverrides": [],
4089+ "spaceLength": 10,
4090+ "span": 6,
4091+ "stack": true,
4092+ "steppedLine": false,
4093+ "targets": [
4094+ {
4095+ "expr": "irate(ceph_pool_read_total{pool=~\"$pool\"}[3m])",
4096+ "interval": "$interval",
4097+ "intervalFactor": 1,
4098+ "legendFormat": "Read - {{ pool }}",
4099+ "refId": "B",
4100+ "step": 60
4101+ },
4102+ {
4103+ "expr": "irate(ceph_pool_write_total{pool=~\"$pool\"}[3m])",
4104+ "interval": "$interval",
4105+ "intervalFactor": 1,
4106+ "legendFormat": "Write - {{ pool }}",
4107+ "refId": "A",
4108+ "step": 60
4109+ }
4110+ ],
4111+ "thresholds": [],
4112+ "timeFrom": null,
4113+ "timeShift": null,
4114+ "title": "IOPS",
4115+ "tooltip": {
4116+ "msResolution": false,
4117+ "shared": true,
4118+ "sort": 0,
4119+ "value_type": "individual"
4120+ },
4121+ "type": "graph",
4122+ "xaxis": {
4123+ "buckets": null,
4124+ "mode": "time",
4125+ "name": null,
4126+ "show": true,
4127+ "values": []
4128+ },
4129+ "yaxes": [
4130+ {
4131+ "format": "none",
4132+ "label": "IOPS",
4133+ "logBase": 1,
4134+ "max": null,
4135+ "min": 0,
4136+ "show": true
4137+ },
4138+ {
4139+ "format": "short",
4140+ "label": "IOPS",
4141+ "logBase": 1,
4142+ "max": null,
4143+ "min": 0,
4144+ "show": false
4145+ }
4146+ ]
4147+ },
4148+ {
4149+ "aliasColors": {},
4150+ "bars": false,
4151+ "dashLength": 10,
4152+ "dashes": false,
4153+ "datasource": "{{ datasource }}",
4154+ "decimals": 2,
4155+ "editable": true,
4156+ "error": false,
4157+ "fill": 1,
4158+ "grid": {},
4159+ "id": 5,
4160+ "interval": "$interval",
4161+ "legend": {
4162+ "alignAsTable": true,
4163+ "avg": true,
4164+ "current": true,
4165+ "max": true,
4166+ "min": true,
4167+ "show": true,
4168+ "total": false,
4169+ "values": true
4170+ },
4171+ "lines": true,
4172+ "linewidth": 2,
4173+ "links": [],
4174+ "nullPointMode": "connected",
4175+ "percentage": false,
4176+ "pointradius": 5,
4177+ "points": false,
4178+ "renderer": "flot",
4179+ "seriesOverrides": [],
4180+ "spaceLength": 10,
4181+ "span": 12,
4182+ "stack": true,
4183+ "steppedLine": false,
4184+ "targets": [
4185+ {
4186+ "expr": "irate(ceph_pool_read_bytes_total{pool=\"$pool\"}[3m])",
4187+ "interval": "$interval",
4188+ "intervalFactor": 1,
4189+ "legendFormat": "Read Bytes - {{ pool }}",
4190+ "refId": "A",
4191+ "step": 60
4192+ },
4193+ {
4194+ "expr": "irate(ceph_pool_write_bytes_total{pool=\"$pool\"}[3m])",
4195+ "interval": "$interval",
4196+ "intervalFactor": 1,
4197+ "legendFormat": "Written Bytes - {{ pool }}",
4198+ "refId": "B",
4199+ "step": 60
4200+ }
4201+ ],
4202+ "thresholds": [],
4203+ "timeFrom": null,
4204+ "timeShift": null,
4205+ "title": "Throughput",
4206+ "tooltip": {
4207+ "msResolution": false,
4208+ "shared": true,
4209+ "sort": 0,
4210+ "value_type": "individual"
4211+ },
4212+ "type": "graph",
4213+ "xaxis": {
4214+ "buckets": null,
4215+ "mode": "time",
4216+ "name": null,
4217+ "show": true,
4218+ "values": []
4219+ },
4220+ "yaxes": [
4221+ {
4222+ "format": "Bps",
4223+ "label": null,
4224+ "logBase": 1,
4225+ "max": null,
4226+ "min": 0,
4227+ "show": true
4228+ },
4229+ {
4230+ "format": "Bps",
4231+ "label": null,
4232+ "logBase": 1,
4233+ "max": null,
4234+ "min": 0,
4235+ "show": true
4236+ }
4237+ ]
4238+ }
4239+ ],
4240+ "repeat": null,
4241+ "repeatIteration": null,
4242+ "repeatRowId": null,
4243+ "showTitle": false,
4244+ "title": "New row",
4245+ "titleSize": "h6"
4246+ }
4247+ ],
4248+ "schemaVersion": 14,
4249+ "style": "dark",
4250+ "tags": [
4251+ "ceph",
4252+ "pools"
4253+ ],
4254+ "templating": {
4255+ "list": [
4256+ {
4257+ "auto": true,
4258+ "auto_count": 10,
4259+ "auto_min": "1m",
4260+ "current": {
4261+ "text": "1m",
4262+ "value": "1m"
4263+ },
4264+ "datasource": null,
4265+ "hide": 0,
4266+ "includeAll": false,
4267+ "label": "Interval",
4268+ "multi": false,
4269+ "name": "interval",
4270+ "options": [
4271+ {
4272+ "selected": false,
4273+ "text": "auto",
4274+ "value": "$__auto_interval"
4275+ },
4276+ {
4277+ "selected": true,
4278+ "text": "1m",
4279+ "value": "1m"
4280+ },
4281+ {
4282+ "selected": false,
4283+ "text": "10m",
4284+ "value": "10m"
4285+ },
4286+ {
4287+ "selected": false,
4288+ "text": "30m",
4289+ "value": "30m"
4290+ },
4291+ {
4292+ "selected": false,
4293+ "text": "1h",
4294+ "value": "1h"
4295+ },
4296+ {
4297+ "selected": false,
4298+ "text": "6h",
4299+ "value": "6h"
4300+ },
4301+ {
4302+ "selected": false,
4303+ "text": "12h",
4304+ "value": "12h"
4305+ },
4306+ {
4307+ "selected": false,
4308+ "text": "1d",
4309+ "value": "1d"
4310+ },
4311+ {
4312+ "selected": false,
4313+ "text": "7d",
4314+ "value": "7d"
4315+ },
4316+ {
4317+ "selected": false,
4318+ "text": "14d",
4319+ "value": "14d"
4320+ },
4321+ {
4322+ "selected": false,
4323+ "text": "30d",
4324+ "value": "30d"
4325+ }
4326+ ],
4327+ "query": "1m,10m,30m,1h,6h,12h,1d,7d,14d,30d",
4328+ "refresh": 2,
4329+ "type": "interval"
4330+ },
4331+ {
4332+ "allValue": null,
4333+ "current": {},
4334+ "datasource": "{{ datasource }}",
4335+ "hide": 0,
4336+ "includeAll": false,
4337+ "label": "Pool",
4338+ "multi": false,
4339+ "name": "pool",
4340+ "options": [],
4341+ "query": "label_values(ceph_pool_objects_total, pool)",
4342+ "refresh": 1,
4343+ "regex": "",
4344+ "sort": 0,
4345+ "tagValuesQuery": "",
4346+ "tags": [],
4347+ "tagsQuery": "",
4348+ "type": "query",
4349+ "useTags": false
4350+ }
4351+ ]
4352+ },
4353+ "time": {
4354+ "from": "now-3h",
4355+ "to": "now"
4356+ },
4357+ "timepicker": {
4358+ "refresh_intervals": [
4359+ "5s",
4360+ "10s",
4361+ "30s",
4362+ "1m",
4363+ "5m",
4364+ "15m",
4365+ "30m",
4366+ "1h",
4367+ "2h",
4368+ "1d"
4369+ ],
4370+ "time_options": [
4371+ "5m",
4372+ "15m",
4373+ "1h",
4374+ "6h",
4375+ "12h",
4376+ "24h",
4377+ "2d",
4378+ "7d",
4379+ "30d"
4380+ ]
4381+ },
4382+ "timezone": "utc",
4383+ "title": "Ceph - Pools",
4384+ "version": 1
4385+},
4386+"overwrite": true
4387+}
4388diff --git a/templates/dashboards/prometheus/OpenStackCloud.json.j2 b/templates/dashboards/prometheus/OpenStackCloud.json.j2
4389new file mode 100644
4390index 0000000..67649c7
4391--- /dev/null
4392+++ b/templates/dashboards/prometheus/OpenStackCloud.json.j2
4393@@ -0,0 +1,3819 @@
4394+{
4395+"dashboard":
4396+{
4397+ "__inputs": [
4398+ {
4399+ "name": "{{ datasource }}",
4400+ "label": "prometheus - Juju generated source",
4401+ "description": "",
4402+ "type": "datasource",
4403+ "pluginId": "prometheus",
4404+ "pluginName": "Prometheus"
4405+ }
4406+ ],
4407+ "__requires": [
4408+ {
4409+ "type": "grafana",
4410+ "id": "grafana",
4411+ "name": "Grafana",
4412+ "version": "4.6.2"
4413+ },
4414+ {
4415+ "type": "panel",
4416+ "id": "graph",
4417+ "name": "Graph",
4418+ "version": ""
4419+ },
4420+ {
4421+ "type": "datasource",
4422+ "id": "prometheus",
4423+ "name": "Prometheus",
4424+ "version": "1.0.0"
4425+ },
4426+ {
4427+ "type": "panel",
4428+ "id": "singlestat",
4429+ "name": "Singlestat",
4430+ "version": ""
4431+ },
4432+ {
4433+ "type": "panel",
4434+ "id": "table",
4435+ "name": "Table",
4436+ "version": ""
4437+ },
4438+ {
4439+ "type": "panel",
4440+ "id": "text",
4441+ "name": "Text",
4442+ "version": ""
4443+ }
4444+ ],
4445+ "annotations": {
4446+ "list": [
4447+ {
4448+ "builtIn": 1,
4449+ "datasource": "-- Grafana --",
4450+ "enable": true,
4451+ "hide": true,
4452+ "iconColor": "rgba(0, 211, 255, 1)",
4453+ "name": "Annotations & Alerts",
4454+ "type": "dashboard"
4455+ }
4456+ ]
4457+ },
4458+ "editable": true,
4459+ "gnetId": null,
4460+ "graphTooltip": 0,
4461+ "hideControls": false,
4462+ "id": null,
4463+ "links": [],
4464+ "refresh": false,
4465+ "rows": [
4466+ {
4467+ "collapse": true,
4468+ "height": 109,
4469+ "panels": [
4470+ {
4471+ "content": "# Openstack dashboard: $cloud\n\n* openstack data is cached, currently refreshed every 5 minutes\n* The VM creation / teardown graph doesn't show the values for the builders in scalingstacks because they happen a lot faster than our scrape interval\n* \"Free IPs\" are not owned by any tenant and available for allocation\n* \"Unused IPs\" are owned by a tenant but not currently associated with an instance",
4472+ "editable": true,
4473+ "error": false,
4474+ "height": "200px",
4475+ "id": 26,
4476+ "links": [],
4477+ "mode": "markdown",
4478+ "span": 6,
4479+ "title": "",
4480+ "type": "text"
4481+ },
4482+ {
4483+ "cacheTimeout": null,
4484+ "colorBackground": false,
4485+ "colorValue": false,
4486+ "colors": [
4487+ "rgba(245, 54, 54, 0.9)",
4488+ "rgba(237, 129, 40, 0.89)",
4489+ "rgba(50, 172, 45, 0.97)"
4490+ ],
4491+ "datasource": "{{ datasource }}",
4492+ "editable": true,
4493+ "error": false,
4494+ "format": "none",
4495+ "gauge": {
4496+ "maxValue": 100,
4497+ "minValue": 0,
4498+ "show": false,
4499+ "thresholdLabels": false,
4500+ "thresholdMarkers": true
4501+ },
4502+ "id": 117,
4503+ "interval": null,
4504+ "links": [],
4505+ "mappingType": 1,
4506+ "mappingTypes": [
4507+ {
4508+ "name": "value to text",
4509+ "value": 1
4510+ },
4511+ {
4512+ "name": "range to text",
4513+ "value": 2
4514+ }
4515+ ],
4516+ "maxDataPoints": 100,
4517+ "nullPointMode": "connected",
4518+ "nullText": null,
4519+ "postfix": "",
4520+ "postfixFontSize": "50%",
4521+ "prefix": "",
4522+ "prefixFontSize": "50%",
4523+ "rangeMaps": [
4524+ {
4525+ "from": "null",
4526+ "text": "N/A",
4527+ "to": "null"
4528+ }
4529+ ],
4530+ "span": 2,
4531+ "sparkline": {
4532+ "fillColor": "rgba(31, 118, 189, 0.18)",
4533+ "full": false,
4534+ "lineColor": "rgb(31, 120, 193)",
4535+ "show": false
4536+ },
4537+ "tableColumn": "",
4538+ "targets": [
4539+ {
4540+ "expr": "sum(neutron_net_size{network_name=\"ext_net\",cloud=\"$cloud\"}) - sum(neutron_public_ip_usage{subnet_name=\"ext_net\",cloud=\"$cloud\"})",
4541+ "intervalFactor": 2,
4542+ "legendFormat": "",
4543+ "metric": "",
4544+ "refId": "A",
4545+ "step": 1800
4546+ }
4547+ ],
4548+ "thresholds": "",
4549+ "title": "Free IPs (ext_net)",
4550+ "type": "singlestat",
4551+ "valueFontSize": "100%",
4552+ "valueMaps": [
4553+ {
4554+ "op": "=",
4555+ "text": "N/A",
4556+ "value": "null"
4557+ }
4558+ ],
4559+ "valueName": "current"
4560+ },
4561+ {
4562+ "cacheTimeout": null,
4563+ "colorBackground": false,
4564+ "colorValue": false,
4565+ "colors": [
4566+ "rgba(245, 54, 54, 0.9)",
4567+ "rgba(237, 129, 40, 0.89)",
4568+ "rgba(50, 172, 45, 0.97)"
4569+ ],
4570+ "datasource": "{{ datasource }}",
4571+ "editable": true,
4572+ "error": false,
4573+ "format": "none",
4574+ "gauge": {
4575+ "maxValue": 100,
4576+ "minValue": 0,
4577+ "show": false,
4578+ "thresholdLabels": false,
4579+ "thresholdMarkers": true
4580+ },
4581+ "id": 138,
4582+ "interval": null,
4583+ "links": [],
4584+ "mappingType": 1,
4585+ "mappingTypes": [
4586+ {
4587+ "name": "value to text",
4588+ "value": 1
4589+ },
4590+ {
4591+ "name": "range to text",
4592+ "value": 2
4593+ }
4594+ ],
4595+ "maxDataPoints": 100,
4596+ "nullPointMode": "connected",
4597+ "nullText": null,
4598+ "postfix": "",
4599+ "postfixFontSize": "50%",
4600+ "prefix": "",
4601+ "prefixFontSize": "50%",
4602+ "rangeMaps": [
4603+ {
4604+ "from": "null",
4605+ "text": "N/A",
4606+ "to": "null"
4607+ }
4608+ ],
4609+ "span": 2,
4610+ "sparkline": {
4611+ "fillColor": "rgba(31, 118, 189, 0.18)",
4612+ "full": false,
4613+ "lineColor": "rgb(31, 120, 193)",
4614+ "show": false
4615+ },
4616+ "tableColumn": "",
4617+ "targets": [
4618+ {
4619+ "expr": "(sum(neutron_net_size{network_name=\"ext_net\",cloud=\"$cloud\"}) - sum(neutron_public_ip_usage{subnet_name=\"ext_net\",cloud=\"$cloud\",ip_status=\"ACTIVE\"})) - (sum(neutron_net_size{network_name=\"ext_net\",cloud=\"$cloud\"}) - sum(neutron_public_ip_usage{subnet_name=\"ext_net\",cloud=\"$cloud\"}))",
4620+ "intervalFactor": 2,
4621+ "legendFormat": "",
4622+ "metric": "",
4623+ "refId": "A",
4624+ "step": 1800
4625+ }
4626+ ],
4627+ "thresholds": "",
4628+ "title": "Unused IPs (ext_net)",
4629+ "type": "singlestat",
4630+ "valueFontSize": "100%",
4631+ "valueMaps": [
4632+ {
4633+ "op": "=",
4634+ "text": "N/A",
4635+ "value": "null"
4636+ }
4637+ ],
4638+ "valueName": "current"
4639+ },
4640+ {
4641+ "cacheTimeout": null,
4642+ "colorBackground": false,
4643+ "colorValue": false,
4644+ "colors": [
4645+ "rgba(245, 54, 54, 0.9)",
4646+ "rgba(237, 129, 40, 0.89)",
4647+ "rgba(50, 172, 45, 0.97)"
4648+ ],
4649+ "datasource": "{{ datasource }}",
4650+ "editable": true,
4651+ "error": false,
4652+ "format": "none",
4653+ "gauge": {
4654+ "maxValue": 100,
4655+ "minValue": 0,
4656+ "show": false,
4657+ "thresholdLabels": false,
4658+ "thresholdMarkers": true
4659+ },
4660+ "id": 118,
4661+ "interval": null,
4662+ "links": [],
4663+ "mappingType": 1,
4664+ "mappingTypes": [
4665+ {
4666+ "name": "value to text",
4667+ "value": 1
4668+ },
4669+ {
4670+ "name": "range to text",
4671+ "value": 2
4672+ }
4673+ ],
4674+ "maxDataPoints": 100,
4675+ "nullPointMode": "connected",
4676+ "nullText": null,
4677+ "postfix": "",
4678+ "postfixFontSize": "50%",
4679+ "prefix": "",
4680+ "prefixFontSize": "50%",
4681+ "rangeMaps": [
4682+ {
4683+ "from": "null",
4684+ "text": "N/A",
4685+ "to": "null"
4686+ }
4687+ ],
4688+ "span": 2,
4689+ "sparkline": {
4690+ "fillColor": "rgba(31, 118, 189, 0.18)",
4691+ "full": false,
4692+ "lineColor": "rgb(31, 120, 193)",
4693+ "show": false
4694+ },
4695+ "tableColumn": "",
4696+ "targets": [
4697+ {
4698+ "expr": "sum(hypervisor_schedulable_instances{nova_service_status=\"enabled\",cloud=\"$cloud\"})",
4699+ "intervalFactor": 2,
4700+ "legendFormat": "",
4701+ "metric": "",
4702+ "refId": "A",
4703+ "step": 1800
4704+ }
4705+ ],
4706+ "thresholds": "",
4707+ "title": "Schedulable cpu2-ram4-disk20 instances",
4708+ "type": "singlestat",
4709+ "valueFontSize": "100%",
4710+ "valueMaps": [
4711+ {
4712+ "op": "=",
4713+ "text": "N/A",
4714+ "value": "null"
4715+ }
4716+ ],
4717+ "valueName": "current"
4718+ },
4719+ {
4720+ "cacheTimeout": null,
4721+ "colorBackground": false,
4722+ "colorValue": false,
4723+ "colors": [
4724+ "rgba(245, 54, 54, 0.9)",
4725+ "rgba(237, 129, 40, 0.89)",
4726+ "rgba(50, 172, 45, 0.97)"
4727+ ],
4728+ "datasource": "{{ datasource }}",
4729+ "editable": true,
4730+ "error": false,
4731+ "format": "bytes",
4732+ "gauge": {
4733+ "maxValue": 100,
4734+ "minValue": 0,
4735+ "show": false,
4736+ "thresholdLabels": false,
4737+ "thresholdMarkers": true
4738+ },
4739+ "id": 120,
4740+ "interval": null,
4741+ "links": [],
4742+ "mappingType": 1,
4743+ "mappingTypes": [
4744+ {
4745+ "name": "value to text",
4746+ "value": 1
4747+ },
4748+ {
4749+ "name": "range to text",
4750+ "value": 2
4751+ }
4752+ ],
4753+ "maxDataPoints": 100,
4754+ "nullPointMode": "connected",
4755+ "nullText": null,
4756+ "postfix": "",
4757+ "postfixFontSize": "50%",
4758+ "prefix": "",
4759+ "prefixFontSize": "50%",
4760+ "rangeMaps": [
4761+ {
4762+ "from": "null",
4763+ "text": "N/A",
4764+ "to": "null"
4765+ }
4766+ ],
4767+ "span": 3,
4768+ "sparkline": {
4769+ "fillColor": "rgba(31, 118, 189, 0.18)",
4770+ "full": false,
4771+ "lineColor": "rgb(31, 120, 193)",
4772+ "show": false
4773+ },
4774+ "tableColumn": "",
4775+ "targets": [
4776+ {
4777+ "expr": "sum(swift_disk_usage_bytes{type=\"size\",cloud=\"$cloud\"}) - sum(swift_disk_usage_bytes{type=\"used\",cloud=\"$cloud\"})",
4778+ "intervalFactor": 2,
4779+ "legendFormat": "",
4780+ "metric": "",
4781+ "refId": "A",
4782+ "step": 1800
4783+ }
4784+ ],
4785+ "thresholds": "",
4786+ "title": "Free swift space - raw",
4787+ "type": "singlestat",
4788+ "valueFontSize": "100%",
4789+ "valueMaps": [
4790+ {
4791+ "op": "=",
4792+ "text": "N/A",
4793+ "value": "null"
4794+ }
4795+ ],
4796+ "valueName": "current"
4797+ },
4798+ {
4799+ "cacheTimeout": null,
4800+ "colorBackground": false,
4801+ "colorValue": false,
4802+ "colors": [
4803+ "rgba(245, 54, 54, 0.9)",
4804+ "rgba(237, 129, 40, 0.89)",
4805+ "rgba(50, 172, 45, 0.97)"
4806+ ],
4807+ "datasource": "{{ datasource }}",
4808+ "editable": true,
4809+ "error": false,
4810+ "format": "bytes",
4811+ "gauge": {
4812+ "maxValue": 100,
4813+ "minValue": 0,
4814+ "show": false,
4815+ "thresholdLabels": false,
4816+ "thresholdMarkers": true
4817+ },
4818+ "id": 121,
4819+ "interval": null,
4820+ "links": [],
4821+ "mappingType": 1,
4822+ "mappingTypes": [
4823+ {
4824+ "name": "value to text",
4825+ "value": 1
4826+ },
4827+ {
4828+ "name": "range to text",
4829+ "value": 2
4830+ }
4831+ ],
4832+ "maxDataPoints": 100,
4833+ "nullPointMode": "connected",
4834+ "nullText": null,
4835+ "postfix": "",
4836+ "postfixFontSize": "50%",
4837+ "prefix": "",
4838+ "prefixFontSize": "50%",
4839+ "rangeMaps": [
4840+ {
4841+ "from": "null",
4842+ "text": "N/A",
4843+ "to": "null"
4844+ }
4845+ ],
4846+ "span": 3,
4847+ "sparkline": {
4848+ "fillColor": "rgba(31, 118, 189, 0.18)",
4849+ "full": false,
4850+ "lineColor": "rgb(31, 120, 193)",
4851+ "show": false
4852+ },
4853+ "tableColumn": "",
4854+ "targets": [
4855+ {
4856+ "expr": "(sum(swift_disk_usage_bytes{type=\"size\",cloud=\"$cloud\"}) - sum(swift_disk_usage_bytes{type=\"used\",cloud=\"$cloud\"})) /3",
4857+ "intervalFactor": 2,
4858+ "legendFormat": "",
4859+ "metric": "",
4860+ "refId": "A",
4861+ "step": 1800
4862+ }
4863+ ],
4864+ "thresholds": "",
4865+ "title": "Free swift space -usable (rf=3)",
4866+ "type": "singlestat",
4867+ "valueFontSize": "100%",
4868+ "valueMaps": [
4869+ {
4870+ "op": "=",
4871+ "text": "N/A",
4872+ "value": "null"
4873+ }
4874+ ],
4875+ "valueName": "current"
4876+ }
4877+ ],
4878+ "repeat": null,
4879+ "repeatIteration": null,
4880+ "repeatRowId": null,
4881+ "showTitle": true,
4882+ "title": "Info",
4883+ "titleSize": "h6"
4884+ },
4885+ {
4886+ "collapse": false,
4887+ "height": 250,
4888+ "panels": [
4889+ {
4890+ "aliasColors": {},
4891+ "bars": false,
4892+ "dashLength": 10,
4893+ "dashes": false,
4894+ "datasource": "{{ datasource }}",
4895+ "editable": true,
4896+ "error": false,
4897+ "fill": 4,
4898+ "id": 141,
4899+ "legend": {
4900+ "avg": false,
4901+ "current": false,
4902+ "max": false,
4903+ "min": false,
4904+ "show": true,
4905+ "total": false,
4906+ "values": false
4907+ },
4908+ "lines": true,
4909+ "linewidth": 1,
4910+ "links": [],
4911+ "nullPointMode": "null",
4912+ "percentage": false,
4913+ "pointradius": 5,
4914+ "points": false,
4915+ "renderer": "flot",
4916+ "seriesOverrides": [],
4917+ "spaceLength": 10,
4918+ "span": 6,
4919+ "stack": false,
4920+ "steppedLine": false,
4921+ "targets": [
4922+ {
4923+ "expr": "(sum(swift_disk_usage_bytes{type=\"size\",cloud=\"$cloud\"}) - sum(swift_disk_usage_bytes{type=\"used\",cloud=\"$cloud\"}))/3",
4924+ "intervalFactor": 2,
4925+ "legendFormat": "Free usable space",
4926+ "refId": "A",
4927+ "step": 3600
4928+ }
4929+ ],
4930+ "thresholds": [],
4931+ "timeFrom": "14d",
4932+ "timeShift": null,
4933+ "title": "Swift - usable free space",
4934+ "tooltip": {
4935+ "msResolution": false,
4936+ "shared": true,
4937+ "sort": 0,
4938+ "value_type": "individual"
4939+ },
4940+ "type": "graph",
4941+ "xaxis": {
4942+ "buckets": null,
4943+ "mode": "time",
4944+ "name": null,
4945+ "show": true,
4946+ "values": []
4947+ },
4948+ "yaxes": [
4949+ {
4950+ "format": "bytes",
4951+ "label": "",
4952+ "logBase": 1,
4953+ "max": null,
4954+ "min": "0",
4955+ "show": true
4956+ },
4957+ {
4958+ "format": "short",
4959+ "label": null,
4960+ "logBase": 1,
4961+ "max": null,
4962+ "min": null,
4963+ "show": true
4964+ }
4965+ ]
4966+ },
4967+ {
4968+ "aliasColors": {},
4969+ "bars": false,
4970+ "dashLength": 10,
4971+ "dashes": false,
4972+ "datasource": "{{ datasource }}",
4973+ "editable": true,
4974+ "error": false,
4975+ "fill": 4,
4976+ "id": 142,
4977+ "legend": {
4978+ "avg": false,
4979+ "current": false,
4980+ "max": false,
4981+ "min": false,
4982+ "show": true,
4983+ "total": false,
4984+ "values": false
4985+ },
4986+ "lines": true,
4987+ "linewidth": 1,
4988+ "links": [],
4989+ "nullPointMode": "null",
4990+ "percentage": false,
4991+ "pointradius": 5,
4992+ "points": false,
4993+ "renderer": "flot",
4994+ "seriesOverrides": [],
4995+ "spaceLength": 10,
4996+ "span": 6,
4997+ "stack": true,
4998+ "steppedLine": false,
4999+ "targets": [
5000+ {
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches