Aller au contenu

sts: Module de statut du trafic serveur de flux Nginx

Installation

Vous pouvez installer ce module dans toute distribution basée sur RHEL, y compris, mais sans s'y limiter :

  • RedHat Enterprise Linux 7, 8, 9 et 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 et 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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_stream_server_traffic_status_module.so;

Ce document décrit nginx-module-sts v0.1.1 publié le 4 juillet 2018.


License

Module de statut du trafic serveur de flux Nginx

Captures d'écran

nginx-module-sts screenshot

Synopsis

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 {
        ...
    }
}

Description

Il s'agit d'un module Nginx qui fournit un accès aux informations de statut du trafic serveur de flux. C'est une version portage du nginx-module-vts vers le sous-système "stream" de NGINX afin de prendre en charge les mêmes fonctionnalités que dans nginx-module-vts. Il contient le statut actuel tel que serveurs, upstreams, filtre défini par l'utilisateur.

Tout d'abord, il est nécessaire d'avoir à la fois la directive server_traffic_status_zone dans le bloc stream et stream_server_traffic_status_zone dans le bloc http, et ensuite, si la directive stream_server_traffic_status_display est définie, elle peut être accessible comme suit :

  • /status/format/json
  • Si vous demandez /status/format/json, cela répondra avec un document JSON contenant les données d'activité actuelles à utiliser dans des tableaux de bord en direct et des outils de surveillance tiers.
  • /status/format/html
  • Si vous demandez /status/format/html, cela répondra avec le tableau de bord en direct intégré en HTML qui demande en interne à /status/format/json.
  • /status/format/jsonp
  • Si vous demandez /status/format/jsonp, cela répondra avec une fonction de rappel JSONP contenant les données d'activité actuelles à utiliser dans des tableaux de bord en direct et des outils de surveillance tiers.
  • /status/format/prometheus
  • Si vous demandez /status/format/prometheus, cela répondra avec un document prometheus contenant les données d'activité actuelles.
  • /status/control
  • Si vous demandez /status/control, cela répondra avec un document JSON après avoir réinitialisé ou supprimé des zones via une chaîne de requête. Voir Contrôle.

Le document JSON contient ce qui suit :

{
    "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":...
            }
            ...
        ],
        ...
    }
}
  • principal
  • Version de base, temps de fonctionnement((nowMsec - loadMsec)/1000)
  • nowMsec, loadMsec est en millisecondes.
  • connexions
  • Total des connexions et des demandes (identique à stub_status_module dans NGINX)
  • streamServerZones
  • Trafic (entrant/sortant) et comptes de demandes et de réponses et statut (1xx, 2xx...) taux de réussite par zone de serveur
  • Trafic total (entrant/sortant) et comptes de demandes et de réponses (le nom de la zone est *) et taux de réussite
  • streamFilterZones
  • Trafic (entrant/sortant) et comptes de demandes et de réponses et statut (1xx, 2xx...) taux de réussite par zone de serveur filtrée par la directive server_traffic_status_filter_by_set_key
  • Trafic total (entrant/sortant) et comptes de demandes et de réponses (le nom de la zone est *) et taux de réussite filtrés par la directive server_traffic_status_filter_by_set_key
  • streamUpstreamZones
  • Trafic (entrant/sortant) et comptes de demandes et de réponses par serveur dans chaque groupe upstream
  • Paramètres actuels (poids, maxfails, failtimeout...) dans nginx.conf

La directive stream_server_traffic_status_display_format définit le format de sortie par défaut qui est l'un des json, jsonp, html, prometheus. (Par défaut : json)

Le calcul du trafic est le suivant :

  • streamServerZones
  • in += requested_bytes
  • out += sent_bytes
  • streamFilterZones
  • in += requested_bytes via le filtre
  • out += sent_bytes via le filtre
  • streamUpstreamZones
  • in += requested_bytes via les ServerZones
  • out += sent_bytes via les ServerZones

Tous les calculs fonctionnent dans la phase de traitement des journaux de Nginx.

Avertissements : ce module repose sur le système de journalisation de nginx (NGX_STREAM_LOG_PHASE : dernière phase du flux nginx), donc le trafic peut être dans certaines circonstances différent du trafic de bande passante réel. Websocket, téléchargements annulés peuvent être la cause d'inexactitudes. Le fonctionnement du module ne dépend pas du tout de la directive access_log "on" ou "off". Encore une fois, ce module fonctionne bien avec "access_log off".

Contrôle

Il est possible de réinitialiser ou de supprimer des zones de trafic via une chaîne de requête. La demande répond avec un document JSON.

  • Syntaxe 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 {

        ...

    }

    ...

}

Si cela est défini comme ci-dessus, alors l'uri de contrôle est comme example.org/status/control.

Les arguments de requête disponibles sont les suivants : * cmd=\<status|reset|delete> * status * Cela retourne le statut des zones de trafic au format json comme status/format/json. * reset * Cela réinitialise les zones de trafic sans supprimer les nœuds en mémoire partagée. (= init à 0) * delete * Cela supprime les zones de trafic en mémoire partagée. lors de la nouvelle demande, elles sont recréées. * 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

Pour obtenir le statut des zones de trafic à la volée

C'est similaire à status/format/json sauf que cela peut obtenir chaque zone.

Pour obtenir toutes les zones

  • C'est exactement le même que status/format/json.
  • /status/control?cmd=status&group=*

Pour obtenir des zones de groupe

  • 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=*

Pour obtenir chaque zone

  • zone unique dans streamServerZones
  • /status/control?cmd=status&group=server&zone=name
  • zone unique dans streamFilterZones
  • /status/control?cmd=status&group=filter&zone=filter_group@name
  • zone unique dans streamUpstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=upstream_group@name
  • zone unique dans streamUpstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=name

Pour réinitialiser les zones de trafic à la volée

Cela réinitialise les valeurs des zones spécifiées à 0.

Pour réinitialiser toutes les zones

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

Pour réinitialiser des zones de groupe

  • 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=*

Pour réinitialiser chaque zone

  • zone unique dans streamServerZones
  • /status/control?cmd=reset&group=server&zone=name
  • zone unique dans streamFilterZones
  • /status/control?cmd=reset&group=filter&zone=filter_group@name
  • zone unique dans streamUpstreamZones
  • /status/control?cmd=reset&group=upstream@group&zone=upstream_group@name
  • zone unique dans streamUpstreamZones::nogroups
  • /status/control?cmd=reset&group=upstream@alone&zone=name

Pour supprimer des zones de trafic à la volée

Cela supprime les zones spécifiées en mémoire partagée.

Pour supprimer toutes les zones

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

Pour supprimer des zones de groupe

  • 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=*

Pour supprimer chaque zone

  • zone unique dans streamServerZones
  • /status/control?cmd=delete&group=server&zone=name
  • zone unique dans streamFilterZones
  • /status/control?cmd=delete&group=filter&zone=filter_group@name
  • zone unique dans streamUpstreamZones
  • /status/control?cmd=delete&group=upstream@group&zone=upstream_group@name
  • zone unique dans streamUpstreamZones::nogroups
  • /status/control?cmd=delete&group=upstream@alone&zone=name

JSON

Les informations de statut suivantes sont fournies au format JSON :

Json utilisé par le statut

/{status_uri}/format/json

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

  • hostName
  • Nom d'hôte.
  • nginxVersion
  • Version fournie.
  • loadMsec
  • Temps de chargement du processus en millisecondes.
  • nowMsec
  • Temps actuel en millisecondes
  • connexions
  • active
    • Le nombre actuel de connexions client actives.
  • reading
    • Le nombre total de connexions client en lecture.
  • writing
    • Le nombre total de connexions client en écriture.
  • waiting
    • Le nombre total de connexions client en attente.
  • accepted
    • Le nombre total de connexions client acceptées.
  • handled
    • Le nombre total de connexions client traitées.
  • requests
    • Le nombre total de connexions client demandées.
  • sharedZones
  • name
    • Le nom de la mémoire partagée spécifié dans la configuration. (par défaut : stream_server_traffic_status)
  • maxSize
    • La limite de la taille maximale de la mémoire partagée spécifiée dans la configuration.
  • usedSize
    • La taille actuelle de la mémoire partagée.
  • usedNode
    • Le nombre actuel de nœuds utilisant la mémoire partagée. On peut obtenir une taille approximative pour un nœud avec la formule suivante : (usedSize / usedNode)
  • streamServerZones
  • connectCounter
    • Le nombre total de demandes client reçues des clients.
  • inBytes
    • Le nombre total de bytes reçus des clients.
  • outBytes
    • Le nombre total de bytes envoyés aux clients.
  • responses
    • 1xx, 2xx, 3xx, 4xx, 5xx
    • Le nombre de réponses avec des codes d'état 1xx, 2xx, 3xx, 4xx et 5xx.
  • sessionMsecCounter
    • Le nombre de temps de traitement des demandes accumulé en millisecondes.
  • sessionMsec
    • La moyenne des temps de traitement des demandes en millisecondes.
  • sessionMsecs
    • times
    • Les temps en millisecondes lors des temps de traitement des demandes.
    • msecs
    • Les temps de traitement des demandes en millisecondes.
  • sessionBuckets
    • msecs
    • Les valeurs de seau de l'histogramme définies par la directive server_traffic_status_histogram_buckets.
    • counters
    • Les valeurs cumulées pour la raison que chaque valeur de seau est supérieure ou égale au temps de traitement de la demande.
  • streamFilterZones
  • Il fournit les mêmes champs que streamServerZones sauf qu'il inclut les noms de groupe.
  • streamUpstreamZones
  • server
    • Une adresse du serveur.
  • connectCounter
    • Le nombre total de connexions client transférées à ce serveur.
  • inBytes
    • Le nombre total de bytes reçus de ce serveur.
  • outBytes
    • Le nombre total de bytes envoyés à ce serveur.
  • responses
    • 1xx, 2xx, 3xx, 4xx, 5xx
    • Le nombre de réponses avec des codes d'état 1xx, 2xx, 3xx, 4xx et 5xx.
  • sessionMsecCounter
    • Le nombre de temps de traitement des demandes accumulé en millisecondes, y compris l'upstream.
  • sessionMsec
    • La moyenne des temps de traitement des demandes en millisecondes, y compris l'upstream.
  • sessionMsecs
    • times
    • Les temps en millisecondes lors des temps de traitement des demandes.
    • msecs
    • Les temps de traitement des demandes en millisecondes, y compris l'upstream.
  • sessionBuckets
    • msecs
    • Les valeurs de seau de l'histogramme définies par la directive server_traffic_status_histogram_buckets.
    • counters
    • Les valeurs cumulées pour la raison que chaque valeur de seau est supérieure ou égale au temps de traitement des demandes.
  • uSessionMsecCounter
    • Le nombre de temps accumulé en millisecondes pour la durée de la session au serveur upstream.
  • uSessionMsec
    • La moyenne des temps de durée de session en millisecondes au serveur upstream.
  • uSessionMsecs
    • times
    • Les temps en millisecondes lors des temps de traitement des demandes.
    • msecs
    • Les temps de durée de session en millisecondes au serveur upstream.
  • uSessionBuckets
    • msecs
    • Les valeurs de seau de l'histogramme définies par la directive server_traffic_status_histogram_buckets.
    • counters
    • Les valeurs cumulées pour la raison que chaque valeur de seau est supérieure ou égale au temps de durée de session au serveur upstream.
  • uConnectMsecCounter
    • Le nombre de temps accumulé en millisecondes pour se connecter au serveur upstream.
  • uConnectMsec
    • La moyenne des temps en millisecondes pour se connecter au serveur upstream (1.11.4).
  • uConnectMsecs
    • times
    • Les temps en millisecondes lors des temps de traitement des demandes.
    • msecs
    • Les temps en millisecondes pour se connecter au serveur upstream.
  • uConnectBuckets
    • msecs
    • Les valeurs de seau de l'histogramme définies par la directive server_traffic_status_histogram_buckets.
    • counters
    • Les valeurs cumulées pour la raison que chaque valeur de seau est supérieure ou égale au temps pour se connecter au serveur upstream.
  • uFirstByteMsecCounter
    • Le nombre de temps accumulé en millisecondes pour recevoir le premier byte de données.
  • uFirstByteMsec
    • La moyenne des temps en millisecondes pour recevoir le premier byte de données (1.11.4).
  • uFirstByteMsecs
    • times
    • Les temps en millisecondes lors des temps de traitement des demandes.
    • msecs
    • Les temps en millisecondes pour recevoir le premier byte de données (1.11.4).
  • uFirstByteBuckets
    • msecs
    • Les valeurs de seau de l'histogramme définies par la directive server_traffic_status_histogram_buckets.
    • counters
    • Les valeurs cumulées pour la raison que chaque valeur de seau est supérieure ou égale au temps pour recevoir le premier byte de données.
  • weight
    • Paramètre weight actuel du serveur.
  • maxFails
    • Paramètre max_fails actuel du serveur.
  • failTimeout
    • Paramètre fail_timeout actuel du serveur.
  • backup
    • Paramètre backup actuel du serveur.
  • down
    • Paramètre down actuel du serveur.

Json utilisé par le contrôle

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

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

  • processingReturn
  • Le résultat de vrai ou faux.
  • processingCommandString
  • La chaîne de commande demandée.
  • processingGroupString
  • La chaîne de groupe demandée.
  • processingZoneString
  • La chaîne de zone demandée.
  • processingCounts
  • Le nombre de traitements effectifs.

Variables

Les variables intégrées suivantes sont fournies dans le bloc stream :

  • $sts_connect_counter
  • Le nombre total de demandes client reçues des clients.
  • $sts_in_bytes
  • Le nombre total de bytes reçus des clients.
  • $sts_out_bytes
  • Le nombre total de bytes envoyés aux clients.
  • $sts_1xx_counter
  • Le nombre de réponses avec des codes d'état 1xx.
  • $sts_2xx_counter
  • Le nombre de réponses avec des codes d'état 2xx.
  • $sts_3xx_counter
  • Le nombre de réponses avec des codes d'état 3xx.
  • $sts_4xx_counter
  • Le nombre de réponses avec des codes d'état 4xx.
  • $sts_5xx_counter
  • Le nombre de réponses avec des codes d'état 5xx.
  • $sts_session_time
  • La moyenne des temps de traitement des demandes.

Limite

Il est possible de limiter le trafic total par serveur en utilisant la directive server_traffic_status_limit_traffic. Il est également possible de limiter tout le trafic en utilisant la directive server_traffic_status_limit_traffic_by_set_key. Lorsque la limite est dépassée, le serveur renverra l'erreur 503 (Service temporairement indisponible) en réponse à une demande. Le code de retour peut être modifiable.

Pour limiter le trafic pour le serveur

stream {

    server_traffic_status_zone;

    ...

    server {

        listen 1981;

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

        ...
    }
}
  • Limite le trafic total entrant/sortant sur le 1981/tcp à 64G et 1024G respectivement.

Pour limiter le trafic pour le filtre

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;

        ...

    }
}
  • Limite le trafic total entrant vers les États-Unis et la Chine sur example.org à 1024G et 2048G respectivement.

Pour limiter le trafic pour l'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@[email protected]:80 in:512G;
        server_traffic_status_limit_traffic_by_set_key UG@[email protected]:80 in:1024G;
        proxy_pass backend;

        ...

    }
}
  • Limite le trafic total entrant vers l'upstream backend sur le 1981/tcp à 512G et 1024G par pair.

Avertissements : Le trafic est le transfert cumulatif ou le compteur, pas une bande passante.

Cas d'utilisation

Il est possible de calculer les statistiques individuelles définies par l'utilisateur en utilisant la directive server_traffic_status_filter_by_set_key.

Pour calculer le trafic pour un pays individuel en utilisant 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;

    }
}
  • Calcule le trafic pour chaque pays des groupes de serveurs totaux.
  • Calcule le trafic pour chaque pays de chaque groupe de serveurs.

Fondamentalement, les images des drapeaux des pays sont intégrées dans HTML. L'image des drapeaux des pays est activée si la chaîne country est incluse dans le nom du groupe qui est le deuxième argument de la directive server_traffic_status_filter_by_set_key.

Personnalisation

Pour personnaliser après l'installation du module

  1. Vous devez changer la chaîne {{uri}} par votre uri de statut dans status.template.html comme suit :

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

  2. Et ensuite, personnalisez et copiez status.template.html dans le répertoire racine du serveur comme suit :

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

  3. Configurez nginx.conf

       server {
           server_name example.org;
           root /usr/share/nginx/html;
    
           # Redirige les demandes pour / vers /status.html
           location = / {
               return 301 /status.html;
           }
    
           location = /status.html {}
    
           # Tout ce qui commence par /status (sauf /status.html) est
           # traité par le gestionnaire de statut
           location /status {
               stream_server_traffic_status_display;
               stream_server_traffic_status_display_format json;
           }
       }
    

  4. Accédez à votre html.

    http://example.org/status.html
    

Pour personnaliser avant l'installation du module

  1. Modifiez share/status.template.html (Ne changez pas la chaîne {{uri}})

  2. Recréez le ngx_http_stream_server_traffic_status_module_html.h comme suit :

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

  3. Ajoutez le module à la configuration de construction en ajoutant

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

  4. Construisez le binaire nginx.

  5. Installez le binaire nginx.

Directives

stream_server_traffic_status

- -
Syntaxe stream_server_traffic_status \<on|off>
Par défaut off
Contexte http, server, location

Description : Active ou désactive le fonctionnement du module. Si vous définissez la directive stream_server_traffic_status_zone, elle est automatiquement activée.

stream_server_traffic_status_zone

- -
Syntaxe stream_server_traffic_status_zone [shared:name]
Par défaut shared:stream_server_traffic_status
Contexte http

Description : Définit les paramètres pour une zone de mémoire partagée spécifiée par la directive server_traffic_status_zone dans le bloc stream. Avertissements : Le name doit être le même que celui spécifié par server_traffic_status_zone.

stream_server_traffic_status_display

- -
Syntaxe stream_server_traffic_status_display
Par défaut -
Contexte http, server, location

Description : Active ou désactive le gestionnaire d'affichage du module.

stream_server_traffic_status_display_format

- -
Syntaxe stream_server_traffic_status_display_format \<json|html|jsonp|prometheus>
Par défaut json
Contexte http, server, location

Description : Définit le format de sortie du gestionnaire d'affichage. Si vous définissez json, cela répondra avec un document JSON. Si vous définissez html, cela répondra avec le tableau de bord en direct intégré en HTML. Si vous définissez jsonp, cela répondra avec une fonction de rappel JSONP (par défaut : ngx_http_stream_server_traffic_status_jsonp_callback). Si vous définissez prometheus, cela répondra avec un document prometheus.

stream_server_traffic_status_display_jsonp

- -
Syntaxe stream_server_traffic_status_display_jsonp callback
Par défaut ngx_http_stream_server_traffic_status_jsonp_callback
Contexte http, server, location

Description : Définit le nom de la fonction de rappel pour le JSONP.

stream_server_traffic_status_average_method

- -
Syntaxe stream_server_traffic_status_average_method \<AMM|WMA> [period]
Par défaut AMM 60s
Contexte http, server, location

Description : Définit la méthode qui est une formule pour calculer la moyenne des temps de traitement des réponses. La période est un temps effectif des valeurs utilisées pour le calcul de la moyenne. (Par défaut : 60s) Si period est défini sur 0, le temps effectif est ignoré. Dans ce cas, la dernière valeur moyenne est affichée même s'il n'y a pas de demandes et après l'écoulement du temps. Les valeurs correspondantes sont sessionMsec, uSessionMsec, uConnectMsec, uFirstByteMsec dans JSON.

server_traffic_status

- -
Syntaxe server_traffic_status \<on|off>
Par défaut off
Contexte stream, server

Description : Active ou désactive le fonctionnement du module. Si vous définissez la directive server_traffic_status_zone, elle est automatiquement activée.

server_traffic_status_zone

- -
Syntaxe server_traffic_status_zone [shared:name:size]
Par défaut shared:stream_server_traffic_status:1m
Contexte stream

Description : Définit les paramètres pour une zone de mémoire partagée qui conservera les états pour diverses clés. Le cache est partagé entre tous les processus de travail.

server_traffic_status_filter

- -
Syntaxe server_traffic_status_filter \<on|off>
Par défaut on
Contexte stream, server

Description : Active ou désactive les fonctionnalités de filtrage.

server_traffic_status_filter_by_set_key

- -
Syntaxe server_traffic_status_filter_by_set_key key [name]
Par défaut -
Contexte stream, server

Description : Active les clés par variable définie par l'utilisateur. Le key est une chaîne clé pour calculer le trafic. Le name est une chaîne de groupe pour calculer le trafic. Le key et le name peuvent contenir des variables telles que $host, $server_addr, $server_port. Le groupe du name appartient à streamFilterZones s'il est spécifié. Le groupe du key appartient à streamServerZones s'il n'y a pas de deuxième argument name spécifié. L'exemple avec le module geoip est le suivant :

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

- -
Syntaxe server_traffic_status_filter_check_duplicate \<on|off>
Par défaut on
Contexte stream, server

Description : Active ou désactive la dé-duplication de server_traffic_status_filter_by_set_key. Elle ne traite qu'une seule des valeurs dupliquées (key + name) dans chaque directive (stream, server) si cette option est activée.

server_traffic_status_limit

- -
Syntaxe server_traffic_status_limit \<on|off>
Par défaut on
Contexte stream, server

Description : Active ou désactive les fonctionnalités de limite.

server_traffic_status_limit_traffic

- -
Syntaxe server_traffic_status_limit_traffic member:size [code]
Par défaut -
Contexte stream, server

Description : Active la limite de trafic pour le member spécifié. Le member est une chaîne membre pour limiter le trafic. Le size est une taille (k/m/g) pour limiter le trafic. Le code est un code à retourner en réponse aux demandes rejetées. (Par défaut : 503)

Les chaînes member disponibles sont les suivantes : * connect * Le nombre total de connexions client reçues des clients. * in * Le nombre total de bytes reçus des clients. * out * Le nombre total de bytes envoyés aux clients. * 1xx * Le nombre de réponses avec des codes d'état 1xx. * 2xx * Le nombre de réponses avec des codes d'état 2xx. * 3xx * Le nombre de réponses avec des codes d'état 3xx. * 4xx * Le nombre de réponses avec des codes d'état 4xx. * 5xx * Le nombre de réponses avec des codes d'état 5xx.

server_traffic_status_limit_traffic_by_set_key

- -
Syntaxe server_traffic_status_limit_traffic_by_set_key key member:size [code]
Par défaut -
Contexte stream, server

Description : Active la limite de trafic pour le key et le member spécifiés. Le key est une chaîne clé pour limiter le trafic. Le member est une chaîne membre pour limiter le trafic. Le size est une taille (k/m/g) pour limiter le trafic. Le code est un code à retourner en réponse aux demandes rejetées. (Par défaut : 503)

La syntaxe de key est la suivante : * group@[subgroup@]name

Les chaînes group disponibles sont les suivantes : * NO * Le groupe de serveur. * UA * Le groupe d'upstream seul. * UG * Le groupe d'upstream group. (utilisez subgroup) * FG * Le groupe de filtre. (utilisez subgroup)

Les chaînes member disponibles sont les suivantes : * connect * Le nombre total de demandes client reçues des clients. * in * Le nombre total de bytes reçus des clients. * out * Le nombre total de bytes envoyés aux clients. * 1xx * Le nombre de réponses avec des codes d'état 1xx. * 2xx * Le nombre de réponses avec des codes d'état 2xx. * 3xx * Le nombre de réponses avec des codes d'état 3xx. * 4xx * Le nombre de réponses avec des codes d'état 4xx. * 5xx * Le nombre de réponses avec des codes d'état 5xx.

Le member est le même que la directive server_traffic_status_limit_traffic.

server_traffic_status_limit_check_duplicate

- -
Syntaxe server_traffic_status_limit_check_duplicate \<on|off>
Par défaut on
Contexte stream, server

Description : Active ou désactive la dé-duplication de server_traffic_status_limit_by_set_key. Elle ne traite qu'une seule des valeurs dupliquées (member | key + member) dans chaque directive (stream, server) si cette option est activée.

server_traffic_status_average_method

- -
Syntaxe server_traffic_status_average_method \<AMM|WMA> [period]
Par défaut AMM 60s
Contexte stream, server

Description : Définit la méthode qui est une formule pour calculer la moyenne des temps de traitement des réponses. La période est un temps effectif des valeurs utilisées pour le calcul de la moyenne. (Par défaut : 60s) Si period est défini sur 0, le temps effectif est ignoré. Dans ce cas, la dernière valeur moyenne est affichée même s'il n'y a pas de demandes et après l'écoulement du temps. La valeur correspondante est uniquement la variable $sts_session_time.

Avertissements : La variable $sts_session_time est la valeur calculée au moment de la dernière demande. Elle n'est pas calculée lors de l'utilisation de variables.

server_traffic_status_histogram_buckets

- -
Syntaxe server_traffic_status_histogram_buckets second ...
Par défaut -
Contexte stream

Description : Définit les seaux d'observation à utiliser dans les histogrammes. Par défaut, si vous ne définissez pas cette directive, elle ne fonctionnera pas. Le second peut être exprimé en décimales avec une valeur minimale de 0.001 (1ms). La taille maximale des seaux est de 32. Si cette valeur est insuffisante pour vous, modifiez NGX_STREAM_SERVER_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN dans le nginx-mdule-stream-sts/src/ngx_stream_server_traffic_status_node.h et NGX_HTTP_STREAM_SERVER_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN dans le nginx-module-sts/src/ngx_http_stream_server_traffic_status_node.h.

Par exemple : * server_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 0.5 1 5 10 * Les seaux d'observation sont [5ms 10ms 50ms 1s 5s 10s]. * server_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 * Les seaux d'observation sont [5ms 10ms 50ms 1s].

Avertissements : Par défaut, si vous ne définissez pas cette directive, les statistiques de l'histogramme ne fonctionnent pas.

Voir aussi

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-sts.