Перейти к содержанию

[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.