[BETA!] log-zmq: Модуль логирования ZeroMQ для NGINX
Установка
Вы можете установить этот модуль в любой дистрибутив на базе RHEL, включая, но не ограничиваясь:
- RedHat Enterprise Linux 7, 8, 9 и 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 и Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-log-zmq
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-log-zmq
Включите модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:
load_module modules/ngx_http_log_zmq_module.so;
Этот документ описывает nginx-module-log-zmq v0, выпущенный 28 ноября 2021 года.
Стабильность в производственной среде не гарантируется.
Модуль логирования ZeroMQ для nginx.
ZeroMQ, \zero-em-queue\, — это протокол для обмена сообщениями. Это простой способ общения с использованием любого языка или платформы через inproc, IPC, TCP, TPIC или мультикаст. Он асинхронный и требует лишь небольшую библиотеку.
Описание
Это модуль логирования nginx, интегрированный с библиотекой ZeroMQ.
nginx-log-zmq предоставляет очень эффективный способ логирования данных для одного или нескольких подписчиков PUB/SUB через одну или несколько различных конечных точек. Это может быть полезно для сбора и обработки данных.
Формат сообщения может быть таким же, как традиционный формат логов, что дает интересный способ tail данных через сеть или исследовать другие текстовые форматы, такие как JSON. Как и в традиционном логе, возможно использовать переменные nginx, обновляемые с каждым запросом.
Все сообщения отправляются асинхронно и не блокируют нормальное поведение сервера nginx. Как и ожидалось, соединения устойчивы к сетевым сбоям.
Синопсис
http {
# простое сообщение на IPC конечной точке с 4 потоками и 1000 элементами в очереди
log_zmq_server main "/tmp/main.ipc" ipc 4 1000;
log_zmq_endpoint main "/topic/";
log_zmq_format main '{"remote_addr":"$remote_addr"}'
# отправка сообщений подписчику, слушающему на 127.0.0.1:5556
log_zmq_server secondary 127.0.0.1:5556 tcp 4 1000;
# установка вторичной конечной точки
log_zmq_endpoint secondary "/endpoint/";
# установка формата с использованием многострочного
log_zmq_format secondary '{"request_uri":"$request_uri",'
'{"status":"$status"}';
server {
location /status {
# отключить все сообщения от log_zmq для этого местоположения
log_zmq_off all;
}
location /endpoint {
# отключить основные сообщения от log_zmq для этого местоположения
log_zmq_off main;
}
}
}
Директивы
log_zmq_server
синтаксис: log_zmq_server <definition_name> <address> <ipc|tcp> <threads> <queue size>
по умолчанию: нет
контекст: http
Настраивает сервер (подписчик PUB/SUB) для подключения.
Следующие параметры обязательны:
definition_name <name> - имя, которое nginx будет использовать для идентификации этого экземпляра логгера.
address <path>|<ipaddress>:<port> - адрес подписчика. Если вы используете протокол IPC, вы должны указать <path> для unix-сокета. Если вы используете протокол TCP, вы должны указать <ipaddress> и <port>, на котором слушает ваш подписчик ZeroMQ.
protocol <ipc|tcp> - протокол, который будет использоваться для связи.
threads <integer> - количество потоков ввода-вывода, которые будут использоваться.
queue_size <integer> - максимальный размер очереди для сообщений, ожидающих отправки.
log_zmq_endpoint
синтаксис: log_zmq_endpoint <definition_name> "<topic>"
по умолчанию: нет
контекст: http
Настраивает тему для сообщений ZeroMQ.
definition_name <name> - имя, которое nginx будет использовать для идентификации этого экземпляра логгера.
topic <topic> - тема для сообщений. Это строка (которая может быть переменной nginx), предшествующая каждому отправляемому сообщению. Например, если вы отправляете сообщение "hello" на тему "/talk:", сообщение будет выглядеть как "/talk:hello".
Пример:
http {
log_zmq_server main "/tmp/example.ipc" 4 1000;
# отправить сообщение для темы на основе статуса ответа
log_zmq_endpoint main "/remote/$status";
}
log_zmq_format
синтаксис: log_zmq_format <definition_name> "<format>"
по умолчанию: нет
контекст: http
Настраивает формат сообщения ZeroMQ.
definition_name <name> - имя, которое nginx будет использовать для идентификации этого экземпляра логгера.
format <format> - формат для сообщений. Это определяет фактические сообщения, отправляемые подписчику PUB/SUB. Он следует тем же правилам, что и стандартная директива log_format. Здесь также можно использовать переменные nginx и разбивать его на несколько строк.
http {
log_zmq_format main '{"line1": value,'
'{"line2": value}';
}
log_zmq_off
синтаксис: log_zmq_off <definition_name>|all
по умолчанию: нет
контекст: location
Отключает логирование ZeroMQ в текущем контексте.
definition_name <name> - имя экземпляра логгера, который нужно отключить. Если используется специальное имя all, все экземпляры логгера отключаются.
GitHub
Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-log-zmq.