Логирование медленных запросов для функций и CRUD-запросов
В этом руководстве описано, как настроить запись медленных запросов в журнал для функций и CRUD-запросов.
Подробнее о модуле slow_log можно узнать в разделе Логирование медленных запросов.
Руководство включает следующие шаги:
- Пререквизиты
- Запуск стенда
- Запись CRUD-запросов в журнал
- Логирование пользовательской функции
- Остановка стенда
Для выполнения примера требуются:
-
установленный Docker-образ Tarantool DB;
-
приложение Docker compose;
-
утилита TT CLI;
-
исходные файлы примера
slow_log.
Перейдите в директорию примера slow_log:
cd ./docs/docs/ru/assets/examples/slow_log/
Запустите стенд Tarantool DB:
docker compose up -d
Команда поднимает кластер с двумя хранилищами и одним роутером.
Роль slow_log задана на роутере.
Подробная информация о том, как включить логирование медленных запросов и задать соответствующую конфигурацию, приведена в разделе Настройка журнала медленных запросов.
Чтобы гарантированно получить сообщение в логе, задайте для опции slow_log.threshold значение 0 в конфигурационном файле:
threshold: 0
Подключитесь к роутеру с помощью команды tt connect:
tt connect admin:secret-cluster-cookie@localhost:3300
Команда открывает интерактивную консоль Tarantool, позволяющую работать с базой данных.
В примере данные хранятся в спейсе data со следующим форматом:
box.schema.space.create('data', {if_not_exists = true})box.space.data:format({{ name = 'id', type = 'number' },{ name = 'bucket_id', type = 'unsigned' },{ name = 'data', type = 'any' },})box.space.data:create_index('pk', { parts = {'id'}, if_not_exists = true})box.space.data:create_index('bucket_id', { parts = {'bucket_id'}, unique = false, if_not_exists = true})utils.register_sharding_key('data', {'id'})
Добавьте кортеж в спейс data, используя функцию из модуля CRUD:
crud.replace("data", {1, box.NULL, {}})
После просмотрите логи приложения:
docker compose logs | grep 'Function call crud'
Запись в логе может выглядеть так:
slow_log-tarantool-router-1 | 2023-11-30 14:02:35.599 [12] main/176/main/tarantooldb.app.roles.slow_log I> Function call crud.replace(["data",[1,null,[]]]) was too long: 0.011s
В примере создана персистентная функция app.wait_for, которая ждет заданное количество секунд:
box.schema.func.create('app.wait_for', {language = 'LUA',if_not_exists = true,body = [[function(sleep_time)local log = require('log')local fiber = require('fiber')log.info("start wait_for " .. sleep_time)fiber.sleep(sleep_time)log.info("stop wait_for " .. sleep_time)end]],})
Чтобы включить запись в журнал для функции app.wait_for, обновите секцию slow_log в файле конфигурации:
enable: truethreshold: 3namespaces:- app
Далее подключитесь к роутеру с помощью утилиты tt:
tt connect admin:secret-cluster-cookie@localhost:3300
Вызовите функцию app.wait_for, задав для нее значение в 3 секунды:
box.schema.func.call('app.wait_for', 3)
После просмотрите логи приложения:
docker compose logs | grep wait_for
Запись в логе может выглядеть так:
slow_log-tarantool-router-1 | 2023-11-30 14:13:52.738 [12] main/225/main/tarantool I> start wait_for 3slow_log-tarantool-router-1 | 2023-11-30 14:13:55.740 [12] main/225/main/tarantool I> stop wait_for 3slow_log-tarantool-router-1 | 2023-11-30 14:13:55.740 [12] main/225/main/tarantooldb.app.roles.slow_log I> Function call app.wait_for([3]) was too long: 3.002s
При использовании модуля персистентные функции заменяются на версии с логированием времени выполнения.
Оригинальные функции сохраняются с префиксом __slow_log_orig_.
Для функции app.wait_for будет создана функция __slow_log_orig_app.wait_for.
После отключения модуля функция __slow_log_orig_app.wait_for будет удалена.
Чтобы остановить стенд, выполните следующую команду:
docker compose down