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

log-zmq: Модуль логирования ZeroMQ для NGINX

Установка для Debian/Ubuntu

Эти документы применимы к APT пакету nginx-module-log-zmq, предоставляемому репозиторием GetPageSpeed Extras.

  1. Настройте APT репозиторий, как описано в настройке APT репозитория.
  2. Установите модуль:
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, все экземпляры логгеров отключаются.