Skip to content

Commit 9e515d1

Browse files
dashboard: add instance variable
Instance alias variable can be used to select displayed cluster instances for a dashboard. For InfluxDB dashboards, set of instances is based on available in database label_pairs_alias values. For Prometheus dashboards, set of instances is based on available in database alias labels of tnt_uptime_info metric. After this patch, each panel (except for Prometheus cluster aggregation panels) include instance filters in queries. After this patch, there are two different forms of static build dashboards are available: with or without instance variable. Closes #181
1 parent efd01e3 commit 9e515d1

File tree

64 files changed

+101076
-1143
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+101076
-1143
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
55
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
66

7+
## Unreleased
8+
9+
### Added
10+
- Variable to select displayed cluster instances
11+
12+
713
## [1.4.0] - 2022-08-03
814
Grafana revisions: [InfluxDB revision 14](https://grafana.com/api/dashboards/12567/revisions/14/download), [Prometheus revision 14](https://grafana.com/api/dashboards/13054/revisions/14/download), [InfluxDB TDG revision 3](https://grafana.com/api/dashboards/16405/revisions/3/download), [Prometheus TDG revision 3](https://grafana.com/api/dashboards/16406/revisions/3/download).
915

Makefile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
JOB ?= tarantool
22
POLICY ?= autogen
33
MEASUREMENT ?= tarantool_http
4+
WITH_INSTANCE_VARIABLE ?= FALSE
45
OUTPUT_STATIC_DASHBOARD ?= dashboard.json
56

67
.PHONY: build-deps
@@ -16,9 +17,11 @@ ifndef DATASOURCE
1617
false
1718
endif
1819
# JOB is optional, default is "tarantool"
20+
# WITH_INSTANCE_VARIABLE is optional, default is "FALSE"
1921
jsonnet -J ./vendor -J . \
2022
--ext-str DATASOURCE=${DATASOURCE} \
2123
--ext-str JOB=${JOB} \
24+
--ext-str WITH_INSTANCE_VARIABLE=${WITH_INSTANCE_VARIABLE} \
2225
dashboard/build/prometheus/${DASHBOARD_BUILD_SOURCE} -o ${OUTPUT_STATIC_DASHBOARD}
2326

2427
.PHONY: build-static-prometheus
@@ -37,10 +40,12 @@ ifndef DATASOURCE
3740
endif
3841
# POLICY is optional, default is "autogen"
3942
# MEASUREMENT is optional, default is "tarantool_http"
43+
# WITH_INSTANCE_VARIABLE is optional, default is "FALSE"
4044
jsonnet -J ./vendor -J . \
4145
--ext-str DATASOURCE=${DATASOURCE} \
4246
--ext-str POLICY=${POLICY} \
4347
--ext-str MEASUREMENT=${MEASUREMENT} \
48+
--ext-str WITH_INSTANCE_VARIABLE=${WITH_INSTANCE_VARIABLE} \
4449
dashboard/build/influxdb/${DASHBOARD_BUILD_SOURCE} -o ${OUTPUT_STATIC_DASHBOARD}
4550

4651
.PHONY: build-static-influxdb

README.md

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,12 @@ make test-deps
112112
```
113113
to install build dependencies and dependencies that are required to run tests locally.
114114

115-
To build a static dashboard with no input and dynamic variables, run `make` commands.
115+
To build a static dashboard with no input, run `make` commands.
116116
```bash
117117
make DATASOURCE=Prometheus JOB=tarantool \
118-
OUTPUT_STATIC_DASHBOARD=mydashboard.json build-static-prometheus
118+
WITH_INSTANCE_VARIABLE=FALSE \
119+
OUTPUT_STATIC_DASHBOARD=mydashboard.json \
120+
build-static-prometheus
119121
```
120122
Following targets are available:
121123
- `build-static-prometheus`: Tarantool dashboard for a Prometheus datasource;
@@ -126,14 +128,21 @@ Following targets are available:
126128
Variables for Prometheus targets:
127129
- `DATASOURCE`: name of a Prometheus data source;
128130
- `JOB` (optional, default `tarantool`): name of a Prometheus job collecting your application metrics;
131+
- `WITH_INSTANCE_VARIABLE` (optional, default `FALSE`): build a dashboard with variable which
132+
can be used to select displayed cluster instances;
129133
- `OUTPUT_STATIC_DASHBOARD` (optional, default `dashboard.json`): compiled dashboard file.
130134

131135
Variables for InfluxDB targets:
132136
- `DATASOURCE`: name of a InfluxDB data source;
133137
- `POLICY` (optional, default `autogen`): InfluxDB metrics retention policy;
134138
- `MEASUREMENT` (optional, default `tarantool_http`): name of a InfluxDB measurement with your application metrics;
139+
- `WITH_INSTANCE_VARIABLE` (optional, default `FALSE`): build a dashboard with variable which
140+
can be used to select displayed cluster instances;
135141
- `OUTPUT_STATIC_DASHBOARD` (optional, default `dashboard.json`): compiled dashboard file.
136142

143+
With `WITH_INSTANCE_VARIABLE=FALSE`, dashboard will contain no dynamic variables and Grafana alerts can be used.
144+
With `WITH_INSTANCE_VARIABLE=TRUE`, dashboard will contain instance dynamic variable (but no inputs).
145+
137146
You can also compile configurable Prometheus dashboard template (the same we publish to
138147
Grafana Official & community built dashboards) with
139148
```bash

dashboard/build/influxdb/dashboard.libsonnet

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ local variable = import 'dashboard/variable.libsonnet';
66
dashboard_raw(
77
datasource=variable.datasource.influxdb,
88
policy=variable.influxdb.policy,
9-
measurement=variable.influxdb.measurement
9+
measurement=variable.influxdb.measurement,
10+
alias=variable.influxdb.alias,
1011
).addInput(
1112
name='DS_INFLUXDB',
1213
label='InfluxDB bank',
@@ -26,4 +27,15 @@ dashboard_raw(
2627
type='constant',
2728
value='autogen',
2829
description='InfluxDB Tarantool metrics policy'
30+
).addTemplate(
31+
grafana.template.new(
32+
name='alias',
33+
datasource=variable.datasource.influxdb,
34+
query=std.format('SHOW TAG VALUES FROM "%s" WITH KEY="label_pairs_alias"', variable.influxdb.measurement),
35+
includeAll=true,
36+
multi=true,
37+
current='all',
38+
label='Instances',
39+
refresh='time',
40+
)
2941
)

dashboard/build/influxdb/dashboard_raw.libsonnet

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ local dashboard = import 'dashboard/dashboard.libsonnet';
44
local section = import 'dashboard/section.libsonnet';
55
local variable = import 'dashboard/variable.libsonnet';
66

7-
function(datasource, policy, measurement) dashboard.new(
7+
function(datasource, policy, measurement, alias) dashboard.new(
88
grafana.dashboard.new(
99
title='Tarantool dashboard',
1010
description='Dashboard for Tarantool application and database server monitoring, based on grafonnet library.',
@@ -46,82 +46,94 @@ function(datasource, policy, measurement) dashboard.new(
4646
datasource=datasource,
4747
policy=policy,
4848
measurement=measurement,
49+
alias=alias,
4950
)
5051
).addPanels(
5152
section.http(
5253
datasource_type=variable.datasource_type.influxdb,
5354
datasource=datasource,
5455
policy=policy,
5556
measurement=measurement,
57+
alias=alias,
5658
)
5759
).addPanels(
5860
section.net(
5961
datasource_type=variable.datasource_type.influxdb,
6062
datasource=datasource,
6163
policy=policy,
6264
measurement=measurement,
65+
alias=alias,
6366
)
6467
).addPanels(
6568
section.slab(
6669
datasource_type=variable.datasource_type.influxdb,
6770
datasource=datasource,
6871
policy=policy,
6972
measurement=measurement,
73+
alias=alias,
7074
)
7175
).addPanels(
7276
section.space(
7377
datasource_type=variable.datasource_type.influxdb,
7478
datasource=datasource,
7579
policy=policy,
7680
measurement=measurement,
81+
alias=alias,
7782
)
7883
).addPanels(
7984
section.vinyl(
8085
datasource_type=variable.datasource_type.influxdb,
8186
datasource=datasource,
8287
policy=policy,
8388
measurement=measurement,
89+
alias=alias,
8490
)
8591
).addPanels(
8692
section.cpu(
8793
datasource_type=variable.datasource_type.influxdb,
8894
datasource=datasource,
8995
policy=policy,
9096
measurement=measurement,
97+
alias=alias,
9198
)
9299
).addPanels(
93100
section.runtime(
94101
datasource_type=variable.datasource_type.influxdb,
95102
datasource=datasource,
96103
policy=policy,
97104
measurement=measurement,
105+
alias=alias,
98106
)
99107
).addPanels(
100108
section.luajit(
101109
datasource_type=variable.datasource_type.influxdb,
102110
datasource=datasource,
103111
policy=policy,
104112
measurement=measurement,
113+
alias=alias,
105114
)
106115
).addPanels(
107116
section.operations(
108117
datasource_type=variable.datasource_type.influxdb,
109118
datasource=datasource,
110119
policy=policy,
111120
measurement=measurement,
121+
alias=alias,
112122
)
113123
).addPanels(
114124
section.crud(
115125
datasource_type=variable.datasource_type.influxdb,
116126
datasource=datasource,
117127
policy=policy,
118128
measurement=measurement,
129+
alias=alias,
119130
)
120131
).addPanels(
121132
section.expirationd(
122133
datasource_type=variable.datasource_type.influxdb,
123134
datasource=datasource,
124135
policy=policy,
125136
measurement=measurement,
137+
alias=alias,
126138
)
127139
)
Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,41 @@
1+
local grafana = import 'grafonnet/grafana.libsonnet';
2+
13
local dashboard_raw = import 'dashboard/build/influxdb/dashboard_raw.libsonnet';
4+
local variable = import 'dashboard/variable.libsonnet';
5+
6+
local DATASOURCE = std.extVar('DATASOURCE');
7+
local POLICY = std.extVar('POLICY');
8+
local MEASUREMENT = std.extVar('MEASUREMENT');
9+
local WITH_INSTANCE_VARIABLE = (std.asciiUpper(std.extVar('WITH_INSTANCE_VARIABLE')) == 'TRUE');
210

3-
dashboard_raw(
4-
datasource=std.extVar('DATASOURCE'),
5-
policy=std.extVar('POLICY'),
6-
measurement=std.extVar('MEASUREMENT'),
7-
).build()
11+
if WITH_INSTANCE_VARIABLE then
12+
dashboard_raw(
13+
datasource=DATASOURCE,
14+
policy=POLICY,
15+
measurement=MEASUREMENT,
16+
alias=variable.influxdb.alias,
17+
).addTemplate(
18+
grafana.template.new(
19+
name='alias',
20+
datasource=DATASOURCE,
21+
query=std.format(
22+
'SHOW TAG VALUES FROM %(policy_prefix)s"%(measurement)s" WITH KEY="label_pairs_alias"',
23+
{
24+
policy_prefix: if POLICY == 'default' then '' else std.format('"%s".', POLICY),
25+
measurement: MEASUREMENT,
26+
},
27+
),
28+
includeAll=true,
29+
multi=true,
30+
current='all',
31+
label='Instances',
32+
refresh='time',
33+
)
34+
).build()
35+
else
36+
dashboard_raw(
37+
datasource=std.extVar('DATASOURCE'),
38+
policy=std.extVar('POLICY'),
39+
measurement=std.extVar('MEASUREMENT'),
40+
alias='/^.*$/',
41+
).build()

dashboard/build/influxdb/tdg_dashboard.libsonnet

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@ local variable = import 'dashboard/variable.libsonnet';
66
tdg_dashboard_raw(
77
datasource=variable.datasource.influxdb,
88
policy=variable.influxdb.policy,
9-
measurement=variable.influxdb.measurement
9+
measurement=variable.influxdb.measurement,
10+
alias=variable.influxdb.alias,
1011
).addInput(
1112
name='DS_INFLUXDB',
1213
label='InfluxDB bank',
@@ -26,4 +27,15 @@ tdg_dashboard_raw(
2627
type='constant',
2728
value='autogen',
2829
description='InfluxDB Tarantool metrics policy'
30+
).addTemplate(
31+
grafana.template.new(
32+
name='alias',
33+
datasource=variable.datasource.influxdb,
34+
query=std.format('SHOW TAG VALUES FROM "%s" WITH KEY="label_pairs_alias"', variable.influxdb.measurement),
35+
includeAll=true,
36+
multi=true,
37+
current='all',
38+
label='Instances',
39+
refresh='time',
40+
)
2941
)

0 commit comments

Comments
 (0)