log-zmq: Модуль логирования ZeroMQ для NGINX
Установка для Debian/Ubuntu
Эти документы применимы к APT пакету nginx-module-log-zmq, предоставляемому репозиторием GetPageSpeed Extras.
- Настройте APT репозиторий, как описано в настройке APT репозитория.
- Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-log-zmq
Показать дистрибутивы и архитектуры
| Дистрибутив | Версия | Компонент | Архитектуры |
|-------------|-------------------|-------------|----------------|
| debian | bookworm | main | amd64, arm64 |
| debian | bookworm-mainline | main | amd64, arm64 |
| debian | trixie | main | amd64, arm64 |
| debian | trixie-mainline | main | amd64, arm64 |
| ubuntu | focal | main | amd64, arm64 |
| ubuntu | focal-mainline | main | amd64, arm64 |
| ubuntu | jammy | main | amd64, arm64 |
| ubuntu | jammy-mainline | main | amd64, arm64 |
| ubuntu | noble | main | amd64, arm64 |
| ubuntu | noble-mainline | main | amd64, arm64 |
Модуль логирования 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 <имя_определения> <адрес> <ipc|tcp> <потоки> <размер_очереди>
по умолчанию: нет
контекст: http
Настраивает сервер (PUB/SUB подписчик) для подключения.
Следующие параметры являются обязательными:
имя_определения <имя> - имя, которое nginx будет использовать для идентификации этого экземпляра логгера.
адрес <путь>|<ipaddress>:<port> - адрес подписчика. Если вы используете протокол IPC, вы должны указать <path> для unix-сокета. Если вы используете протокол TCP, вы должны указать <ipaddress> и <port>, на котором ваш подписчик ZeroMQ прослушивает.
протокол <ipc|tcp> - протокол, который будет использоваться для связи.
потоки <целое число> - количество I/O потоков, которые будут использоваться.
размер_очереди <целое число> - максимальный размер очереди для сообщений, ожидающих отправки.
log_zmq_endpoint
синтаксис: log_zmq_endpoint <имя_определения> "<тема>"
по умолчанию: нет
контекст: http
Настраивает тему для сообщений ZeroMQ.
имя_определения <имя> - имя, которое nginx будет использовать для идентификации этого экземпляра логгера.
тема <тема> - тема для сообщений. Это строка (которая может быть переменной 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 <имя_определения> "<формат>"
по умолчанию: нет
контекст: http
Настраивает формат сообщения ZeroMQ.
имя_определения <имя> - имя, которое nginx будет использовать для идентификации этого экземпляра логгера.
формат <формат> - формат для сообщений. Он определяет фактические сообщения, отправляемые подписчику PUB/SUB. Он следует тем же правилам, что и стандартная директива log_format. Здесь можно использовать переменные nginx, а также разбивать его на несколько строк.
http {
log_zmq_format main '{"line1": value,'
'{"line2": value}';
}
log_zmq_off
синтаксис: log_zmq_off <имя_определения>|all
по умолчанию: нет
контекст: location
Отключить логирование ZeroMQ в текущем контексте.
имя_определения <имя> - имя экземпляра логгера, который следует отключить. Если используется специальное имя all, все экземпляры логгеров отключаются.