Skip to content

Commit dee2252

Browse files
committed
dashboard: add panels for expirationd module statistics
Statistics for expirationd module was introduced in expirationd 1.2.0 [1]. Statistics integrated with metrics and enabled by default. To disable statistics integrated with metrics, call: expirationd.cfg({ metrics = false }) This patch adds panels for counters: - expirationd_checked_count - expirationd_expired_count - expirationd_restarts - expirationd_working_time The meaning of counters is same as for expirationd.stats() [2]. expirationd panels are stored in "expirationd module statistics" section. Mostly it copy-paste from TDG's dashboard [3][4]. 1. https://github.com/tarantool/expirationd/releases/tag/1.2.0 2. https://tarantool.github.io/expirationd/#stats 3. ca6e0e1 4. https://github.com/tarantool/grafana-dashboard/blob/0c623e0fae8e526976ed70da5e5f5a6640856275/dashboard/panels/tdg/expirationd.libsonnet Closes #149
1 parent 0c623e0 commit dee2252

11 files changed

+2159
-12
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ 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+
## Added
8+
- expirationd dashboard
9+
710
## [1.2.1] - 2022-06-24
811
Grafana revisions: [InfluxDB revision 12](https://grafana.com/api/dashboards/12567/revisions/12/download), [Prometheus revision 12](https://grafana.com/api/dashboards/13054/revisions/12/download), [InfluxDB TDG revision 2](https://grafana.com/api/dashboards/16405/revisions/2/download), [Prometheus TDG revision 2](https://grafana.com/api/dashboards/16406/revisions/2/download).
912

dashboard/influxdb_dashboard.libsonnet

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,10 @@ dashboard.new(
124124
policy=variable.influxdb.policy,
125125
measurement=variable.influxdb.measurement,
126126
)
127+
).addPanels(
128+
section.expirationd(
129+
datasource=variable.datasource.influxdb,
130+
policy=variable.influxdb.policy,
131+
measurement=variable.influxdb.measurement,
132+
)
127133
)
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
local common_utils = import 'common.libsonnet';
2+
local grafana = import 'grafonnet/grafana.libsonnet';
3+
4+
local influxdb = grafana.influxdb;
5+
local prometheus = grafana.prometheus;
6+
7+
{
8+
row:: common_utils.row('expirationd module statistics'),
9+
10+
local target(
11+
datasource,
12+
metric_name,
13+
job=null,
14+
policy=null,
15+
measurement=null,
16+
) =
17+
if datasource == '${DS_PROMETHEUS}' then
18+
prometheus.target(
19+
expr=std.format('%s{job=~"%s"}', [metric_name, job]),
20+
legendFormat='{{name}} — {{alias}}',
21+
)
22+
else if datasource == '${DS_INFLUXDB}' then
23+
influxdb.target(
24+
policy=policy,
25+
measurement=measurement,
26+
group_tags=[
27+
'label_pairs_alias',
28+
'label_pairs_name',
29+
],
30+
alias='$tag_label_pairs_name — $tag_label_pairs_alias',
31+
).where('metric_name', '=', metric_name)
32+
.selectField('value').addConverter('mean'),
33+
34+
local rps_target(
35+
datasource,
36+
metric_name,
37+
job=null,
38+
rate_time_range=null,
39+
policy=null,
40+
measurement=null,
41+
) =
42+
if datasource == '${DS_PROMETHEUS}' then
43+
prometheus.target(
44+
expr=std.format('rate(%s{job=~"%s"}[%s])',
45+
[metric_name, job, rate_time_range]),
46+
legendFormat='{{name}} — {{alias}}',
47+
)
48+
else if datasource == '${DS_INFLUXDB}' then
49+
influxdb.target(
50+
policy=policy,
51+
measurement=measurement,
52+
group_tags=[
53+
'label_pairs_alias',
54+
'label_pairs_name',
55+
],
56+
alias='$tag_label_pairs_name — $tag_label_pairs_alias',
57+
).where('metric_name', '=', metric_name)
58+
.selectField('value').addConverter('mean').addConverter('non_negative_derivative', ['1s']),
59+
60+
tuples_checked(
61+
title='Tuples checked',
62+
description=common_utils.rate_warning(|||
63+
A number of task tuples checked for expiration (expired + skipped).
64+
Graph shows mean tuples per second.
65+
|||),
66+
datasource=null,
67+
policy=null,
68+
measurement=null,
69+
job=null,
70+
rate_time_range=null,
71+
):: common_utils.default_graph(
72+
title=title,
73+
description=description,
74+
datasource=datasource,
75+
labelY1='tuples per second',
76+
panel_width=12,
77+
).addTarget(rps_target(
78+
datasource,
79+
'expirationd_checked_count',
80+
job,
81+
rate_time_range,
82+
policy,
83+
measurement,
84+
)),
85+
86+
tuples_expired(
87+
title='Tuples expired',
88+
description=common_utils.rate_warning(|||
89+
A number of task expired tuples.
90+
Graph shows mean tuples per second.
91+
|||, datasource),
92+
datasource=null,
93+
policy=null,
94+
measurement=null,
95+
job=null,
96+
rate_time_range=null,
97+
):: common_utils.default_graph(
98+
title=title,
99+
description=description,
100+
datasource=datasource,
101+
labelY1='tuples per second',
102+
panel_width=12,
103+
).addTarget(rps_target(
104+
datasource,
105+
'expirationd_expired_count',
106+
job,
107+
rate_time_range,
108+
policy,
109+
measurement,
110+
)),
111+
112+
restarts(
113+
title='Restart count',
114+
description=|||
115+
A number of task restarts since start.
116+
From the start is equal to 1.
117+
|||,
118+
datasource=null,
119+
policy=null,
120+
measurement=null,
121+
job=null,
122+
):: common_utils.default_graph(
123+
title=title,
124+
description=description,
125+
datasource=datasource,
126+
decimals=0,
127+
panel_width=12,
128+
).addTarget(target(
129+
datasource,
130+
'expirationd_restarts',
131+
job,
132+
policy,
133+
measurement,
134+
)),
135+
136+
operation_time(
137+
title='Operation time',
138+
description=|||
139+
A task's operation time.
140+
|||,
141+
datasource=null,
142+
policy=null,
143+
measurement=null,
144+
job=null,
145+
):: common_utils.default_graph(
146+
title=title,
147+
description=description,
148+
datasource=datasource,
149+
format='s',
150+
panel_width=12,
151+
).addTarget(target(
152+
datasource,
153+
'expirationd_working_time',
154+
job,
155+
policy,
156+
measurement,
157+
)),
158+
}

dashboard/prometheus_dashboard.libsonnet

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,4 +152,10 @@ dashboard.new(
152152
job=variable.prometheus.job,
153153
rate_time_range=variable.prometheus.rate_time_range,
154154
)
155+
).addPanels(
156+
section.expirationd(
157+
datasource=variable.datasource.prometheus,
158+
job=variable.prometheus.job,
159+
rate_time_range=variable.prometheus.rate_time_range,
160+
)
155161
)

dashboard/section.libsonnet

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
local cluster = import 'panels/cluster.libsonnet';
22
local cpu = import 'panels/cpu.libsonnet';
33
local crud = import 'panels/crud.libsonnet';
4+
local expirationd = import 'panels/expirationd.libsonnet';
45
local http = import 'panels/http.libsonnet';
56
local luajit = import 'panels/luajit.libsonnet';
67
local net = import 'panels/net.libsonnet';
@@ -1227,6 +1228,40 @@ local tdg_tuples = import 'panels/tdg/tuples.libsonnet';
12271228
),
12281229
],
12291230

1231+
expirationd(datasource, policy=null, measurement=null, job=null, rate_time_range=null):: [
1232+
expirationd.row,
1233+
1234+
expirationd.tuples_checked(
1235+
datasource=datasource,
1236+
policy=policy,
1237+
measurement=measurement,
1238+
job=job,
1239+
rate_time_range=rate_time_range,
1240+
),
1241+
1242+
expirationd.tuples_expired(
1243+
datasource=datasource,
1244+
policy=policy,
1245+
measurement=measurement,
1246+
job=job,
1247+
rate_time_range=rate_time_range,
1248+
),
1249+
1250+
expirationd.restarts(
1251+
datasource=datasource,
1252+
policy=policy,
1253+
measurement=measurement,
1254+
job=job,
1255+
),
1256+
1257+
expirationd.operation_time(
1258+
datasource=datasource,
1259+
policy=policy,
1260+
measurement=measurement,
1261+
job=job,
1262+
),
1263+
],
1264+
12301265
tdg_kafka_common(datasource, policy=null, measurement=null, job=null, rate_time_range=null):: [
12311266
tdg_kafka_common.row,
12321267

example_cluster/project/generate_load.lua

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -525,6 +525,24 @@ local load_generators = {
525525
generate_crud_load,
526526
}
527527

528+
for name, instance in pairs(instances) do
529+
if name:match('router') ~= nil then
530+
local spaces = {instance.net_box.space.MY_SPACE, instance.net_box.space.MY_VINYL_SPACE}
531+
for _, space in ipairs(spaces) do
532+
local task_name = name .. "_" .. space.name
533+
local eval_str = string.format([[
534+
local expirationd = require('expirationd')
535+
local half_true = function() return math.random(0, 1) == 0 and true or false end
536+
local always_true = function() return true end
537+
expirationd.start("%s", %d, half_true, {
538+
process_expired_tuple = always_true,
539+
force = true })
540+
]], task_name, space.id)
541+
instance.net_box:eval(eval_str)
542+
end
543+
end
544+
end
545+
528546
while true do
529547
for name, instance in pairs(instances) do
530548
for _, load_generator in ipairs(load_generators) do

example_cluster/project/project-scm-1.rockspec

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ dependencies = {
1212
'metrics == 0.13.0-1',
1313
'cartridge-cli-extensions == 1.1.1-1',
1414
'crud == 0.11.1',
15+
'expirationd == 1.2.0',
1516
}
1617
build = {
1718
type = 'none';

0 commit comments

Comments
 (0)