Настройка журнала медленных запросов
В этом руководстве описано, как включить технологическую роль app.roles.slow_log и настроить логирование медленных запросов.
Содержание:
- Включение журнала медленных запросов
- Установка порогового значения
- Добавление функции для логирования
По умолчанию, запись медленных запросов в журнал отключена. Включить логирование медленных запросов можно с помощью опции slow_log.enable. Для включения записи:
-
Задайте на нужном экземпляре технологическую роль slow_log.
-
Задайте опцию
slow_log.enableв файле конфигурации (config.yml) или в веб-интерфейсе TCM на вкладке Configuration. Для этого добавьте секциюapp.roles.slow_logв секцию конфигурацииroles_cfg:roles_cfg:app.roles.slow_log:enable: true
По умолчанию запись будет включена для запросов через модуль CRUD.
Пример
В спейс data добавлен кортеж с помощью функции из модуля CRUD:
require('crud').replace("data", {1, box.NULL, {}})
Запись в логе при этом может выглядеть так:
tarantool-router-msk-1 | 2025-02-05 11:17:23.203 [1] main/231/main/app.roles.slow_log slow_log.lua:21I> Function call crud.replace(["data",[1,null,[]]]) was too long: 0.000s
Запись в логе для такой функции может выглядеть так:
Задать пороговое значение для времени выполнения запроса можно с помощью опции slow_log.threshold. При превышении этого значения запрос будет записан в журнал:
app.roles.slow_log:enable: truethreshold: 0
По умолчанию, значение threshold равно 0.5.
Чтобы гарантированно получить сообщение в логе, для опции slow_log.threshold в конфигурационном файле задано значение 0.
Добавить функции, которые нужно логировать, можно с помощью опции slow_log.namespace. В примере установлено логирование для
- функций из модуля
app(функции из_G['app']); - для персистентных функций с префиксом
app..
app.roles.slow_log:enable: truethreshold: 0namespaces:- "app"
Пример
При выполнении миграции была создана персистентная функция app.wait_for, которая ждет заданное количество секунд:
box.schema.func.call('app.wait_for', 3)
Запись в логе для такой функции может выглядеть так:
tarantool-router-msk-1 | 2025-02-05 11:55:16.351 [1] main/792/main/tarantool [string "return function(sleep_tim..."]:4 I> start wait_for 3tarantool-router-msk-1 | 2025-02-05 11:55:19.351 [1] main/792/main/tarantool [string "return function(sleep_tim..."]:6 I> stop wait_for 3tarantool-router-msk-1 | 2025-02-05 11:55:19.351 [1] main/792/main/app.roles.slow_log slow_log.lua:21 I> Function call app.wait_for([3]) was too long: 3.000s
При использовании модуля slow_log персистентные функции заменяются на версии с логированием времени выполнения.
Оригинальные функции сохраняются с префиксом __slow_log_orig_.
Для функции app.wait_for будет создана функция __slow_log_orig_app.wait_for.
После отключения модуля функция __slow_log_orig_app.wait_for будет удалена.
После задания всех опций финальная конфигурация может выглядеть так:
roles_cfg:app.roles.slow_log:enable: truethreshold: 0namespaces:- "app"
Полное описание опций конфигурации slow_log приведено в Справочнике по конфигурации.