TDB Documentation portal logo
Помощь
Обновлена 30 июня 2026 г. в 07:00

Создание пользовательской метрики

В примере демонстрируется создание произвольной метрики, для этого используются модуль 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.

Также после запуска становятся доступны следующие пользовательские интерфейсы:

Для входа в 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:

  1. В TCM откройте вкладку Stateboard.

  2. Выберите в наборе реплик router-msk узел router-msk и в открывшемся окне перейдите на вкладку Terminal.

  3. Во вкладке Terminal выполните следующую команду:

    box.func.counter_task:call()

Просмотр метрики в Grafana

Откройте в браузере веб-интерфейс 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