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

sts: Модуль статуса трафика сервера 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-sts
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-sts

Включите модуль, добавив следующее в начало файла /etc/nginx/nginx.conf:

load_module modules/ngx_http_stream_server_traffic_status_module.so;

Этот документ описывает nginx-module-sts v0.1.1, выпущенный 4 июля 2018 года.


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 для подсистемы "stream" NGINX, чтобы поддерживать те же функции, что и в nginx-module-vts. Он содержит текущий статус, такой как сервера, upstream'ы, пользовательские фильтры.

Прежде всего, требуется наличие директивы server_traffic_status_zone в блоке stream и 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_module в NGINX)
  • streamServerZones
  • Трафик (входящий/исходящий) и количество запросов и ответов и статус (1xx, 2xx...) по каждому серверу
  • Общий трафик (входящий/исходящий) и количество запросов и ответов (имя зоны - *) и коэффициент попадания
  • streamFilterZones
  • Трафик (входящий/исходящий) и количество запросов и ответов и статус (1xx, 2xx...) по каждому серверу, отфильтрованному через директиву server_traffic_status_filter_by_set_key
  • Общий трафик (входящий/исходящий) и количество запросов и ответов (имя зоны - *) и коэффициент попадания, отфильтрованный через директиву server_traffic_status_filter_by_set_key
  • streamUpstreamZones
  • Трафик (входящий/исходящий) и количество запросов и ответов по серверу в каждой группе upstream
  • Текущие настройки (weight, 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 через ServerZones
  • out += sent_bytes через ServerZones

Все расчеты выполняются на этапе обработки логов Nginx.

Предостережения: этот модуль зависит от системы логирования nginx (NGX_STREAM_LOG_PHASE: последний этап потока nginx), поэтому трафик может в определенных обстоятельствах отличаться от реального трафика пропускной способности. Websocket, отмененные загрузки могут быть причиной неточностей. Работа модуля не зависит от того, включена или отключена директива 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
  • Версия Nginx.
  • 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
    • Количество накопленного времени обработки запросов в миллисекундах, включая upstream.
  • sessionMsec
    • Среднее время обработки запросов в миллисекундах, включая upstream.
  • sessionMsecs
    • times
    • Времена в миллисекундах на время обработки запросов.
    • msecs
    • Времена обработки запросов в миллисекундах, включая upstream.
  • sessionBuckets
    • msecs
    • Значения ведра гистограммы, установленные директивой server_traffic_status_histogram_buckets.
    • counters
    • Кумулятивные значения для каждой ведерной величины, превышающей или равной времени обработки запроса.
  • uSessionMsecCounter
    • Количество накопленного времени сессии в миллисекундах для upstream сервера.
  • uSessionMsec
    • Среднее время сессии в миллисекундах для upstream сервера.
  • uSessionMsecs
    • times
    • Времена в миллисекундах на время обработки запросов.
    • msecs
    • Времена сессии в миллисекундах для upstream сервера.
  • uSessionBuckets
    • msecs
    • Значения ведра гистограммы, установленные директивой server_traffic_status_histogram_buckets.
    • counters
    • Кумулятивные значения для каждой ведерной величины, превышающей или равной времени сессии для upstream сервера.
  • uConnectMsecCounter
    • Количество накопленного времени на подключение к upstream серверу.
  • uConnectMsec
    • Среднее время в миллисекундах на подключение к upstream серверу (1.11.4).
  • uConnectMsecs
    • times
    • Времена в миллисекундах на время обработки запросов.
    • msecs
    • Времена в миллисекундах на подключение к upstream серверу.
  • uConnectBuckets
    • msecs
    • Значения ведра гистограммы, установленные директивой server_traffic_status_histogram_buckets.
    • counters
    • Кумулятивные значения для каждой ведерной величины, превышающей или равной времени на подключение к upstream серверу.
  • 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 (Service Temporarily Unavailable) в ответ на запрос. Код возврата может изменяться.

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

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 соответственно.

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

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;

        ...

    }
}
  • Ограничьте общий трафик, идущий в upstream 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 в блоке stream. Предостережения: Имя должно совпадать с указанным в 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

Описание: Устанавливает метод, который является формулой для расчета среднего времени обработки ответов. period - это эффективное время значений, используемых для расчета среднего. (По умолчанию: 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 * Группа upstream alone. * UG * Группа upstream group. (используйте 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-mdule-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с].

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

См. также

GitHub

Вы можете найти дополнительные советы по конфигурации и документацию для этого модуля в репозитории GitHub для nginx-module-sts.