sqlitelog_async

Директива `sqlitelog_async` настраивает использование асинхронного пула потоков для логирования запросов NGINX в базу данных SQLite.

Синтаксисsqlitelog_async thread_pool_name;
По умолчаниюnone
Контекстhttp
Аргументы1

Описание

Директива sqlitelog_async позволяет NGINX записывать информацию о запросах в базу данных SQLite с использованием пула потоков, что повышает производительность, поскольку операции логирования выполняются в фоновом режиме и не блокируют потоки обработки запросов. Это может быть полезно в средах с высоким трафиком, где синхронное логирование может вызывать задержки. Директива принимает один аргумент — имя пула потоков, который она должна использовать; этот пул должен быть предварительно определён в конфигурации NGINX.

Когда эта директива установлена, NGINX будет помещать задачи логирования в очередь назначенного пула потоков, что позволит обрабатывать несколько записей логов одновременно. Это не только повышает эффективность процесса логирования, но и помогает избежать узких мест в системе логирования в периоды пикового трафика. Однако для использования этой функции требуется, чтобы NGINX был скомпилирован с включённой поддержкой потоков (NGX_THREADS); в противном случае директива не будет функционировать должным образом. Форматы логов и общая настройка логирования также должны быть корректно сконфигурированы, чтобы в полной мере использовать возможности этой директивы.

Преимущество по производительности зависит от того, как настроен пул потоков (по размеру и нагрузке). Пул потоков можно определить с помощью директивы thread_pool, и его оптимальная конфигурация может варьироваться в зависимости от нагрузки на сервер и конкретных требований приложения.

Пример конфига

http {
    thread_pool my_pool threads=4 max_queue=512;
    sqlitelog_async my_pool;
    sqlitelog_format myformat $remote_addr $status;
    sqlitelog /path/to/log.db myformat;
}

Убедитесь, что пул потоков определён до использования sqlitelog_async.

NGINX должен быть скомпилирован с поддержкой потоков; в противном случае директива не будет иметь эффекта.

Учтите риск конкуренции за доступ к базе данных или блокировок при чрезмерно высокой частоте логирования.

← Ко всем директивам