Модуль ngx_stream_log_module

Пример конфигурации
Директивы
     access_log
     log_format
     open_log_file_cache

Модуль ngx_stream_log_module (1.11.4) записывает логи сессий в указанном формате.

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

log_format basic '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time';

access_log /spool/logs/nginx-access.log basic buffer=32k;

Директивы

Синтаксис: access_log путь формат [buffer=размер] [gzip[=степень]] [flush=время] [if=условие];
access_log off;
Умолчание:
access_log off;
Контекст: stream, server

Задаёт путь, формат и настройки буферизованной записи в лог. На одном уровне конфигурации может использоваться несколько логов. Запись в syslog настраивается указанием префикса “syslog:” в первом параметре. Специальное значение off отменяет все директивы access_log для текущего уровня.

Если задан размер буфера с помощью параметра buffer или указан параметр gzip, то запись будет буферизованной.

Размер буфера должен быть не больше размера атомарной записи в дисковый файл. Для FreeBSD этот размер неограничен.

При включённой буферизации данные записываются в файл:

Если задан параметр gzip, то буфер будет сжиматься перед записью в файл. Степень сжатия может быть задана в диапазоне от 1 (быстрее, но хуже сжатие) до 9 (медленнее, но лучше сжатие). По умолчанию используются буфер размером 64К байт и степень сжатия 1. Данные сжимаются атомарными блоками, и в любой момент времени лог-файл может быть распакован или прочитан с помощью утилиты “zcat”.

Пример:

access_log /path/to/log.gz basic gzip flush=5m;

Для поддержки gzip-сжатия логов nginx должен быть собран с библиотекой zlib.

В пути файла можно использовать переменные, но такие логи имеют некоторые ограничения:

Параметр if включает условную запись в лог. Сессия не будет записываться в лог, если результатом вычисления условия является “0” или пустая строка.

Синтаксис: log_format название [escape=default|json|none] строка ...;
Умолчание:
Контекст: stream

Задаёт формат лога, например:

log_format proxy '$remote_addr [$time_local] '
                 '$protocol $status $bytes_sent $bytes_received '
                 '$session_time "$upstream_addr" '
                 '"$upstream_bytes_sent" "$upstream_bytes_received" "$upstream_connect_time"';

Параметр escape (1.11.8) позволяет задать экранирование символов json или default в переменных, по умолчанию используется default. Параметр none (1.13.10) отключает экранирование символов.

При использовании default символы “"”, “\”, a также символы со значениями меньше 32 или больше 126 экранируются как “\xXX”. Если значение переменной не найдено, то в качестве значения в лог будет записываться дефис (“-”).

При использовании json экранируются все символы, недопустимые в JSON строках: символы “"” и “\” экранируются как “\"” и “\\”, символы со значениями меньше 32 экранируются как “\n”, “\r”, “\t”, “\b”, “\f” или “\u00XX”.

Синтаксис: open_log_file_cache max=N [inactive=время] [min_uses=N] [valid=время];
open_log_file_cache off;
Умолчание:
open_log_file_cache off;
Контекст: stream, server

Задаёт кэш, в котором хранятся дескрипторы файлов часто используемых логов, имена которых заданы с использованием переменных. Параметры директивы:

max
задаёт максимальное число дескрипторов в кэше; при переполнении кэша наименее востребованные (LRU) дескрипторы закрываются
inactive
задаёт время, после которого закэшированный дескриптор закрывается, если к нему не было обращений в течение этого времени; по умолчанию 10 секунд
min_uses
задаёт минимальное число использований файла в течение времени, заданного параметром inactive, после которого дескриптор файла будет оставаться открытым в кэше; по умолчанию 1
valid
задаёт, через какое время нужно проверять, что файл ещё существует под тем же именем; по умолчанию 60 секунд
off
запрещает кэш

Пример использования:

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;