pipelog
Директива `pipelog` отправляет данные журнала доступа HTTP во внешнюю программу через pipe.
Описание
Директива pipelog — это функция, предоставляемая модулем NGINX pipelog, которая позволяет интегрировать ведение журналов доступа NGINX с внешними программами. Эту директиву можно размещать в разных контекстах, включая http, server, location, а также в условиях, указанных с помощью if в блоках location или в контексте limit_except. Она поддерживает гибкий синтаксис, при котором пользователь может указать внешнюю команду для выполнения, за которой по желанию может следовать формат логирования и дополнительные параметры, такие как nonblocking, позволяющие выполнять команду логирования без блокировки основного процесса обработки запроса.
Рекомендуется определять форматы логов с помощью директивы pipelog_format, где можно описать структуру записей журнала. Логи можно отправлять в любую команду, которая читает из стандартного ввода поток текстовых данных. Директива также позволяет использовать условие if для управления тем, когда должно выполняться логирование, что даёт возможность вести выборочное логирование на основе атрибутов запроса или других условий. При наличии формат логирования может ссылаться на несколько переменных, аналогично встроенным форматам логирования NGINX, что позволяет настроить содержимое записей журнала.
По умолчанию директива отключена, и её можно явно выключить с помощью pipelog off;. Для корректного использования этой директивы необходимо внимательно соблюдать синтаксис и требования к выполняемой внешней команде, чтобы обеспечить её способность правильно обрабатывать входящие данные журнала.
Пример конфига
pipelog_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
pipelog "logger -t nginx" main;Убедитесь, что внешняя программа, указанная в команде, может читать из стандартного ввода и корректно обрабатывать данные.
Будьте осторожны с влиянием на производительность при интенсивном логировании через внешние команды, особенно в синхронных блокирующих режимах.
Использование if-условий может приводить к непредвиденному поведению, если они реализованы неправильно; убедитесь, что условия оцениваются ожидаемо.