Skip to content

Commit f6a9025

Browse files
committed
Add units to timeseries panel
The yaxes field doesn't seem to do anything in the timeseries panel and was replaced with the units field instead. So I defaulted the units to be short and allowed it to be set for the panel. Signed-off-by: Charlie Le <[email protected]>
1 parent 3ab33de commit f6a9025

10 files changed

+173
-141
lines changed

cortex-mixin/dashboards/alertmanager.libsonnet

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
7373
)
7474
)
7575
.addPanel(
76-
$.timeseriesPanel('Latency') +
76+
$.timeseriesPanel('Latency', unit='ms') +
7777
$.latencyPanel('cortex_alertmanager_notification_latency_seconds', '{%s}' % $.jobMatcher($._config.job_names.alertmanager))
7878
)
7979
)
@@ -84,7 +84,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
8484
$.qpsPanel('cortex_request_duration_seconds_count{%s, route=~"api_v1_alerts|alertmanager"}' % $.jobMatcher($._config.job_names.gateway))
8585
)
8686
.addPanel(
87-
$.timeseriesPanel('Latency') +
87+
$.timeseriesPanel('Latency', unit='ms') +
8888
utils.latencyRecordingRulePanel('cortex_request_duration_seconds', $.jobSelector($._config.job_names.gateway) + [utils.selector.re('route', 'api_v1_alerts|alertmanager')])
8989
)
9090
)
@@ -166,7 +166,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
166166
}
167167
)
168168
.addPanel(
169-
$.timeseriesPanel('Initial sync duration') +
169+
$.timeseriesPanel('Initial sync duration', unit='s') +
170170
$.latencyPanel('cortex_alertmanager_state_initial_sync_duration_seconds', '{%s}' % $.jobMatcher($._config.job_names.alertmanager)) + {
171171
targets: [
172172
target {

cortex-mixin/dashboards/compactor.libsonnet

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ local utils = import 'mixin-utils/utils.libsonnet';
1414
'sum(rate(cortex_compactor_runs_failed_total{%s}[$__rate_interval]))' % $.jobMatcher($._config.job_names.compactor)
1515
) +
1616
$.bars +
17-
{ yaxes: $.yaxes('ops') } +
1817
$.panelDescription(
1918
'Per-instance runs',
2019
|||
@@ -44,9 +43,8 @@ local utils = import 'mixin-utils/utils.libsonnet';
4443
.addRow(
4544
$.row('')
4645
.addPanel(
47-
$.timeseriesPanel('Compacted blocks / sec') +
46+
$.timeseriesPanel('Compacted blocks / sec', unit='ops') +
4847
$.queryPanel('sum(rate(prometheus_tsdb_compactions_total{%s}[$__rate_interval]))' % $.jobMatcher($._config.job_names.compactor), 'blocks') +
49-
{ yaxes: $.yaxes('ops') } +
5048
$.panelDescription(
5149
'Compacted blocks / sec',
5250
|||
@@ -55,7 +53,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
5553
),
5654
)
5755
.addPanel(
58-
$.timeseriesPanel('Per-block compaction duration') +
56+
$.timeseriesPanel('Per-block compaction duration', unit='s') +
5957
$.latencyPanel('prometheus_tsdb_compaction_duration_seconds', '{%s}' % $.jobMatcher($._config.job_names.compactor)) +
6058
$.panelDescription(
6159
'Per-block compaction duration',
@@ -85,9 +83,8 @@ local utils = import 'mixin-utils/utils.libsonnet';
8583
.addRow(
8684
$.row('Garbage Collector')
8785
.addPanel(
88-
$.timeseriesPanel('Blocks marked for deletion / sec') +
89-
$.queryPanel('sum(rate(cortex_compactor_blocks_marked_for_deletion_total{%s}[$__rate_interval]))' % $.jobMatcher($._config.job_names.compactor), 'blocks') +
90-
{ yaxes: $.yaxes('ops') },
86+
$.timeseriesPanel('Blocks marked for deletion / sec', unit='ops') +
87+
$.queryPanel('sum(rate(cortex_compactor_blocks_marked_for_deletion_total{%s}[$__rate_interval]))' % $.jobMatcher($._config.job_names.compactor), 'blocks'),
9188
)
9289
.addPanel(
9390
$.successFailurePanel(
@@ -111,7 +108,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
111108
) + { yaxes: $.yaxes('ops') }
112109
)
113110
.addPanel(
114-
$.timeseriesPanel('Metadata Sync Duration') +
111+
$.timeseriesPanel('Metadata Sync Duration', unit='ms') +
115112
// This metric tracks the duration of a per-tenant metadata sync.
116113
$.latencyPanel('cortex_compactor_meta_sync_duration_seconds', '{%s}' % $.jobMatcher($._config.job_names.compactor)),
117114
)

cortex-mixin/dashboards/config.libsonnet

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,19 +8,17 @@ local utils = import 'mixin-utils/utils.libsonnet';
88
.addRow(
99
$.row('Startup config file')
1010
.addPanel(
11-
$.timeseriesPanel('Startup config file hashes') +
11+
$.timeseriesPanel('Startup config file hashes', unit='instances') +
1212
$.queryPanel('count(cortex_config_hash{%s}) by (sha256)' % $.namespaceMatcher(), 'sha256:{{sha256}}') +
13-
$.stack +
14-
{ yaxes: $.yaxes('instances') },
13+
$.stack,
1514
)
1615
)
1716
.addRow(
1817
$.row('Runtime config file')
1918
.addPanel(
20-
$.timeseriesPanel('Runtime config file hashes') +
19+
$.timeseriesPanel('Runtime config file hashes', unit='instances') +
2120
$.queryPanel('count(cortex_runtime_config_hash{%s}) by (sha256)' % $.namespaceMatcher(), 'sha256:{{sha256}}') +
22-
$.stack +
23-
{ yaxes: $.yaxes('instances') },
21+
$.stack,
2422
)
2523
),
2624
}

cortex-mixin/dashboards/dashboard-utils.libsonnet

Lines changed: 80 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,44 @@ local utils = import 'mixin-utils/utils.libsonnet';
6262
.addTemplate('cluster', 'cortex_build_info', 'cluster')
6363
.addTemplate('namespace', 'cortex_build_info{cluster=~"$cluster"}', 'namespace'),
6464
},
65+
timeseriesPanel(title, unit='short'):: {
66+
datasource: '$datasource',
67+
fieldConfig: {
68+
defaults: {
69+
custom: {
70+
drawStyle: 'line',
71+
fillOpacity: 1,
72+
lineWidth: 1,
73+
pointSize: 5,
74+
showPoints: 'never',
75+
spanNulls: false,
76+
stacking: {
77+
group: 'A',
78+
mode: 'none',
79+
},
80+
},
81+
thresholds: {
82+
mode: 'absolute',
83+
steps: [],
84+
},
85+
unit: unit,
86+
},
87+
overrides: [],
88+
},
89+
options: {
90+
legend: {
91+
showLegend: true,
92+
},
93+
tooltip: {
94+
mode: 'single',
95+
sort: 'none',
96+
},
97+
},
98+
links: [],
99+
targets: [],
100+
title: title,
101+
type: 'timeseries',
102+
},
65103

66104
// The mixin allow specialism of the job selector depending on if its a single binary
67105
// deployment or a namespaced one.
@@ -108,6 +146,35 @@ local utils = import 'mixin-utils/utils.libsonnet';
108146
}
109147
for target in super.targets
110148
],
149+
fieldConfig+: {
150+
defaults+: {
151+
custom+: {
152+
lineWidth: 0,
153+
fillOpacity: 100, // Get solid fill.
154+
stacking: {
155+
mode: 'normal',
156+
group: 'A',
157+
},
158+
},
159+
unit: 'reqps',
160+
min: 0,
161+
},
162+
overrides+: [{
163+
matcher: {
164+
id: 'byName',
165+
options: status,
166+
},
167+
properties: [
168+
{
169+
id: 'color',
170+
value: {
171+
mode: 'fixed',
172+
fixedColor: $.httpStatusColors[status],
173+
},
174+
},
175+
],
176+
} for status in std.objectFieldsAll($.httpStatusColors)],
177+
},
111178
},
112179

113180
latencyPanel(metricName, selector, multiplier='1e3')::
@@ -121,7 +188,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
121188
},
122189

123190
successFailurePanel(title, successMetric, failureMetric)::
124-
$.timeseriesPanel(title) +
191+
$.timeseriesPanel(title, unit='short') +
125192
$.queryPanel([successMetric, failureMetric], ['successful', 'failed']) +
126193
$.stack + {
127194
aliasColors: {
@@ -132,7 +199,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
132199

133200
// Displays started, completed and failed rate.
134201
startedCompletedFailedPanel(title, startedMetric, completedMetric, failedMetric)::
135-
$.timeseriesPanel(title) +
202+
$.timeseriesPanel(title, unit='ops') +
136203
$.queryPanel([startedMetric, completedMetric, failedMetric], ['started', 'completed', 'failed']) +
137204
$.stack + {
138205
aliasColors: {
@@ -160,7 +227,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
160227
},
161228

162229
containerMemoryWorkingSetPanel(title, containerName)::
163-
$.timeseriesPanel(title) +
230+
$.timeseriesPanel(title, unit='bytes') +
164231
$.queryPanel([
165232
// We use "max" instead of "sum" otherwise during a rolling update of a statefulset we will end up
166233
// summing the memory of the old instance/pod (whose metric will be stale for 5m) to the new instance/pod.
@@ -180,7 +247,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
180247
},
181248

182249
containerNetworkPanel(title, metric, instanceName)::
183-
$.timeseriesPanel(title) +
250+
$.timeseriesPanel(title, unit='Bps') +
184251
$.queryPanel(
185252
'sum by(%(instance)s) (rate(%(metric)s{%(namespace)s,%(instance)s=~"%(instanceName)s"}[$__rate_interval]))' % {
186253
namespace: $.namespaceMatcher(),
@@ -199,7 +266,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
199266
$.containerNetworkPanel('Transmit Bandwidth', 'container_network_transmit_bytes_total', instanceName),
200267

201268
containerDiskWritesPanel(title, containerName)::
202-
$.timeseriesPanel(title) +
269+
$.timeseriesPanel(title, unit='Bps') +
203270
$.queryPanel(
204271
|||
205272
sum by(%s, %s, device) (
@@ -220,7 +287,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
220287
{ yaxes: $.yaxes('Bps') },
221288

222289
containerDiskReadsPanel(title, containerName)::
223-
$.timeseriesPanel(title) +
290+
$.timeseriesPanel(title, unit='Bps') +
224291
$.queryPanel(
225292
|||
226293
sum by(%s, %s, device) (
@@ -239,7 +306,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
239306
{ yaxes: $.yaxes('Bps') },
240307

241308
containerDiskSpaceUtilization(title, containerName)::
242-
$.timeseriesPanel(title) +
309+
$.timeseriesPanel(title, unit='percentunit') +
243310
$.queryPanel(
244311
|||
245312
max by(persistentvolumeclaim) (
@@ -266,7 +333,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
266333
else 'label_name="%s"' % containerName,
267334

268335
goHeapInUsePanel(title, jobName)::
269-
$.timeseriesPanel(title) +
336+
$.timeseriesPanel(title, unit='bytes') +
270337
$.queryPanel(
271338
'sum by(%s) (go_memstats_heap_inuse_bytes{%s})' % [$._config.per_instance_label, $.jobMatcher(jobName)],
272339
'{{%s}}' % $._config.per_instance_label
@@ -361,13 +428,12 @@ local utils = import 'mixin-utils/utils.libsonnet';
361428
getObjectStoreRows(title, component):: [
362429
super.row(title)
363430
.addPanel(
364-
$.timeseriesPanel('Operations / sec') +
431+
$.timeseriesPanel('Operations / sec', unit='rps') +
365432
$.queryPanel('sum by(operation) (rate(thanos_objstore_bucket_operations_total{%s,component="%s"}[$__rate_interval]))' % [$.namespaceMatcher(), component], '{{operation}}') +
366-
$.stack +
367-
{ yaxes: $.yaxes('rps') },
433+
$.stack
368434
)
369435
.addPanel(
370-
$.timeseriesPanel('Error rate') +
436+
$.timeseriesPanel('Error rate', unit='percentunit') +
371437
$.queryPanel('sum by(operation) (rate(thanos_objstore_bucket_operation_failures_total{%s,component="%s"}[$__rate_interval])) / sum by(operation) (rate(thanos_objstore_bucket_operations_total{%s,component="%s"}[$__rate_interval]))' % [$.namespaceMatcher(), component, $.namespaceMatcher(), component], '{{operation}}') +
372438
{ yaxes: $.yaxes('percentunit') },
373439
)
@@ -406,7 +472,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
406472
};
407473
super.row(title)
408474
.addPanel(
409-
$.timeseriesPanel('Requests / sec') +
475+
$.timeseriesPanel('Requests / sec', unit='ops') +
410476
$.queryPanel(
411477
|||
412478
sum by(operation) (
@@ -439,7 +505,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
439505
)
440506
)
441507
.addPanel(
442-
$.timeseriesPanel('Hit ratio') +
508+
$.timeseriesPanel('Hit ratio', unit='percentunit') +
443509
$.queryPanel(
444510
|||
445511
sum(

cortex-mixin/dashboards/object-store.libsonnet

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,25 @@ local utils = import 'mixin-utils/utils.libsonnet';
77
.addRow(
88
$.row('Components')
99
.addPanel(
10-
$.timeseriesPanel('RPS / component') +
10+
$.timeseriesPanel('RPS / component', unit='rps') +
1111
$.queryPanel('sum by(component) (rate(thanos_objstore_bucket_operations_total{%s}[$__rate_interval]))' % $.namespaceMatcher(), '{{component}}') +
12-
$.stack +
13-
{ yaxes: $.yaxes('rps') },
12+
$.stack,
1413
)
1514
.addPanel(
16-
$.timeseriesPanel('Error rate / component') +
17-
$.queryPanel('sum by(component) (rate(thanos_objstore_bucket_operation_failures_total{%s}[$__rate_interval])) / sum by(component) (rate(thanos_objstore_bucket_operations_total{%s}[$__rate_interval]))' % [$.namespaceMatcher(), $.namespaceMatcher()], '{{component}}') +
18-
{ yaxes: $.yaxes('percentunit') },
15+
$.timeseriesPanel('Error rate / component', unit='percentunit') +
16+
$.queryPanel('sum by(component) (rate(thanos_objstore_bucket_operation_failures_total{%s}[$__rate_interval])) / sum by(component) (rate(thanos_objstore_bucket_operations_total{%s}[$__rate_interval]))' % [$.namespaceMatcher(), $.namespaceMatcher()], '{{component}}')
1917
)
2018
)
2119
.addRow(
2220
$.row('Operations')
2321
.addPanel(
24-
$.timeseriesPanel('RPS / operation') +
22+
$.timeseriesPanel('RPS / operation', unit='rps') +
2523
$.queryPanel('sum by(operation) (rate(thanos_objstore_bucket_operations_total{%s}[$__rate_interval]))' % $.namespaceMatcher(), '{{operation}}') +
26-
$.stack +
27-
{ yaxes: $.yaxes('rps') },
24+
$.stack,
2825
)
2926
.addPanel(
30-
$.timeseriesPanel('Error rate / operation') +
31-
$.queryPanel('sum by(operation) (rate(thanos_objstore_bucket_operation_failures_total{%s}[$__rate_interval])) / sum by(operation) (rate(thanos_objstore_bucket_operations_total{%s}[$__rate_interval]))' % [$.namespaceMatcher(), $.namespaceMatcher()], '{{operation}}') +
32-
{ yaxes: $.yaxes('percentunit') },
27+
$.timeseriesPanel('Error rate / operation', unit='percentunit') +
28+
$.queryPanel('sum by(operation) (rate(thanos_objstore_bucket_operation_failures_total{%s}[$__rate_interval])) / sum by(operation) (rate(thanos_objstore_bucket_operations_total{%s}[$__rate_interval]))' % [$.namespaceMatcher(), $.namespaceMatcher()], '{{operation}}')
3329
)
3430
)
3531
.addRow(

0 commit comments

Comments
 (0)