Skip to content

Commit f3eadc1

Browse files
Add new metrics (#483)
Co-authored-by: Georgy Moiseev <[email protected]>
1 parent ec58668 commit f3eadc1

File tree

7 files changed

+120
-1
lines changed

7 files changed

+120
-1
lines changed

.github/workflows/test.yml

+4
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ jobs:
4444
cartridge: "2.9.0"
4545
- tarantool: "2.11"
4646
cartridge: "2.10.0"
47+
- tarantool: "3.0"
48+
cartridge: ""
49+
- tarantool: "3.1"
50+
cartridge: ""
4751
runs-on: ubuntu-20.04
4852
steps:
4953
- uses: actions/checkout@v4

CHANGELOG.md

+8
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1818

1919
- Inconsistent metrics descrtiptions for memtx metrics.
2020

21+
- New memory metrics:
22+
- tnt_memtx_tuples_data_total
23+
- tnt_memtx_tuples_data_read_view
24+
- tnt_memtx_tuples_data_garbage
25+
- tnt_memtx_index_total
26+
- tnt_memtx_index_read_view
27+
- tnt_vinyl_memory_tuple
28+
2129
### Deprecated
2230

2331
- Using `cdata` values with `histogram:observe`.

doc/monitoring/metrics_reference.rst

+37
Original file line numberDiff line numberDiff line change
@@ -665,6 +665,9 @@ The following metrics show state memory areas used by vinyl for caches and write
665665
* - ``tnt_vinyl_memory_bloom_filter``
666666
- Amount of memory in bytes used by
667667
:ref:`bloom filters <vinyl-lsm_disadvantages_compression_bloom_filters>`.
668+
* - ``tnt_vinyl_memory_tuple``
669+
- Total size of memory in bytes occupied by Vinyl tuples.
670+
It includes cached tuples and tuples pinned by the Lua world.
668671

669672
.. _metrics-reference-vinyl_scheduler:
670673

@@ -956,3 +959,37 @@ So ``stories`` and ``retained`` need to be measured separately.
956959
Number of retained ``tracking`` tuples / number of stories.
957960
* ``total``
958961
Amount of bytes used by retained ``tracking`` tuples.
962+
963+
964+
~~~~~~~~~~~~~~~~~~~~
965+
Read view statistics
966+
~~~~~~~~~~~~~~~~~~~~
967+
968+
969+
.. container:: table
970+
971+
.. list-table::
972+
:widths: 25 75
973+
:header-rows: 0
974+
975+
* - ``tnt_memtx_tuples_data_total``
976+
- Total amount of memory (in bytes) allocated for data tuples.
977+
This includes ``tnt_memtx_tuples_data_read_view`` and
978+
``tnt_memtx_tuples_data_garbage`` metric values plus tuples that
979+
are actually stored in memtx spaces.
980+
981+
* - ``tnt_memtx_tuples_data_read_view``
982+
- Memory (in bytes) held for read views.
983+
984+
* - ``tnt_memtx_tuples_data_garbage``
985+
- Memory (in bytes) that is unused and scheduled to be freed
986+
(freed lazily on memory allocation).
987+
988+
* - ``tnt_memtx_index_total``
989+
- Total amount of memory (in bytes) allocated for indexing data.
990+
This includes ``tnt_memtx_index_read_view`` metric value
991+
plus memory used for indexing tuples
992+
that are actually stored in memtx spaces.
993+
994+
* - ``tnt_memtx_index_read_view``
995+
- Memory (in bytes) held for read views.

metrics/tarantool/memtx.lua

+30
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,36 @@ local function update()
122122
'Number of retained `read_view` tuples / number of stories',
123123
memtx_stat.mvcc.tuples.read_view.retained.total, {kind = "total"}, nil, {default = true})
124124

125+
-- Tarantool 3.0 memory statistics
126+
127+
local ok, memtx_stat_3 = pcall(box.stat.memtx)
128+
if not ok or memtx_stat_3.data == nil or memtx_stat_3.index == nil then
129+
return
130+
end
131+
132+
collectors_list.memtx_tuples_data_total =
133+
utils.set_gauge('memtx_tuples_data_total',
134+
'Total amount of memory allocated for data tuples',
135+
memtx_stat_3.data.total, nil, nil, {default = true})
136+
collectors_list.memtx_tuples_data_read_view =
137+
utils.set_gauge('memtx_tuples_data_read_view',
138+
'Memory held for read views',
139+
memtx_stat_3.data.read_view, nil, nil, {default = true})
140+
collectors_list.memtx_tuples_data_garbage =
141+
utils.set_gauge('memtx_tuples_data_garbage',
142+
'Memory that is unused and scheduled to be freed',
143+
memtx_stat_3.data.garbage, nil, nil, {default = true})
144+
145+
146+
collectors_list.memtx_index_total =
147+
utils.set_gauge('memtx_index_total',
148+
'Total amount of memory allocated for indexing data',
149+
memtx_stat_3.index.total, nil, nil, {default = true})
150+
collectors_list.memtx_index_read_view =
151+
utils.set_gauge('memtx_index_read_view',
152+
'Memory held for read views',
153+
memtx_stat_3.index.read_view, nil, nil, {default = true})
154+
125155
end
126156

127157
return {

metrics/tarantool/vinyl.lua

+7
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,13 @@ local function update()
6060
utils.set_gauge('vinyl_memory_bloom_filter', 'Size of bloom filter',
6161
vinyl_stat.memory.bloom_filter, nil, nil, {default = true})
6262

63+
if vinyl_stat.memory.tuple ~= nil then
64+
collectors_list.vinyl_memory_tuple =
65+
utils.set_gauge('vinyl_memory_tuple',
66+
'Total size of memory in bytes occupied by Vinyl tuples',
67+
vinyl_stat.memory.tuple, nil, nil, {default = true})
68+
end
69+
6370
collectors_list.vinyl_scheduler_tasks =
6471
utils.set_gauge('vinyl_scheduler_tasks', 'Vinyl tasks count',
6572
vinyl_stat.scheduler.tasks_inprogress, {status = 'inprogress'}, nil, {default = true})

test/tarantool/memtx_metrics_test.lua

+31
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,34 @@ g.test_memtx = function(cg)
6363
end
6464
end)
6565
end
66+
67+
g.test_memtx_read_view = function(cg)
68+
t.skip_if(utils.is_version_less(_TARANTOOL, '3.1.0'),
69+
'Tarantool version is must be v3.1.0 or greater')
70+
71+
cg.server:exec(function()
72+
local metrics = require('metrics')
73+
local memtx = require('metrics.tarantool.memtx')
74+
local utils = require('test.utils') -- luacheck: ignore 431
75+
76+
metrics.enable_default_metrics()
77+
memtx.update()
78+
local default_metrics = metrics.collect()
79+
local log = require('log')
80+
81+
local metrics_list = {
82+
'tnt_memtx_tuples_data_total',
83+
'tnt_memtx_tuples_data_read_view',
84+
'tnt_memtx_tuples_data_garbage',
85+
'tnt_memtx_index_total',
86+
'tnt_memtx_index_read_view',
87+
}
88+
89+
for _, item in ipairs(metrics_list) do
90+
log.info('checking metric: ' .. item)
91+
local metric = utils.find_metric(item, default_metrics)
92+
t.assert(metric)
93+
t.assert_type(metric[1].value, 'number')
94+
end
95+
end)
96+
end

test/tarantool/vinyl_test.lua

+3-1
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,10 @@ g.test_vinyl_metrics_present = function(cg)
3131
if utils.is_version_less(_TARANTOOL, '2.8.3')
3232
and utils.is_version_greater(_TARANTOOL, '2.0.0') then
3333
t.assert_equals(metrics_cnt, 19)
34-
else
34+
elseif utils.is_version_less(_TARANTOOL, '3.0.0') then
3535
t.assert_equals(metrics_cnt, 20)
36+
else
37+
t.assert_equals(metrics_cnt, 21)
3638
end
3739
end)
3840
end

0 commit comments

Comments
 (0)