Создание пользовательской метрики¶
В примере демонстрируется создание произвольной метрики, для этого используются модуль metrics и пользовательский код на языке Lua.
Узнать больше о пользовательских метриках можно в документации Tarantool.
Для мониторинга используются:
Prometheus – сбор и хранение метрик;
Grafana – визуализация метрик.
Содержание:
Пререквизиты¶
Для выполнения примера требуются:
установленные Docker-образы Tarantool DB, Prometheus и Grafana;
приложение Docker Compose;
исходные файлы примера
custom_metrics
.
Запуск стенда¶
Для успешного запуска должны быть свободны следующие порты:
3301..3308
8081
8088
3000
Перейдите в директорию custom_metrics/tt
:
cd ./doc/examples/custom_metrics/tt
Стенд состоит из следующих компонентов:
кластер 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¶
Откройте в браузере веб-интерфейс Grafana по адресу http://localhost:3000/dashboards. В списке Dashboards выберите панель Tarantool 3 dashboard в папке General. Проверьте, что графики показывают данные за последние 15 минут, а частота обновления равна 5 секундам.
Разверните панель Cluster Overview и откройте график Custom count. Чтобы развернуть график на полный экран, нажмите на графике кнопку … (Menu) в правом верхнем углу и нажмите в выпадающем меню кнопку View.
После каждого вызова хранимой функции counter_task
значение restores per second
на графике должно увеличиваться на 1.
В графике используется выражение test_insert_count{alias="router-msk"}
, которое было задано в хранимой процедуре.