Создание пользовательской метрики
В примере демонстрируется создание произвольной метрики, для этого используются модуль metrics и пользовательский код на языке Lua.
Узнать больше о пользовательских метриках можно в документации Tarantool.
Для мониторинга используются:
- Prometheus — сбор и хранение метрик;
- Grafana — визуализация метрик.
Содержание:
Для выполнения примера требуются:
- установленные Docker-образы Tarantool DB, Prometheus и Grafana;
- приложение Docker Compose;
- исходные файлы примера
custom_metrics.
Для успешного запуска должны быть свободны следующие порты:
- 2379
- 3000
- 3301--3304
- 8081
- 8088
- 9090
Перейдите в директорию примера custom_metrics:
cd ./docs/docs/ru/assets/examples/custom_metrics/
Стенд состоит из следующих компонентов:
- кластер Tarantool DB:
- 1 роутер;
- 1 набор реплик по 3 хранилища;
- кластер etcd из 3 узлов;
- 1 Tarantool Cluster Manager (TCM);
- средства мониторинга — Prometheus, Grafana.
Запустите всё следующей командой:
make start
После запуска должны работать все контейнеры, кроме init_host.
Также после запуска становятся доступны следующие пользовательские интерфейсы:
- http://localhost:8081 — веб-интерфейс TCM;
- http://localhost:3000 — веб-интерфейс Grafana.
Для входа в TCM откройте в браузере адрес http://localhost:8081. Логин и пароль для входа:
- Username:
admin - Password:
secret
На завершающем этапе запуска кластера выполняется публикация YAML-конфигурации кластера в централизованное хранилище
и применяются миграции.
В примере выполняется миграция из файла ./tt/cluster/migrations/scenario/001_test.lua примера custom_metrics.
В ходе этой миграции создается хранимая функция counter_task.
Каждый вызов этой функции будет увеличивать значение метрики на единицу.
Исходный код функции выглядит так:
function()-- Проверить, была ли переменная уже инициализированаif _G.test_insert_count == nil then-- Инициализировать переменную нужно только один раз_G.test_insert_count = require('metrics').counter('test_insert_count', 'The number of data operations')end-- Функция для генерации метрикиlocal function update_metric(counter)-- Здесь происходит обновление значения метрики. Каждая пара время-значение сопровождается-- меткой. В качестве метки выступает структура с произвольными пользовательскими-- данными, необходимыми для построения нужных графиков. К такой структуре применяется следующее условие:-- количество вариантов значений внутри нее должно быть ограничено, чтобы не-- перегрузить БД, собирающую метрики (как правило, это одна из Time Series баз данных).local label_pairs = {request_type = 'default',}counter:inc(1, label_pairs) -- Увеличить значение счётчика на единицу и одновременно подписать-- новую пару время-значениеend-- Вызвать функцию генерации метрикиupdate_metric(_G.test_insert_count)end]]
Чтобы вызвать хранимую функцию counter_task:
-
В TCM откройте вкладку Stateboard.
-
Выберите в наборе реплик
router-mskузелrouter-mskи в открывшемся окне перейдите на вкладку Terminal. -
Во вкладке Terminal выполните следующую команду:
box.func.counter_task:call()
Откройте в браузере веб-интерфейс Grafana по адресу http://localhost:3000/dashboards. В списке Dashboards выберите панель Tarantool DB dashboard в папке General. Проверьте, что графики показывают данные за последние 15 минут, а частота обновления равна 5 секундам.
Разверните панель Tarantool cluster overview и откройте график Custom count. Чтобы развернуть график на полный экран, нажмите на графике кнопку ... (Menu) в правом верхнем углу и нажмите в выпадающем меню кнопку View.

После каждого вызова хранимой функции counter_task значение restores per second на графике должно увеличиваться на 1.
В графике используется выражение test_insert_count{alias="router-msk"}, которое было задано в хранимой процедуре.
Для остановки стенда выполните следующую команду:
make stop