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

sts: Модуль статуса трафика сервера потока Nginx

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

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

  1. Настройте APT репозиторий, как описано в настройке APT репозитория.
  2. Установите модуль:
sudo apt-get update
sudo apt-get install nginx-module-sts
Показать дистрибутивы и архитектуры
| Distro   | Suite             | Component   | Architectures   |
|----------|-------------------|-------------|-----------------|
| 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    |

License

Модуль статуса трафика сервера потока Nginx

Скриншоты

nginx-module-sts screenshot

Синопсис

http {
    stream_server_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            stream_server_traffic_status_display;
            stream_server_traffic_status_display_format html;
        }
    }
}

stream {
    server_traffic_status_zone;

    ...

    server {
        ...
    }
}

Описание

Это модуль Nginx, который предоставляет доступ к информации о статусе трафика сервера потока. Это портированная версия nginx-module-vts для подсистемы "потока" NGINX, чтобы поддерживать те же функции, что и в nginx-module-vts. Он содержит текущий статус, такой как сервера, серверы верхнего уровня, фильтры, определенные пользователем.

Прежде всего, требуется указать как директиву server_traffic_status_zone в блоке потока, так и stream_server_traffic_status_zone в блоке HTTP, и затем, если директива stream_server_traffic_status_display установлена, к ней можно получить доступ следующим образом:

  • /status/format/json
  • Если вы запросите /status/format/json, будет возвращен JSON-документ, содержащий текущие данные о деятельности для использования в живых панелях и сторонних инструментах мониторинга.
  • /status/format/html
  • Если вы запросите /status/format/html, будет возвращена встроенная живая панель в HTML, которая делает внутренний запрос к /status/format/json.
  • /status/format/jsonp
  • Если вы запросите /status/format/jsonp, будет возвращена функция обратного вызова JSONP, содержащая текущие данные о деятельности для использования в живых панелях и сторонних инструментах мониторинга.
  • /status/format/prometheus
  • Если вы запросите /status/format/prometheus, будет возвращен документ prometheus, содержащий текущие данные о деятельности.
  • /status/control
  • Если вы запросите /status/control, будет возвращен JSON-документ после сброса или удаления зон через строку запроса. См. Управление.

JSON-документ содержит следующее:

{
    "hostName": ...,
    "nginxVersion": ...,
    "loadMsec": ...,
    "nowMsec": ...,
    "connections": {
        "active":...,
        "reading":...,
        "writing":...,
        "waiting":...,
        "accepted":...,
        "handled":...,
        "requests":...
    },
    "sharedZones": {
        "name":...,
        "maxSize":...,
        "usedSize":...,
        "usedNode":...
    },
    "streamServerZones": {
        "...":{
            "port":...,
            "protocol":...,
            "connectCounter":...,
            "inBytes":...,
            "outBytes":...,
            "responses":{
                "1xx":...,
                "2xx":...,
                "3xx":...,
                "4xx":...,
                "5xx":...,
            },
            "sessionMsecCounter":...,
            "sessionMsec":...,
            "sessionMsecs":{
                "times":[...],
                "msecs":[...]
            },
            "sessionBuckets":{
                "msecs":[...],
                "counters":[...]
            }
        }
        ...
    },
    "streamFilterZones": {
        "...":{
            "...":{

                "port":...,
                "protocol":...,
                "connectCounter":...,
                "inBytes":...,
                "outBytes":...,
                "responses":{
                    "1xx":...,
                    "2xx":...,
                    "3xx":...,
                    "4xx":...,
                    "5xx":...,
                },
                "sessionMsecCounter":...,
                "sessionMsec":...,
                "sessionMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "sessionBuckets":{
                    "msecs":[...],
                    "counters":[...]
                }
            },
            ...
        },
        ...
    },
    "streamUpstreamZones": {
        "...":[
            {
                "server":...,
                "connectCounter":...,
                "inBytes":...,
                "outBytes":...,
                "responses":{
                    "1xx":...,
                    "2xx":...,
                    "3xx":...,
                    "4xx":...,
                    "5xx":...
                },
                "sessionMsecCounter":...,
                "sessionMsec":...,
                "sessionMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "sessionBuckets":{
                    "msecs":[...]
                    "counters":[...]
                },
                "uSessionMsecCounter":...,
                "uSessionMsec":...,
                "uSessionMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "uSessionBuckets":{
                    "msecs":[...]
                    "counters":[...]
                },
                "uConnectMsecCounter":...,
                "uConnectMsec":...,
                "uConnectMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "uConnectBuckets":{
                    "msecs":[...]
                    "counters":[...]
                },
                "uFirstByteMsecCounter":...,
                "uFirstByteMsec":...,
                "uFirstByteMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "uFirstByteBuckets":{
                    "msecs":[...]
                    "counters":[...]
                },
                "weight":...,
                "maxFails":...,
                "failTimeout":...,
                "backup":...,
                "down":...
            }
            ...
        ],
        ...
    }
}
  • main
  • Базовая версия, время безотказной работы ((nowMsec - loadMsec)/1000)
  • nowMsec, loadMsec в миллисекундах.
  • connections
  • Общее количество подключений и запросов (так же, как в модуле stub_status в NGINX)
  • streamServerZones
  • Трафик (входящий/исходящий) и количество запросов и ответов и статус (1xx, 2xx...) отношение попаданий для каждой зоны сервера
  • Общий трафик (входящий/исходящий) и количество запросов и ответов (Имя зоны *) и отношение попаданий
  • streamFilterZones
  • Трафик (входящий/исходящий) и количество запросов и ответов и статус (1xx, 2xx...) отношение попаданий для каждой зоны сервера, отфильтрованной по директиве server_traffic_status_filter_by_set_key
  • Общий трафик (входящий/исходящий) и количество запросов и ответов (Имя зоны *) и отношение попаданий, отфильтрованный по директиве server_traffic_status_filter_by_set_key
  • streamUpstreamZones
  • Трафик (входящий/исходящий) и количество запросов и ответов для каждого сервера в каждой группе верхних уровней
  • Текущие настройки (вес, maxfails, failtimeout...) в nginx.conf

Директива stream_server_traffic_status_display_format устанавливает формат вывода по умолчанию, который является одним из json, jsonp, html, prometheus. (По умолчанию: json)

Расчет трафика производится следующим образом:

  • streamServerZones
  • in += requested_bytes
  • out += sent_bytes
  • streamFilterZones
  • in += requested_bytes через фильтр
  • out += sent_bytes через фильтр
  • streamUpstreamZones
  • in += requested_bytes через серверные зоны
  • out += sent_bytes через серверные зоны

Все расчеты происходят в фазе обработки логов Nginx.

Предостережения: данный модуль зависит от системы логирования nginx (NGX_STREAM_LOG_PHASE: последняя фаза потока nginx), поэтому трафик может быть в определенных обстоятельствах отличен от реального трафика по полосе пропускания. Вебсокеты, отмененные загрузки могут быть причиной неточностей. Работа модуля не зависит от того, включена или отключена директива access_log. Снова, этот модуль работает хорошо с "access_log off".

Управление

Можно сбросить или удалить зоны трафика через строку запроса. Ответ запроса будет в виде JSON-документа.

  • Синтаксис URI
  • /{status_uri}/control?cmd={command}&group={group}&zone={name}
http {

    stream_server_traffic_status_zone;

    ...

    server {

        server_name example.org;

        ...


        location /status {
            stream_server_traffic_status_display;
            stream_server_traffic_status_display_format html;
        }
    }                                                                                                                                                                                           }
}

stream {
    geoip_country    /usr/share/GeoIP/GeoIP.dat;

    server_traffic_status_zone;

    server_traffic_status_filter_by_set_key $geoip_country_code country::*;

    server {

        ...

    }

    ...

}

Если задать так, тогда uri управления будет как example.org/status/control.

Доступные аргументы запроса следующие: * cmd=\<status|reset|delete> * status * Возвращает статус зон трафика в json формате как status/format/json. * reset * Сбрасывает зоны трафика без удаления узлов в общей памяти. (= инициализирует до 0) * delete * Удаляет зоны трафика в общей памяти. При повторном запросе они будут воспроизведены. * group=\<server|filter|upstream@alone|upstream@group|*> * server * filter * upstream@alone * upstream@group * * * zone=name * server * name * filter * filter_group@name * upstream@group * upstream_group@name * upstream@alone * @name

Чтобы получить статус зон трафика в реальном времени

Это похоже на status/format/json, за исключением того, что можно получать каждую зону.

Чтобы получить полные зоны

  • Это точно так же, как status/format/json.
  • /status/control?cmd=status&group=*

Чтобы получить групповые зоны

  • streamServerZones
  • /status/control?cmd=status&group=server&zone=*
  • streamFilterZones
  • /status/control?cmd=status&group=filter&zone=*
  • streamUpstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=*
  • streamUpstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=*

Чтобы получить каждую зону

  • отдельная зона в streamServerZones
  • /status/control?cmd=status&group=server&zone=name
  • отдельная зона в streamFilterZones
  • /status/control?cmd=status&group=filter&zone=filter_group@name
  • отдельная зона в streamUpstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=upstream_group@name
  • отдельная зона в streamUpstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=name

Чтобы сбросить зоны трафика в реальном времени

Это сбрасывает значения указанных зон до 0.

Чтобы сбросить полные зоны

  • /status/control?cmd=reset&group=*

Чтобы сбросить групповые зоны

  • streamServerZones
  • /status/control?cmd=reset&group=server&zone=*
  • streamFilterZones
  • /status/control?cmd=reset&group=filter&zone=*
  • streamUpstreamZones
  • /status/control?cmd=reset&group=upstream@group&zone=*
  • streamUpstreamZones::nogroups
  • /status/control?cmd=reset&group=upstream@alone&zone=*

Чтобы сбросить каждую зону

  • отдельная зона в streamServerZones
  • /status/control?cmd=reset&group=server&zone=name
  • отдельная зона в streamFilterZones
  • /status/control?cmd=reset&group=filter&zone=filter_group@name
  • отдельная зона в streamUpstreamZones
  • /status/control?cmd=reset&group=upstream@group&zone=upstream_group@name
  • отдельная зона в streamUpstreamZones::nogroups
  • /status/control?cmd=reset&group=upstream@alone&zone=name

Чтобы удалить зоны трафика в реальном времени

Это удаляет указанные зоны в общей памяти.

Чтобы удалить полные зоны

  • /status/control?cmd=delete&group=*

Чтобы удалить групповые зоны

  • streamServerZones
  • /status/control?cmd=delete&group=server&zone=*
  • streamFilterZones
  • /status/control?cmd=delete&group=filter&zone=*
  • streamUpstreamZones
  • /status/control?cmd=delete&group=upstream@group&zone=*
  • streamUpstreamZones::nogroups
  • /status/control?cmd=delete&group=upstream@alone&zone=*

Чтобы удалить каждую зону

  • отдельная зона в streamServerZones
  • /status/control?cmd=delete&group=server&zone=name
  • отдельная зона в streamFilterZones
  • /status/control?cmd=delete&group=filter&zone=filter_group@name
  • отдельная зона в streamUpstreamZones
  • /status/control?cmd=delete&group=upstream@group&zone=upstream_group@name
  • отдельная зона в streamUpstreamZones::nogroups
  • /status/control?cmd=delete&group=upstream@alone&zone=name

JSON

Следующая информация о статусе предоставляется в формате JSON:

Json, используемый статусом

/{status_uri}/format/json

/{status_uri}/control?cmd=status&...

  • hostName
  • Имя хоста.
  • nginxVersion
  • Версия предоставленного.
  • loadMsec
  • Время загрузки процесса в миллисекундах.
  • nowMsec
  • Текущее время в миллисекундах.
  • connections
  • active
    • Текущее количество активных клиентских подключений.
  • reading
    • Общее количество читающих клиентских подключений.
  • writing
    • Общее количество записывающих клиентских подключений.
  • waiting
    • Общее количество ожидающих клиентских подключений.
  • accepted
    • Общее количество принятых клиентских подключений.
  • handled
    • Общее количество обработанных клиентских подключений.
  • requests
    • Общее количество запрошенных клиентских подключений.
  • sharedZones
  • name
    • Имя общей памяти, указанной в конфигурации (по умолчанию: stream_server_traffic_status).
  • maxSize
    • Ограничение на максимальный размер общей памяти, указанной в конфигурации.
  • usedSize
    • Текущий размер общей памяти.
  • usedNode
    • Текущее количество узлов, использующихся в общей памяти. Можно получить приблизительный размер одного узла по следующей формуле: (usedSize / usedNode).
  • streamServerZones
  • connectCounter
    • Общее количество клиентских запросов, полученных от клиентов.
  • inBytes
    • Общее количество байтов, полученных от клиентов.
  • outBytes
    • Общее количество байтов, отправленных клиентам.
  • responses
    • 1xx, 2xx, 3xx, 4xx, 5xx
    • Количество ответов со статус-кодами 1xx, 2xx, 3xx, 4xx и 5xx.
  • sessionMsecCounter
    • Количество накопленного времени обработки запросов в миллисекундах.
  • sessionMsec
    • Среднее время обработки запросов в миллисекундах.
  • sessionMsecs
    • times
    • Время в миллисекундах на времени обработки запросов.
    • msecs
    • Время обработки запросов в миллисекундах.
  • sessionBuckets
    • msecs
    • Значения ведер гистограммы, установленные директивой server_traffic_status_histogram_buckets.
    • counters
    • Кумулятивные значения по причине того, что каждое значение ведра больше или равно времени обработки запроса.
  • streamFilterZones
  • Предоставляет те же поля, что и streamServerZones, за исключением того, что они включают имена групп.
  • streamUpstreamZones
  • server
    • Адрес сервера.
  • connectCounter
    • Общее количество клиентских подключений, перенаправленных на этот сервер.
  • inBytes
    • Общее количество байтов, полученных с этого сервера.
  • outBytes
    • Общее количество байтов, отправленных на этот сервер.
  • responses
    • 1xx, 2xx, 3xx, 4xx, 5xx
    • Количество ответов со статус-кодами 1xx, 2xx, 3xx, 4xx и 5xx.
  • sessionMsecCounter
    • Количество накопленного времени обработки запросов в миллисекундах, включая верхний уровень.
  • sessionMsec
    • Среднее время обработки запросов в миллисекундах, включая верхний уровень.
  • sessionMsecs
    • times
    • Время в миллисекундах на времени обработки запросов.
    • msecs
    • Время обработки запросов в миллисекундах, включая верхний уровень.
  • sessionBuckets
    • msecs
    • Значения ведер гистограммы, установленные директивой server_traffic_status_histogram_buckets.
    • counters
    • Кумулятивные значения по причине того, что каждое значение ведра больше или равно времени обработки запроса.
  • uSessionMsecCounter
    • Количество накопленного времени сессии в миллисекундах к серверу верхнего уровня.
  • uSessionMsec
    • Среднее время продолжительности сессии в миллисекундах к серверу верхнего уровня.
  • uSessionMsecs
    • times
    • Время в миллисекундах на времени обработки запросов.
    • msecs
    • Время продолжительности сессии в миллисекундах к серверу верхнего уровня.
  • uSessionBuckets
    • msecs
    • Значения ведер гистограммы, установленные директивой server_traffic_status_histogram_buckets.
    • counters
    • Кумулятивные значения по причине того, что каждое значение ведра больше или равно времени продолжительности сессии к серверу верхнего уровня.
  • uConnectMsecCounter
    • Количество накопленного времени на соединение с сервером верхнего уровня.
  • uConnectMsec
    • Среднее время в миллисекундах на соединение с сервером верхнего уровня (1.11.4).
  • uConnectMsecs
    • times
    • Время в миллисекундах на времени обработки запросов.
    • msecs
    • Время в миллисекундах на соединение с сервером верхнего уровня.
  • uConnectBuckets
    • msecs
    • Значения ведер гистограммы, установленные директивой server_traffic_status_histogram_buckets.
    • counters
    • Кумулятивные значения по причине того, что каждое значение ведра больше или равно времени на соединение с сервером верхнего уровня.
  • uFirstByteMsecCounter
    • Количество накопленного времени в миллисекундах для получения первого байта данных.
  • uFirstByteMsec
    • Среднее время в миллисекундах для получения первого байта данных (1.11.4).
  • uFirstByteMsecs
    • times
    • Время в миллисекундах на времени обработки запросов.
    • msecs
    • Время в миллисекундах для получения первого байта данных (1.11.4).
  • uFirstByteBuckets
    • msecs
    • Значения ведер гистограммы, установленные директивой server_traffic_status_histogram_buckets.
    • counters
    • Кумулятивные значения по причине того, что каждое значение ведра больше или равно времени для получения первого байта данных.
  • weight
    • Текущая настройка weight сервера.
  • maxFails
    • Текущая настройка max_fails сервера.
  • failTimeout
    • Текущая настройка fail_timeout сервера.
  • backup
    • Текущая настройка backup сервера.
  • down
    • Текущая настройка down сервера.

Json, используемый для управления

/{status_uri}/control?cmd=reset&...

/{status_uri}/control?cmd=delete&...

  • processingReturn
  • Результат true или false.
  • processingCommandString
  • Запрошенная строка команды.
  • processingGroupString
  • Запрошенная строка группы.
  • processingZoneString
  • Запрошенная строка зоны.
  • processingCounts
  • Фактическое количество обработок.

Переменные

Следующие встроенные переменные предоставляются в блоке stream:

  • $sts_connect_counter
  • Общее количество клиентских запросов, полученных от клиентов.
  • $sts_in_bytes
  • Общее количество байтов, полученных от клиентов.
  • $sts_out_bytes
  • Общее количество байтов, отправленных клиентам.
  • $sts_1xx_counter
  • Количество ответов со статус-кодами 1xx.
  • $sts_2xx_counter
  • Количество ответов со статус-кодами 2xx.
  • $sts_3xx_counter
  • Количество ответов со статус-кодами 3xx.
  • $sts_4xx_counter
  • Количество ответов со статус-кодами 4xx.
  • $sts_5xx_counter
  • Количество ответов со статус-кодами 5xx.
  • $sts_session_time
  • Среднее время обработки запросов.

Ограничение

Можно ограничить общий трафик для каждого сервера с помощью директивы server_traffic_status_limit_traffic. Также можно ограничить весь трафик с помощью директивы server_traffic_status_limit_traffic_by_set_key. Когда лимит превышен, сервер вернет ошибку 503 (Служба временно недоступна) в ответ на запрос. Код возврата может быть изменен.

Чтобы ограничить трафик для сервера

stream {

    server_traffic_status_zone;

    ...

    server {

        listen 1981;

        server_traffic_status_limit_traffic in:64G;
        server_traffic_status_limit_traffic out:1024G;

        ...
    }
}
  • Ограничивает входящий/исходящий общий трафик на 1981/tcp до 64G и 1024G соответственно.

Чтобы ограничить трафик для фильтра

stream {
    geoip_country /usr/share/GeoIP/GeoIP.dat;

    server_traffic_status_zone;

    ...

    server {

        listen 1981;

        server_traffic_status_filter_by_set_key $geoip_country_code country::$server_addr;
        server_traffic_status_limit_traffic_by_set_key FG@country::$server_addr@US out:1024G;
        server_traffic_status_limit_traffic_by_set_key FG@country::$server_addr@CN out:2048G;

        ...

    }
}
  • Ограничивает общий трафик в США и Китае на example.org до 1024G и 2048G соответственно.

Чтобы ограничить трафик для верхнего уровня

stream {

    server_traffic_status_zone;

    ...

    upstream backend {
        server 10.10.10.17:80;
        server 10.10.10.18:80;
    }

    server {

        listen 1981;

        server_traffic_status_limit_traffic_by_set_key UG@backend@10.10.10.17:80 in:512G;
        server_traffic_status_limit_traffic_by_set_key UG@backend@10.10.10.18:80 in:1024G;
        proxy_pass backend;

        ...

    }
}
  • Ограничивает общий трафик, проходящий через верхний уровень, на 1981/tcp до 512G и 1024G для каждого пира.

Предостережения: Трафик — это сумма переданного трафика или счетчика, а не полоса пропускания.

Случаи использования

Можно рассчитать индивидуальную статистику, заданную пользователем, с помощью директивы server_traffic_status_filter_by_set_key.

Чтобы рассчитать трафик для каждой отдельной страны с использованием GeoIP

stream {
    geoip_country /usr/share/GeoIP/GeoIP.dat;

    server_traffic_status_zone;
    server_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...

    server {

        ...

        server_traffic_status_filter_by_set_key $geoip_country_code country::$server_addr:$server_port;

    }
}
  • Рассчитывает трафик для каждой отдельной страны для общих серверных групп.
  • Рассчитывает трафик для каждой отдельной страны для каждой серверной группы.

В основном изображения флагов стран встроены в HTML. Изображения флагов стран активируются, если строка country включена в название группы, являющейся вторым аргументом директивы server_traffic_status_filter_by_set_key.

Настройка

Чтобы настроить после установки модуля

  1. Вам нужно изменить строку {{uri}} на ваш статус uri в status.template.html следующим образом:

    shell> vi share/status.template.html
    
    var vtsStatusURI = "yourStatusUri/format/json", vtsUpdateInterval = 1000;
    

  2. Затем настройте и скопируйте status.template.html в корневой каталог сервера следующим образом:

    shell> cp share/status.template.html /usr/share/nginx/html/status.html
    

  3. Настройте nginx.conf

       server {
           server_name example.org;
           root /usr/share/nginx/html;
    
           # Перенаправить запросы для / на /status.html
           location = / {
               return 301 /status.html;
           }
    
           location = /status.html {}
    
           # Все, что начинается с /status (за исключением /status.html) обрабатывается обработчиком статуса
           location /status {
               stream_server_traffic_status_display;
               stream_server_traffic_status_display_format json;
           }
       }
    

  4. Доступ к вашему html.

    http://example.org/status.html
    

Чтобы настроить перед установкой модуля

  1. Измените share/status.template.html (Не меняйте строку {{uri}})

  2. Воссоздайте ngx_http_stream_server_traffic_status_module_html.h следующим образом:

    shell> cd util
    shell> ./tplToDefine.sh ../share/status.template.html > ../src/ngx_http_stream_server_traffic_status_module_html.h
    

  3. Добавьте модуль в конфигурацию сборки, добавив

    --add-module=/path/to/nginx-module-sts
    --add-module=/path/to/nginx-module-stream-sts
    

  4. Соберите бинарник nginx.

  5. Установите бинарник nginx.

Директивы

stream_server_traffic_status

- -
Синтаксис stream_server_traffic_status \<on|off>
По умолчанию off
Контекст http, server, location

Описание: Включает или отключает работу модуля. Если вы установите директиву stream_server_traffic_status_zone, она автоматически включается.

stream_server_traffic_status_zone

- -
Синтаксис stream_server_traffic_status_zone [shared:name]
По умолчанию shared:stream_server_traffic_status
Контекст http

Описание: Устанавливает параметры для области общей памяти, указанной директивой server_traffic_status_zone в блоке потока.
Предостережения: Имя должно совпадать с указанным в server_traffic_status_zone.

stream_server_traffic_status_display

- -
Синтаксис stream_server_traffic_status_display
По умолчанию -
Контекст http, server, location

Описание: Включает или отключает обработчик отображения модуля.

stream_server_traffic_status_display_format

- -
Синтаксис stream_server_traffic_status_display_format \<json|html|jsonp|prometheus>
По умолчанию json
Контекст http, server, location

Описание: Устанавливает формат выходных данных обработчика отображения. Если вы установите json, будет возвращен JSON-документ. Если вы установите html, будет возвращена встроенная живая панель в HTML. Если вы установите jsonp, будет возвращена функция обратного вызова JSONP (по умолчанию: ngx_http_stream_server_traffic_status_jsonp_callback). Если вы установите prometheus, будет возвращен документ prometheus.

stream_server_traffic_status_display_jsonp

- -
Синтаксис stream_server_traffic_status_display_jsonp callback
По умолчанию ngx_http_stream_server_traffic_status_jsonp_callback
Контекст http, server, location

Описание: Устанавливает имя обратного вызова для JSONP.

stream_server_traffic_status_average_method

- -
Синтаксис stream_server_traffic_status_average_method \<AMM|WMA> [period]
По умолчанию AMM 60s
Контекст http, server, location

Описание: Устанавливает метод, который является формулой для расчета среднего времени обработки ответов. Период – это эффективное время значений, используемых для расчета среднего. (По умолчанию: 60s) Если установить period на 0, эффективное время игнорируется. В этом случае будет отображено последнее среднее значение, даже если запросов нет и после истечения времени. Соответствующие значения — это sessionMsec, uSessionMsec, uConnectMsec, uFirstByteMsec в JSON.

server_traffic_status

- -
Синтаксис server_traffic_status \<on|off>
По умолчанию off
Контекст stream, server

Описание: Включает или отключает работу модуля. Если вы установите директиву server_traffic_status_zone, она автоматически включается.

server_traffic_status_zone

- -
Синтаксис server_traffic_status_zone [shared:name:size]
По умолчанию shared:stream_server_traffic_status:1m
Контекст stream

Описание: Устанавливает параметры для области общей памяти, которая будет хранить состояния для различных ключей. Кэш общий для всех рабочих процессов.

server_traffic_status_filter

- -
Синтаксис server_traffic_status_filter \<on|off>
По умолчанию on
Контекст stream, server

Описание: Включает или отключает функции фильтра.

server_traffic_status_filter_by_set_key

- -
Синтаксис server_traffic_status_filter_by_set_key key [name]
По умолчанию -
Контекст stream, server

Описание: Включает ключи по переменной, заданной пользователем. key - это строка ключа для расчета трафика. name - это строка группы для расчета трафика. key и name могут содержать переменные, такие как $host, $server_addr, $server_port. Группа name принадлежит streamFilterZones, если указано. Группа key принадлежит streamServerZones, если аргумент name не указан. Пример с модулем geoip выглядит следующим образом:

stream {

      ...

      server {
          listen 1981;
          server_traffic_status_filter_by_set_key $geoip_country_code country::$server_addr:$server_port;

          ...

      }
}
  ...
  "streamServerZones": {
  ...
  },
  "streamFilterZones": {
      "country::example.org": {
          "KR": {
              "port":...,
              "protocol":...,
              "connectCounter":...,
              "inBytes":...,
              "outBytes":...,
              "responses":{
                  "1xx":...,
                  "2xx":...,
                  "3xx":...,
                  "4xx":...,
                  "5xx":...,
              },
              "sessionMsec":...
              "sessionMsecs":{
                  "times":[...],
                  "msecs":[...]
              },
            },
          },
          "US": {
          ...
          },
          ...
      },
      ...
  },
  ...

server_traffic_status_filter_check_duplicate

- -
Синтаксис server_traffic_status_filter_check_duplicate \<on|off>
По умолчанию on
Контекст stream, server

Описание: Включает или отключает дедупликацию server_traffic_status_filter_by_set_key. Обрабатывается только одно из дублирующих значений (key + name) в каждой директиве (stream, server), если эта опция включена.

server_traffic_status_limit

- -
Синтаксис server_traffic_status_limit \<on|off>
По умолчанию on
Контекст stream, server

Описание: Включает или отключает функции лимита.

server_traffic_status_limit_traffic

- -
Синтаксис server_traffic_status_limit_traffic member:size [code]
По умолчанию -
Контекст stream, server

Описание: Включает ограничение трафика для указанного member. member — это строка участника для ограничения трафика. size — это размер (k/m/g) для ограничения трафика. code — это код, который возвращается в ответ на отклоненные запросы (по умолчанию: 503).

Доступные строки member следующие: * connect * Общее количество клиентских подключений, полученных от клиентов. * in * Общее количество байтов, полученных от клиентов. * out * Общее количество байтов, отправленных клиентам. * 1xx * Количество ответов со статус-кодами 1xx. * 2xx * Количество ответов со статус-кодами 2xx. * 3xx * Количество ответов со статус-кодами 3xx. * 4xx * Количество ответов со статус-кодами 4xx. * 5xx * Количество ответов со статус-кодами 5xx.

server_traffic_status_limit_traffic_by_set_key

- -
Синтаксис server_traffic_status_limit_traffic_by_set_key key member:size [code]
По умолчанию -
Контекст stream, server

Описание: Включает ограничение трафика для указанного key и member. key - это строка ключа для ограничения трафика. member - это строка участника для ограничения трафика. size - это размер (k/m/g) для ограничения трафика. code - это код, который возвращается в ответ на отклоненные запросы (по умолчанию: 503).

Синтаксис key следующий: * group@[subgroup@]name

Доступные строки group следующие: * NO * Группа сервера. * UA * Группа верхнего уровня в одиночку. * UG * Группа верхнего уровня (используйте subgroup). * FG * Группа фильтров (используйте subgroup).

Доступные строки member следующие: * connect * Общее количество клиентских запросов, полученных от клиентов. * in * Общее количество байтов, полученных от клиентов. * out * Общее количество байтов, отправленных клиентам. * 1xx * Количество ответов со статус-кодами 1xx. * 2xx * Количество ответов со статус-кодами 2xx. * 3xx * Количество ответов со статус-кодами 3xx. * 4xx * Количество ответов со статус-кодами 4xx. * 5xx * Количество ответов со статус-кодами 5xx.

member такой же, как и в директиве server_traffic_status_limit_traffic.

server_traffic_status_limit_check_duplicate

- -
Синтаксис server_traffic_status_limit_check_duplicate \<on|off>
По умолчанию on
Контекст stream, server

Описание: Включает или отключает дедупликацию server_traffic_status_limit_by_set_key. Обрабатывается только одно из дублирующих значений (member | key + member) в каждой директиве (stream, server), если эта опция включена.

server_traffic_status_average_method

- -
Синтаксис server_traffic_status_average_method \<AMM|WMA> [period]
По умолчанию AMM 60s
Контекст stream, server

Описание: Устанавливает метод, который является формулой, которая рассчитывает среднее время обработки ответов. period — это эффективное время значений, используемых для расчета среднего. (По умолчанию: 60s) Если period установить на 0, эффективное время игнорируется. В этом случае будет отображено последнее среднее значение, даже если запросов нет и после выполнения времени. Соответствующее значение — это только переменная $sts_session_time.

Предостережения: Переменная $sts_session_time является значением, рассчитанным в момент последнего запроса. Она не рассчитывается при использовании переменных.

server_traffic_status_histogram_buckets

- -
Синтаксис server_traffic_status_histogram_buckets second ...
По умолчанию -
Контекст stream

Описание: Устанавливает наблюдаемые ведра, используемые в гистограммах. По умолчанию, если вы не установите эту директиву, она не будет работать. second можно выразить в десятичных знаках с минимальным значением 0.001 (1мс). Максимальный размер ведер — 32. Если этого значения недостаточно для вас, измените NGX_STREAM_SERVER_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN в nginx-module-stream-sts/src/ngx_stream_server_traffic_status_node.h и NGX_HTTP_STREAM_SERVER_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN в nginx-module-sts/src/ngx_http_stream_server_traffic_status_node.h.

Например: * server_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 0.5 1 5 10 * Наблюдаемые ведра – [5мс 10мс 50мс 1с 5с 10с]. * server_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 * Наблюдаемые ведра – [5мс 10мс 50мс 1с].

Предостережения: По умолчанию, если вы не установите эту директиву, статистика гистограммы не будет работать.

Смотрите также