Aller au contenu

vts

# *vts*: Module de statut du trafic des hôtes virtuels NGINX

## Installation

Vous pouvez installer ce module dans n'importe quelle 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

=== "CentOS/RHEL 8+, Fedora Linux, Amazon Linux 2023+"

    ```bash
    dnf -y install https://extras.getpagespeed.com/release-latest.rpm
    dnf -y install nginx-module-vts
    ```

=== "CentOS/RHEL 7 et Amazon Linux 2"

    ```bash
    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-vts
    ```

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

```nginx
load_module modules/ngx_http_vhost_traffic_status_module.so;

Ce document décrit le module nginx-module-vts v0.2.6 publié le 29 juillet 2026.


CI License

Module de statut du trafic des hôtes virtuels NGINX

Test

Exécutez sudo prove -r t après avoir installé ce module. Le sudo est requis car le test nécessite que NGINX écoute sur le port 80.

Captures d'écran

screenshot-vts-0

screenshot-vts-1

Synopsis

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

Description

Il s'agit d'un module NGINX qui fournit un accès aux informations de statut des hôtes virtuels. Il contient le statut actuel tel que les serveurs, les upstreams, les caches. Cela est similaire à la surveillance de l'activité en direct de NGINX Plus. Le HTML intégré est également tiré de la page de démonstration de l'ancienne version.

Tout d'abord, la directive vhost_traffic_status_zone est requise, puis si la directive vhost_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 le Contrôle.

Le document JSON contient ce qui suit :

{
    "hostName": ...,
    "moduleVersion": ...,
    "nginxVersion": ...,
    "loadMsec": ...,
    "nowMsec": ...,
    "connections": {
        "active":...,
        "reading":...,
        "writing":...,
        "waiting":...,
        "accepted":...,
        "handled":...,
        "requests":...
    },
    "sharedZones": {
        "name":...,
        "maxSize":...,
        "usedSize":...,
        "usedNode":...
    },
    "serverZones": {
        "...":{
            "requestCounter":...,
            "inBytes":...,
            "outBytes":...,
            "responses":{
                "1xx":...,
                "2xx":...,
                "3xx":...,
                "4xx":...,
                "5xx":...,
                "miss":...,
                "bypass":...,
                "expired":...,
                "stale":...,
                "updating":...,
                "revalidated":...,
                "hit":...,
                "scarce":...
            },
            "requestMsecCounter":...,
            "requestMsec":...,
            "requestMsecs":{
                "times":[...],
                "msecs":[...]
            },
            "requestBuckets":{
                "msecs":[...],
                "counters":[...]
            },
        }
        ...
    },
    "filterZones": {
        "...":{
            "...":{
                "requestCounter":...,
                "inBytes":...,
                "outBytes":...,
                "responses":{
                    "1xx":...,
                    "2xx":...,
                    "3xx":...,
                    "4xx":...,
                    "5xx":...,
                    "miss":...,
                    "bypass":...,
                    "expired":...,
                    "stale":...,
                    "updating":...,
                    "revalidated":...,
                    "hit":...,
                    "scarce":...
                },
                "requestMsecCounter":...,
                "requestMsec":...,
                "requestMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "requestBuckets":{
                    "msecs":[...],
                    "counters":[...]
                },
            },
            ...
        },
        ...
    },
    "upstreamZones": {
        "...":[
            {
                "server":...,
                "requestCounter":...,
                "inBytes":...,
                "outBytes":...,
                "responses":{
                    "1xx":...,
                    "2xx":...,
                    "3xx":...,
                    "4xx":...,
                    "5xx":...
                },
                "requestMsecCounter":...,
                "requestMsec":...,
                "requestMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "requestBuckets":{
                    "msecs":[...],
                    "counters":[...]
                },
                "responseMsecCounter":...,
                "responseMsec":...,
                "responseMsecs":{
                    "times":[...],
                    "msecs":[...]
                },
                "responseBuckets":{
                    "msecs":[...],
                    "counters":[...]
                },
                "weight":...,
                "maxFails":...,
                "failTimeout":...,
                "backup":...,
                "down":...
            }
            ...
        ],
        ...
    }
    "cacheZones": {
        "...":{
            "maxSize":...,
            "usedSize":...,
            "inBytes":...,
            "outBytes":...,
            "responses":{
                "miss":...,
                "bypass":...,
                "expired":...,
                "stale":...,
                "updating":...,
                "revalidated":...,
                "hit":...,
                "scarce":...
            }
        },
        ...
    }
}
  • main
  • Version de base, temps de disponibilité ((nowMsec - loadMsec)/1000)
  • nowMsec, loadMsec est en millisecondes.
  • connections
  • Total des connexions et des requêtes (identique à stub_status_module dans NGINX)
  • sharedZones
  • Informations sur la mémoire partagée utilisée dans nginx-module-vts.
  • serverZones
  • Trafic (entrant/sortant) et comptage des requêtes et des réponses et ratio de réussite du cache par zone de serveur
  • Trafic total (entrant/sortant) et comptage des requêtes et des réponses (le nom de cette zone est *) et ratio de réussite
  • filterZones
  • Trafic (entrant/sortant) et comptage des requêtes et des réponses et ratio de réussite du cache par zone de serveur filtrée par la directive vhost_traffic_status_filter_by_set_key
  • Trafic total (entrant/sortant) et comptage des requêtes et des réponses (le nom de cette zone est *) et ratio de réussite filtré par la directive vhost_traffic_status_filter_by_set_key
  • upstreamZones
  • Trafic (entrant/sortant) et comptage des requêtes et des réponses par serveur dans chaque groupe d'upstream
  • Paramètres actuels (poids, maxfails, failtimeout...) dans nginx.conf
  • cacheZones
  • Trafic (entrant/sortant) et taille (capacité/utilisée) et ratio de réussite par zone de cache lors de l'utilisation de la directive proxy_cache.

Les objets overCounts dans le document JSON sont principalement pour les systèmes 32 bits et seront incrémentés de 1 si leur valeur déborde. La directive vhost_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 se fait comme suit :

  • ServerZones
  • in += requested_bytes
  • out += sent_bytes
  • FilterZones
  • in += requested_bytes via le filtre
  • out += sent_bytes via le filtre
  • UpstreamZones
  • in += requested_bytes via les ServerZones
  • out += sent_bytes via les ServerZones
  • cacheZones
  • 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. Les redirections internes (X-Accel-Redirect ou error_page) ne sont pas calculées dans les UpstreamZones.

Avertissements : ce module repose sur le système de journalisation de NGINX (NGX_HTTP_LOG_PHASE : dernière phase du http de NGINX), donc le trafic peut être dans certaines circonstances différent du trafic réel en bande passante. Les Websockets, les téléchargements annulés peuvent être à l'origine 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". Lors de l'utilisation de plusieurs domaines, il est défini sur le premier domaine (à gauche) de la directive server_name. Si vous ne le souhaitez pas, consultez la directive vhost_traffic_status_filter_by_host, vhost_traffic_status_filter_by_set_key.

Voir les modules suivants pour les statistiques de trafic stream : * nginx-module-sts * nginx-module-stream-sts

Calculs et Intervalles

Moyennes

Toutes les moyennes sont actuellement calculées comme AMM (Moyenne Arithmétique) sur les 64 dernières valeurs.

Contrôle

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

  • Syntaxe URI
  • /{status_uri}/control?cmd={command}&group={group}&zone={name}
http {

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

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

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 * Il retourne le statut des zones de trafic au format json comme status/format/json. * reset * Il réinitialise les zones de trafic sans supprimer les nœuds en mémoire partagée. (= init à 0) * delete * Il 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|cache|*> * server * filter * upstream@alone * upstream@group * cache * * * zone=name * server * name * filter * filter_group@name * upstream@group * upstream_group@name * upstream@alone * @name * cache * name

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

Ceci est similaire à status/format/json sauf qu'il 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

  • mainZones
  • /status/control?cmd=status&group=server&zone=::main
  • serverZones
  • /status/control?cmd=status&group=server&zone=*
  • filterZones
  • /status/control?cmd=status&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=status&group=cache&zone=*

Les valeurs mainZones sont des valeurs de statut par défaut incluant hostName, moduleVersion, nginxVersion, loadMsec, nowMsec, connections.

Pour obtenir chaque zone

  • zone unique dans serverZones
  • /status/control?cmd=status&group=server&zone=name
  • zone unique dans filterZones
  • /status/control?cmd=status&group=filter&zone=filter_group@name
  • zone unique dans upstreamZones
  • /status/control?cmd=status&group=upstream@group&zone=upstream_group@name
  • zone unique dans upstreamZones::nogroups
  • /status/control?cmd=status&group=upstream@alone&zone=name
  • zone unique dans cacheZones
  • /status/control?cmd=status&group=cache&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

  • serverZones
  • /status/control?cmd=reset&group=server&zone=*
  • filterZones
  • /status/control?cmd=reset&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=reset&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=reset&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=reset&group=cache&zone=*

Pour réinitialiser chaque zone

  • zone unique dans serverZones
  • /status/control?cmd=reset&group=server&zone=name
  • zone unique dans filterZones
  • /status/control?cmd=reset&group=filter&zone=filter_group@name
  • zone unique dans upstreamZones
  • /status/control?cmd=reset&group=upstream@group&zone=upstream_group@name
  • zone unique dans upstreamZones::nogroups
  • /status/control?cmd=reset&group=upstream@alone&zone=name
  • zone unique dans cacheZones
  • /status/control?cmd=reset&group=cache&zone=name

Pour supprimer les 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

  • serverZones
  • /status/control?cmd=delete&group=server&zone=*
  • filterZones
  • /status/control?cmd=delete&group=filter&zone=*
  • upstreamZones
  • /status/control?cmd=delete&group=upstream@group&zone=*
  • upstreamZones::nogroups
  • /status/control?cmd=delete&group=upstream@alone&zone=*
  • cacheZones
  • /status/control?cmd=delete&group=cache&zone=*

Pour supprimer chaque zone

  • zone unique dans serverZones
  • /status/control?cmd=delete&group=server&zone=name
  • zone unique dans filterZones
  • /status/control?cmd=delete&group=filter&zone=filter_group@name
  • zone unique dans upstreamZones
  • /status/control?cmd=delete&group=upstream@group&zone=upstream_group@name
  • zone unique dans upstreamZones::nogroups
  • /status/control?cmd=delete&group=upstream@alone&zone=name
  • zone unique dans cacheZones
  • /status/control?cmd=delete&group=cache&zone=name

Définir

Il est possible d'obtenir les valeurs de statut dans la configuration NGINX séparément en utilisant la directive vhost_traffic_status_set_by_filter. Elle peut acquérir presque toutes les valeurs de statut et la valeur obtenue est stockée dans une variable définie par l'utilisateur qui est le premier argument.

  • Syntaxe de la directive
  • vhost_traffic_status_set_by_filter $variable group/zone/name
http {

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

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...
    upstream backend {
        10.10.10.11:80;
        10.10.10.12:80;
    }

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        vhost_traffic_status_set_by_filter $requestCounter server/example.org/requestCounter;
        vhost_traffic_status_set_by_filter $requestCounterKR filter/country::example.org@KR/requestCounter;

        location /backend {
            vhost_traffic_status_set_by_filter $requestCounterB1 upstream@group/backend@10.10.10.11:80/requestCounter;
            proxy_pass http://backend;
        }
    }
}

Les paramètres ci-dessus sont les suivants :

  • $requestCounter
  • serverZones -> example.org -> requestCounter
  • $requestCounterKR
  • filterZones -> country::example.org -> KR -> requestCounter
  • $requestCounterB1
  • upstreamZones -> backend -> 10.0.10.11:80 -> requestCounter

Veuillez consulter la directive vhost_traffic_status_set_by_filter pour une utilisation détaillée.

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.
  • moduleVersion
  • Version du module au format {version}(|.dev.{commit}).
  • nginxVersion
  • Version de NGINX fournie.
  • loadMsec
  • Temps de chargement du processus en millisecondes.
  • nowMsec
  • Temps actuel en millisecondes
  • connections
  • active
    • Le nombre actuel de connexions clients actives.
  • reading
    • Le nombre total de connexions clients en lecture.
  • writing
    • Le nombre total de connexions clients en écriture.
  • waiting
    • Le nombre total de connexions clients en attente.
  • accepted
    • Le nombre total de connexions clients acceptées.
  • handled
    • Le nombre total de connexions clients traitées.
  • requests
    • Le nombre total de connexions clients demandées.
  • sharedZones
  • name
    • Le nom de la mémoire partagée spécifié dans la configuration. (par défaut : vhost_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 utilisés dans la mémoire partagée. On peut obtenir une taille approximative pour un nœud avec la formule suivante : (usedSize / usedNode)
  • serverZones
  • requestCounter
    • Le nombre total de requêtes clients reçues.
  • inBytes
    • Le nombre total d'octets reçus des clients.
  • outBytes
    • Le nombre total d'octets envoyés aux clients.
  • responses
    • 1xx, 2xx, 3xx, 4xx, 5xx
    • Le nombre de réponses avec les codes d'état 1xx, 2xx, 3xx, 4xx et 5xx.
    • miss
    • Le nombre de cache manqué.
    • bypass
    • Le nombre de contournements de cache.
    • expired
    • Le nombre de caches expirés.
    • stale
    • Le nombre de caches obsolètes.
    • updating
    • Le nombre de caches en cours de mise à jour.
    • revalidated
    • Le nombre de caches revalidés.
    • hit
    • Le nombre de caches réussis.
    • scarce
    • Le nombre de caches rares.
  • requestMsecCounter
    • Le nombre de temps de traitement des requêtes accumulé en millisecondes.
  • requestMsec
    • La moyenne des temps de traitement des requêtes en millisecondes.
  • requestMsecs
    • times
    • Les temps en millisecondes lors des traitements des requêtes.
    • msecs
    • Les temps de traitement des requêtes en millisecondes.
  • requestBuckets
    • msecs
    • Les valeurs des seaux d'histogramme définies par la directive vhost_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 requête.
  • filterZones
  • Il fournit les mêmes champs que serverZones sauf qu'il inclut les noms de groupe.
  • upstreamZones
  • server
    • Une adresse du serveur.
  • requestCounter
    • Le nombre total de connexions clients transférées à ce serveur.
  • inBytes
    • Le nombre total d'octets reçus de ce serveur.
  • outBytes
    • Le nombre total d'octets envoyés à ce serveur.
  • responses
    • 1xx, 2xx, 3xx, 4xx, 5xx
    • Le nombre de réponses avec les codes d'état 1xx, 2xx, 3xx, 4xx et 5xx.
  • requestMsecCounter
    • Le nombre de temps de traitement des requêtes accumulé incluant l'upstream en millisecondes.
  • requestMsec
    • La moyenne des temps de traitement des requêtes incluant l'upstream en millisecondes.
  • requestMsecs
    • times
    • Les temps en millisecondes lors des traitements des requêtes.
    • msecs
    • Les temps de traitement des requêtes incluant l'upstream en millisecondes.
  • requestBuckets
    • msecs
    • Les valeurs des seaux d'histogramme définies par la directive vhost_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 réponse incluant l'upstream.
  • responseMsecCounter
    • Le nombre de temps de traitement des réponses uniquement upstream accumulé en millisecondes.
  • responseMsec
    • La moyenne des temps de traitement des réponses uniquement upstream en millisecondes.
  • responseMsecs
    • times
    • Les temps en millisecondes lors des traitements des réponses.
    • msecs
    • Les temps de traitement des réponses uniquement upstream en millisecondes.
  • responseBuckets
    • msecs
    • Les valeurs des seaux d'histogramme définies par la directive vhost_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 réponse uniquement upstream.
  • 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. En gros, c'est juste une marque de l'état du serveur du ngx_http_upstream_module (par exemple server backend3.example.com down), pas l'état réel du serveur upstream. Cela changera pour l'état réel si vous activez la directive de zone upstream.
  • cacheZones
  • maxSize
    • La limite de la taille maximale du cache spécifiée dans la configuration. Si max_size dans la directive proxy_cache_path n'est pas spécifiée, la valeur dépendante du système NGX_MAX_OFF_T_VALUE est assignée par défaut. En d'autres termes, cette valeur provient de NGINX, pas de ce que j'ai spécifié.
  • usedSize
    • La taille actuelle du cache. Cette valeur est prise de NGINX comme la valeur maxSize ci-dessus.
  • inBytes
    • Le nombre total d'octets reçus du cache.
  • outBytes
    • Le nombre total d'octets envoyés depuis le cache.
  • responses
    • miss
    • Le nombre de cache manqué.
    • bypass
    • Le nombre de contournements de cache.
    • expired
    • Le nombre de caches expirés.
    • stale
    • Le nombre de caches obsolètes.
    • updating
    • Le nombre de caches en cours de mise à jour.
    • revalidated
    • Le nombre de caches revalidés.
    • hit
    • Le nombre de caches réussis.
    • scarce
    • Le nombre de caches rares.

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 :

  • $vts_request_counter
  • Le nombre total de requêtes clients reçues.
  • $vts_in_bytes
  • Le nombre total d'octets reçus des clients.
  • $vts_out_bytes
  • Le nombre total d'octets envoyés aux clients.
  • $vts_1xx_counter
  • Le nombre de réponses avec les codes d'état 1xx.
  • $vts_2xx_counter
  • Le nombre de réponses avec les codes d'état 2xx.
  • $vts_3xx_counter
  • Le nombre de réponses avec les codes d'état 3xx.
  • $vts_4xx_counter
  • Le nombre de réponses avec les codes d'état 4xx.
  • $vts_5xx_counter
  • Le nombre de réponses avec les codes d'état 5xx.
  • $vts_cache_miss_counter
  • Le nombre de cache manqué.
  • $vts_cache_bypass_counter
  • Le nombre de contournements de cache.
  • $vts_cache_expired_counter
  • Le nombre de caches expirés.
  • $vts_cache_stale_counter
  • Le nombre de caches obsolètes.
  • $vts_cache_updating_counter
  • Le nombre de caches en cours de mise à jour.
  • $vts_cache_revalidated_counter
  • Le nombre de caches revalidés.
  • $vts_cache_hit_counter
  • Le nombre de caches réussis.
  • $vts_cache_scarce_counter
  • Le nombre de caches rares.
  • $vts_request_time_counter
  • Le nombre de temps de traitement des requêtes accumulé.
  • $vts_request_time
  • La moyenne des temps de traitement des requêtes.

Limite

Il est possible de limiter le trafic total par hôte en utilisant la directive vhost_traffic_status_limit_traffic. Il est également possible de limiter tout le trafic en utilisant la directive vhost_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

http {

    vhost_traffic_status_zone;

    ...

    server {

        server_name *.example.org;

        vhost_traffic_status_limit_traffic in:64G;
        vhost_traffic_status_limit_traffic out:1024G;

        ...
    }
}
  • Limite le trafic total entrant/sortant sur le *.example.org à 64G et 1024G respectivement. Cela fonctionne individuellement pour chaque domaine si la directive vhost_traffic_status_filter_by_host est activée.

Pour limiter le trafic pour le filtre

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

    vhost_traffic_status_zone;

    ...

    server {

        server_name example.org;

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;
        vhost_traffic_status_limit_traffic_by_set_key FG@country::$server_name@US out:1024G;
        vhost_traffic_status_limit_traffic_by_set_key FG@country::$server_name@CN out:2048G;

        ...

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

Pour limiter le trafic pour l'upstream

http {

    vhost_traffic_status_zone;

    ...

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

    server {

        server_name example.org;

        location /backend {
            vhost_traffic_status_limit_traffic_by_set_key UG@backend@10.10.10.17:80 in:512G;
            vhost_traffic_status_limit_traffic_by_set_key UG@backend@10.10.10.18:80 in:1024G;
            proxy_pass http://backend;
        }

        ...

    }
}
  • Limite le trafic total entrant vers l'upstream backend sur le example.org à 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 vhost_traffic_status_filter_by_set_key.

Pour calculer le trafic pour chaque pays en utilisant GeoIP

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

    vhost_traffic_status_zone;
    vhost_traffic_status_filter_by_set_key $geoip_country_code country::*;

    ...

    server {

        ...

        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}
  • Calcule le trafic pour chaque pays de tous les groupes de serveurs.
  • Calcule le trafic pour chaque pays de chaque groupe de serveurs.

En gros, l'image des drapeaux des pays est intégrée dans le HTML. L'image des drapeaux des pays est activée si la chaîne country est incluse dans le nom de groupe qui est le deuxième argument de la directive vhost_traffic_status_filter_by_set_key.

Pour calculer le trafic pour chaque volume de stockage

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location ~ ^/storage/(.+)/.*$ {
            set $volume $1;
            vhost_traffic_status_filter_by_set_key $volume storage::$server_name;
        }

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}
  • Calcule le trafic pour chaque volume de stockage correspondant à l'expression régulière de la directive location.

Pour calculer le trafic pour chaque agent utilisateur

http {
    vhost_traffic_status_zone;

    map $http_user_agent $filter_user_agent {
        default 'unknown';
        ~iPhone ios;
        ~Android android;
        ~(MSIE|Mozilla) windows;
    }

    vhost_traffic_status_filter_by_set_key $filter_user_agent agent::*;

    ...

    server {

        ...

        vhost_traffic_status_filter_by_set_key $filter_user_agent agent::$server_name;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}
  • Calcule le trafic pour chaque http_user_agent

Pour calculer le trafic pour des codes d'état http détaillés

http {
    vhost_traffic_status_zone;

    server {

        ...

        vhost_traffic_status_filter_by_set_key $status $server_name;

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}
  • Calcule le trafic pour des codes d'état http détaillés

Avertissements : La variable $status est disponible dans NGINX-(1.3.2, 1.2.2).

Pour calculer le trafic pour DNS dynamique

Si le domaine a plusieurs enregistrements DNS A, vous pouvez calculer le trafic pour chaque IP pour le domaine en utilisant la fonction de filtre ou une variable dans proxy_pass.

http {
    vhost_traffic_status_zone;

    upstream backend {
        elb.example.org:80;
    }

    ...

    server {

        ...

        location /backend {
            vhost_traffic_status_filter_by_set_key $upstream_addr upstream::backend;
            proxy_pass backend;
        }
    }
}
  • Calcule le trafic pour chaque IP pour le domaine elb.example.org. Si elb.example.org a plusieurs enregistrements DNS A, toutes les IPs seront affichées dans filterZones. Dans les paramètres ci-dessus, lorsque NGINX démarre ou recharge sa configuration, il interroge un serveur DNS pour résoudre le domaine et les enregistrements DNS A sont mis en cache en mémoire. Ainsi, les enregistrements DNS A ne changent pas en mémoire même si les enregistrements DNS A sont modifiés par l'administrateur DNS à moins que NGINX ne redémarre ou recharge.
http {
    vhost_traffic_status_zone;

    resolver 10.10.10.53 valid=10s

    ...

    server {

        ...

        location /backend {
            set $backend_server elb.example.org;
            proxy_pass http://$backend_server;
        }
    }
}
  • Calcule le trafic pour chaque IP pour le domaine elb.example.org. Si l'enregistrement DNS A de elb.example.org est modifié, les anciennes et nouvelles IPs seront affichées dans ::nogroups. Contrairement au premier groupe d'upstream, le deuxième paramètre fonctionne bien même si les enregistrements DNS A sont modifiés par l'administrateur DNS.

Avertissements : Veuillez consulter plus de détails sur le DNS de NGINX dans le dns-service-discovery-nginx-plus.

Pour calculer le trafic sauf pour la page de statut

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            vhost_traffic_status_bypass_limit on;
            vhost_traffic_status_bypass_stats on;
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

Pour maintenir les données statistiques de manière permanente

http {
    vhost_traffic_status_zone;
    vhost_traffic_status_dump /var/log/nginx/vts.db;

    ...

    server {

        ...

    }
}
  • La directive vhost_traffic_status_dump maintient les données statistiques de manière permanente même si le système a été redémarré ou si NGINX a été redémarré. Veuillez consulter la directive vhost_traffic_status_dump pour une utilisation détaillée.

Personnalisation

Pour personnaliser après l'installation du module

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

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

  2. 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 requêtes 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 {
               vhost_traffic_status_display;
               vhost_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_vhost_traffic_status_module_html.h comme suit :

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

  3. Ajoutez le module à la configuration de construction en ajoutant --add-module=/path/to/nginx-module-vts

  4. Construisez le binaire NGINX.

  5. Installez le binaire NGINX.

Tableau de bord React

Un tableau de bord alternatif basé sur React est disponible dans le répertoire front/. Il récupère des données à partir de l'API existante /status/format/json et rend les mêmes tableaux que la page HTML intégrée.

Prérequis

  • Node.js >= 20.19 (ou >= 22.12)
  • npm

Servir via NGINX

Ajoutez le bloc location suivant à côté de la configuration /status existante :

location = /status/dashboard {
    return 301 /status/dashboard/;
}

location /status/dashboard/ {
    alias /path/to/nginx-module-vts/front/dist/;
    index index.html;
}

Après avoir rechargé NGINX, le tableau de bord React est disponible à /status/dashboard.

Développement

shell> make front-dev

Le serveur de développement Vite proxy les requêtes /status/format/json vers http://localhost:80 afin que le tableau de bord puisse être développé contre une instance NGINX en cours d'exécution.

Nettoyer

shell> make front-clean

Supprime front/dist/ et front/node_modules/.

Directives

draw_io_vts_diagram

vhost_traffic_status

- -
Syntaxe vhost_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 vhost_traffic_status_zone, elle est automatiquement activée.

vhost_traffic_status_zone

- -
Syntaxe vhost_traffic_status_zone [shared:name:size]
Par défaut shared:vhost_traffic_status:1m
Contexte http

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. Dans la plupart des cas, la taille de la mémoire partagée utilisée par nginx-module-vts n'augmente pas beaucoup. La taille de la mémoire partagée augmente considérablement lors de l'utilisation de la directive vhost_traffic_status_filter_by_set_key, mais si les clés du filtre sont fixes (par exemple, le nombre total de codes de pays est d'environ 240), elle n'augmente pas continuellement.

Si vous utilisez la directive vhost_traffic_status_filter_by_set_key, définissez-la comme suit :

  • Définissez à plus de 32M la taille de la mémoire partagée par défaut. (vhost_traffic_status_zone shared:vhost_traffic_status:32m)
  • Si le message ("ngx_slab_alloc() failed: no memory in vhost_traffic_status_zone") est imprimé dans error_log, augmentez à plus de (usedSize * 2).

vhost_traffic_status_dump

- -
Syntaxe vhost_traffic_status_dump path [period]
Par défaut -
Contexte http

Description : Active la sauvegarde et la restauration des données statistiques. Le path est un emplacement pour sauvegarder les données statistiques. (par exemple, /var/log/nginx/vts.db) Le period est un temps de cycle de sauvegarde. (Par défaut : 60s) Il est sauvegardé immédiatement indépendamment du cycle de sauvegarde si NGINX est arrêté par signal (SIGKILL).

vhost_traffic_status_display

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

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

vhost_traffic_status_display_format

- -
Syntaxe vhost_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_vhost_traffic_status_jsonp_callback). Si vous définissez prometheus, cela répondra avec un document prometheus.

vhost_traffic_status_display_jsonp

- -
Syntaxe vhost_traffic_status_display_jsonp callback
Par défaut ngx_http_vhost_traffic_status_jsonp_callback
Contexte http, server, location

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

vhost_traffic_status_display_sum_key

- -
Syntaxe vhost_traffic_status_display_sum_key name
Par défaut *
Contexte http, server, location

Description : Définit la chaîne de clé de somme dans le champ serverZones du JSON. La chaîne de clé de somme par défaut est le "*".

vhost_traffic_status_filter

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

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

vhost_traffic_status_filter_by_host

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

Description : Active ou désactive les clés par le champ d'en-tête Host. Si vous définissez on et que la directive server_name de NGINX définit plusieurs noms ou un nom générique commençant par un astérisque, par exemple “.example.org” et que vous demandez au serveur avec un nom d'hôte tel que (a|b|c).example.org ou .example.org, alors le JSON serverZones est imprimé comme suit :

server {
  server_name *.example.org;
  vhost_traffic_status_filter_by_host on;

  ...

}
  ...
  "serverZones": {
      "a.example.org": {
      ...
      },
      "b.example.org": {
      ...
      },
      "c.example.org": {
      ...
      }
      ...
   },
   ...

Il fournit la même fonction que celle définie par vhost_traffic_status_filter_by_set_key $host.

vhost_traffic_status_filter_by_set_key

- -
Syntaxe vhost_traffic_status_filter_by_set_key key [name]
Par défaut -
Contexte http, server, location

Description : Active les clés par variable définie par l'utilisateur. La key est une chaîne de clé pour calculer le trafic. La name est une chaîne de groupe pour calculer le trafic. La key et la name peuvent contenir des variables telles que $host, $server_name. Le groupe de name appartient à filterZones si spécifié. Le groupe de key appartient à serverZones si le deuxième argument name n'est pas spécifié. L'exemple avec le module geoip est le suivant :

server {
  server_name example.org;
  vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

  ...

}
  ...
  "serverZones": {
  ...
  },
  "filterZones": {
      "country::example.org": {
          "KR": {
              "requestCounter":...,
              "inBytes":...,
              "outBytes":...,
              "responses":{
                  "1xx":...,
                  "2xx":...,
                  "3xx":...,
                  "4xx":...,
                  "5xx":...,
                  "miss":...,
                  "bypass":...,
                  "expired":...,
                  "stale":...,
                  "updating":...,
                  "revalidated":...,
                  "hit":...,
                  "scarce":...
              },
              "requestMsecCounter":...,
              "requestMsec":...,
              "requestMsecs":{
                  "times":[...],
                  "msecs":[...]
              },
          },
          "US": {
          ...
          },
          ...
      },
      ...
  },
  ...

vhost_traffic_status_filter_check_duplicate

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

Description : Active ou désactive la dé-duplication de vhost_traffic_status_filter_by_set_key. Il est traité uniquement un des valeurs dupliquées (key + name) dans chaque directive (http, server, location) si cette option est activée.

vhost_traffic_status_filter_max_node

- -
Syntaxe vhost_traffic_status_filter_max_node number [string ...]
Par défaut 0
Contexte http

Description : Active la limite de la taille du filtre en utilisant les valeurs de number et string spécifiées. Si le number est dépassé, les nœuds existants sont supprimés par l'algorithme LRU. L'argument number est la taille du nœud qui sera limitée. La valeur par défaut 0 ne limite pas les filtres. Un nœud est un objet dans filterZones dans le document JSON. Les arguments string sont les valeurs de chaîne correspondantes pour la valeur de chaîne de groupe définie par la directive vhost_traffic_status_filter_by_set_key. Même si seule la première partie correspond, la correspondance est réussie comme une expression régulière /^string.*/. Par défaut, si vous ne définissez pas d'arguments string, cela s'applique à tous les filtres.

Par exemple :

$ vi nginx.conf

http {

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

    vhost_traffic_status_zone;

    # Tous les filtres sont limités à un total de 16 nœuds.
    # vhost_traffic_status_filter_max_node 16

    # Les motifs de chaîne de groupe `/^uris.*/` et `/^client::ports.*/` sont limités à un total de 64 nœuds.
    vhost_traffic_status_filter_max_node 16 uris client::ports;

    ...

    server {

        server_name example.org;

        ...

        vhost_traffic_status_filter_by_set_key $uri uris::$server_name;
        vhost_traffic_status_filter_by_set_key $remote_port client::ports::$server_name;
        vhost_traffic_status_filter_by_set_key $geoip_country_code country::$server_name;

    }
}

$ for i in {0..1000}; do curl -H 'Host: example.org' -i "http://localhost:80/test$i"; done

screenshot-vts-filter-max-node

Dans l'exemple ci-dessus, les motifs de chaîne de groupe /^uris.*/ et /^client::ports.*/ sont limités à un total de 16 nœuds. Les autres filtres comme country::.* ne sont pas limités.

vhost_traffic_status_limit

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

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

vhost_traffic_status_limit_traffic

- -
Syntaxe vhost_traffic_status_limit_traffic member:size [code]
Par défaut -
Contexte http, server, location

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

Les chaînes member disponibles sont les suivantes : * request * Le nombre total de requêtes clients reçues. * in * Le nombre total d'octets reçus des clients. * out * Le nombre total d'octets envoyés aux clients. * 1xx * Le nombre de réponses avec les codes d'état 1xx. * 2xx * Le nombre de réponses avec les codes d'état 2xx. * 3xx * Le nombre de réponses avec les codes d'état 3xx. * 4xx * Le nombre de réponses avec les codes d'état 4xx. * 5xx * Le nombre de réponses avec les codes d'état 5xx. * cache_miss * Le nombre de cache manqué. * cache_bypass * Le nombre de contournements de cache. * cache_expired * Le nombre de caches expirés. * cache_stale * Le nombre de caches obsolètes. * cache_updating * Le nombre de caches en cours de mise à jour. * cache_revalidated * Le nombre de caches revalidés. * cache_hit * Le nombre de caches réussis. * cache_scarce * Le nombre de caches rares.

vhost_traffic_status_limit_traffic_by_set_key

- -
Syntaxe vhost_traffic_status_limit_traffic_by_set_key key member:size [code]
Par défaut -
Contexte http, server, location

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

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

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

Les chaînes de member disponibles sont les suivantes : * request * Le nombre total de requêtes clients reçues. * in * Le nombre total d'octets reçus des clients. * out * Le nombre total d'octets envoyés aux clients. * 1xx * Le nombre de réponses avec les codes d'état 1xx. * 2xx * Le nombre de réponses avec les codes d'état 2xx. * 3xx * Le nombre de réponses avec les codes d'état 3xx. * 4xx * Le nombre de réponses avec les codes d'état 4xx. * 5xx * Le nombre de réponses avec les codes d'état 5xx. * cache_miss * Le nombre de cache manqué. * cache_bypass * Le nombre de contournements de cache. * cache_expired * Le nombre de caches expirés. * cache_stale * Le nombre de caches obsolètes. * cache_updating * Le nombre de caches en cours de mise à jour. * cache_revalidated * Le nombre de caches revalidés. * cache_hit * Le nombre de caches réussis. * cache_scarce * Le nombre de caches rares.

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

vhost_traffic_status_limit_check_duplicate

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

Description : Active ou désactive la dé-duplication de vhost_traffic_status_limit_by_set_key. Il est traité uniquement un des valeurs dupliquées (member | key + member) dans chaque directive (http, server, location) si cette option est activée.

vhost_traffic_status_set_by_filter

- -
Syntaxe vhost_traffic_status_set_by_filter $variable group/zone/name
Par défaut -
Contexte http, server, location, if

Description : Obtient la valeur de statut spécifiée stockée en mémoire partagée. Elle peut acquérir presque toutes les valeurs de statut et la valeur obtenue est stockée dans $variable qui est le premier argument.

  • group
  • server
  • filter
  • upstream@alone
  • upstream@group
  • cache
  • zone
  • server
    • name
  • filter
    • filter_group@name
  • upstream@group
    • upstream_group@name
  • upstream@alone
    • @name
  • cache
    • name
  • name
  • requestCounter
    • Le nombre total de requêtes clients reçues.
  • requestMsecCounter
    • Le nombre de temps de traitement des requêtes accumulé en millisecondes.
  • requestMsec
    • La moyenne des temps de traitement des requêtes en millisecondes.
  • responseMsecCounter
    • Le nombre de temps de traitement des réponses uniquement upstream accumulé en millisecondes.
  • responseMsec
    • La moyenne des temps de traitement des réponses uniquement upstream en millisecondes.
  • inBytes
    • Le nombre total d'octets reçus des clients.
  • outBytes
    • Le nombre total d'octets envoyés aux clients.
  • 1xx, 2xx, 3xx, 4xx, 5xx
    • Le nombre de réponses avec les codes d'état 1xx, 2xx, 3xx, 4xx et 5xx.
  • cacheMaxSize
    • La limite de la taille maximale du cache spécifiée dans la configuration.
  • cacheUsedSize
    • La taille actuelle du cache.
  • cacheMiss
    • Le nombre de cache manqué.
  • cacheBypass
    • Le nombre de contournements de cache.
  • cacheExpired
    • Le nombre de caches expirés.
  • cacheStale
    • Le nombre de caches obsolètes.
  • cacheUpdating
    • Le nombre de caches en cours de mise à jour.
  • cacheRevalidated
    • Le nombre de caches revalidés.
  • cacheHit
    • Le nombre de caches réussis.
  • cacheScarce
    • Le nombre de caches rares.
  • weight
    • Paramètre de poids 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. (0|1)
  • down
    • Paramètre down actuel du serveur. (0|1)

Avertissements : Le name est sensible à la casse. Toutes les valeurs de retour prennent le type entier.

Par exemple : * requestCounter dans serverZones * vhost_traffic_status_set_by_filter $requestCounter server/example.org/requestCounter * requestCounter dans filterZones * vhost_traffic_status_set_by_filter $requestCounter filter/country::example.org@KR/requestCounter * requestCounter dans upstreamZones * vhost_traffic_status_set_by_filter $requestCounter upstream@group/backend@10.10.10.11:80/requestCounter * requestCounter dans upstreamZones::nogroups * vhost_traffic_status_set_by_filter $requestCounter upstream@alone/10.10.10.11:80/requestCounter * cacheHit dans cacheZones * vhost_traffic_status_set_by_filter $cacheHit cache/my_cache_name/cacheHit

vhost_traffic_status_average_method

- -
Syntaxe vhost_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 qui calcule la moyenne des temps de traitement des réponses. Le period est un temps effectif des valeurs utilisées pour le calcul de la moyenne. (Par défaut : 60s) Si period est défini à 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 requêtes et après l'écoulement du temps. Les valeurs correspondantes sont requestMsec et responseMsec dans JSON.

vhost_traffic_status_histogram_buckets

- -
Syntaxe vhost_traffic_status_histogram_buckets second ...
Par défaut -
Contexte http, server, location

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, changez le NGX_HTTP_VHOST_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN dans le src/ngx_http_vhost_traffic_status_node.h

Par exemple : * vhost_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 100ms 500ms 1s 5s 10s]. * vhost_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 * Les seaux d'observation sont [5ms 10ms 50ms 100ms].

Avertissements : Par défaut, si vous ne définissez pas cette directive, les statistiques d'histogramme ne fonctionnent pas. Les histogrammes restaurés par la directive vhost_traffic_status_dump ne sont pas affectés par les modifications des seaux par la directive vhost_traffic_status_histogram_buckets. Donc, vous devez d'abord supprimer la zone ou le fichier de dump avant de changer les seaux par la directive vhost_traffic_status_histogram_buckets. De même, supprimez le fichier de dump lors de la première utilisation de l'histogramme.

vhost_traffic_status_bypass_limit

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

Description : Active ou désactive le contournement des directives vhost_traffic_status_limit. Les fonctionnalités de limite sont contournées si cette option est activée. Ceci est principalement utile si vous souhaitez vous connecter à la page Web de statut comme /status indépendamment des directives vhost_traffic_status_limit comme suit :

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            vhost_traffic_status_bypass_limit on;
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

vhost_traffic_status_bypass_stats

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

Description : Active ou désactive le contournement de vhost_traffic_status. Les fonctionnalités de statistiques de statut de trafic sont contournées si cette option est activée. En d'autres termes, il est exclu des statistiques de statut de trafic. Ceci est principalement utile si vous souhaitez ignorer votre demande dans la page Web de statut comme /status comme suit :

http {
    vhost_traffic_status_zone;

    ...

    server {

        ...

        location /status {
            vhost_traffic_status_bypass_stats on;
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
    }
}

vhost_traffic_status_stats_by_upstream

- -
Syntaxe vhost_traffic_status_stats_by_upstream \<on|off>
Par défaut on
Contexte http

Description : Active ou désactive les statistiques pour upstreamZone. Le upstreamZone dans les fonctionnalités de statistiques de statut de trafic est contourné si cette option est désactivée. En d'autres termes, il est exclu des statistiques de statut de trafic. Ceci est principalement utile si vous souhaitez désactiver la collecte de statistiques pour les serveurs upstream afin de réduire la charge CPU.

http {
    vhost_traffic_status_zone;
    vhost_traffic_status_stats_by_upstream off;

    proxy_cache_path /var/cache/nginx keys_zone=zone1:1m max_size=1g inactive=24h;
    upstream backend {
       ...
    }
    ...

    server {

        ...

        location /status {
            vhost_traffic_status_display;
            vhost_traffic_status_display_format html;
        }
        location /backend {
            proxy_cache zone1;
            proxy_pass http://backend;
        }
    }
}

vhost_traffic_status_measure_status_codes

Permet de suivre des codes d'état HTTP spécifiques ou tous les codes d'état dans le module de statut du trafic Vhost.

- -
Syntaxe vhost_traffic_status_measure_status_codes [all] [status_code1] [status_code2] ...
Par défaut off
Contexte http

Paramètres

  • status_code1, status_code2, ... : Codes d'état HTTP spécifiques à suivre (100-599)
  • all : Suivre tous les codes d'état HTTP

Exemples

Suivre des codes d'état spécifiques :

vhost_traffic_status_measure_status_codes 200 404 500;

Suivre tous les codes d'état :

vhost_traffic_status_measure_status_codes all;

Description

  • Par défaut, aucun suivi de code d'état spécifique n'est activé
  • Les codes d'état doivent être en ordre croissant
  • Seuls les codes d'état HTTP valides entre 100 et 599 sont acceptés
  • Lors de l'utilisation de all, chaque code d'état sera suivi

Versions

Pour couper une version, créez une entrée de journal des modifications PR avec git-chglog

version="v0.2.0"
git checkout -b "cut-${version}"
git-chglog -o CHANGELOG.md --next-tag "${version}"
git add CHANGELOG.md
sed -i "s/NGX_HTTP_VTS_MODULE_VERSION \".*/NGX_HTTP_VTS_MODULE_VERSION \"${version}\"/" src/ngx_http_vhost_traffic_status_module.h
git add src/ngx_http_vhost_traffic_status_module.h
git-chglog -t .chglog/RELNOTES.t