Aller au contenu

vts: Module de statut du trafic des hôtes virtuels 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-vts
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 :

load_module modules/ngx_http_vhost_traffic_status_module.so;

Ce document décrit nginx-module-vts v0.2.5 publié le 28 décembre 2025.


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 serveurs, upstreams, caches. Ceci 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, et ensuite, 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
  • Les informations de mémoire partagée utilisées dans nginx-module-vts.
  • serverZones
  • Trafic (entrant/sortant) et compte des requêtes et des réponses et ratio de hits par zone de serveur
  • Trafic total (entrant/sortant) et compte des requêtes et des réponses (le nom de la zone est *) et ratio de hits
  • filterZones
  • Trafic (entrant/sortant) et compte des requêtes et des réponses et ratio de hits par zone de serveur filtrée par la directive vhost_traffic_status_filter_by_set_key
  • Trafic total (entrant/sortant) et compte des requêtes et des réponses (le nom de la zone est *) et ratio de hits filtré par la directive vhost_traffic_status_filter_by_set_key
  • upstreamZones
  • Trafic (entrant/sortant) et compte des requêtes et des réponses par serveur dans chaque groupe upstream
  • Paramètres actuels (poids, maxfails, failtimeout...) dans nginx.conf
  • cacheZones
  • Trafic (entrant/sortant) et taille (capacité/utilisée) et ratio de hits 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 est le suivant :

  • 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 s'appuie 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 la cause d'inexactitudes. Le fonctionnement du module n'a pas d'importance que la directive access_log soit "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 * 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|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 les 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 les 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 les 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 les 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. Il 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/[email protected]: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 fournie.
  • loadMsec
  • Temps de processus chargé en millisecondes.
  • nowMsec
  • Temps actuel en millisecondes
  • connections
  • 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ée 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 client reçues.
  • 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 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 cache expiré.
    • stale
    • Le nombre de cache obsolète.
    • updating
    • Le nombre de cache en cours de mise à jour.
    • revalidated
    • Le nombre de cache revalidé.
    • hit
    • Le nombre de cache atteint.
    • scarce
    • Le nombre de cache rare.
  • requestMsecCounter
    • Le nombre de temps de traitement des requêtes accumulées en millisecondes.
  • requestMsec
    • La moyenne des temps de traitement des requêtes en millisecondes.
  • requestMsecs
    • times
    • Les temps en millisecondes lors des temps de traitement des requêtes.
    • msecs
    • Les temps de traitement des requêtes en millisecondes.
  • requestBuckets
    • msecs
    • Les valeurs de seau de l'histogramme définies par la directive vhost_traffic_status_histogram_buckets.
    • counters
    • Les valeurs cumulées pour la raison pour laquelle 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 groupes.
  • upstreamZones
  • server
    • Une adresse du serveur.
  • requestCounter
    • 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 les codes d'état 1xx, 2xx, 3xx, 4xx et 5xx.
  • requestMsecCounter
    • Le nombre de temps de traitement des requêtes accumulées 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 temps de traitement des requêtes.
    • msecs
    • Les temps de traitement des requêtes incluant l'upstream en millisecondes.
  • requestBuckets
    • msecs
    • Les valeurs de seau de l'histogramme définies par la directive vhost_traffic_status_histogram_buckets.
    • counters
    • Les valeurs cumulées pour la raison pour laquelle chaque valeur de seau est supérieure ou égale au temps de traitement de la requête incluant l'upstream.
  • responseMsecCounter
    • Le nombre de temps de traitement des réponses uniquement upstream accumulées en millisecondes.
  • responseMsec
    • La moyenne des temps de traitement des réponses uniquement upstream en millisecondes.
  • responseMsecs
    • times
    • Les temps en millisecondes lors des temps de traitement des requêtes.
    • msecs
    • Les temps de traitement des réponses uniquement upstream en millisecondes.
  • responseBuckets
    • msecs
    • Les valeurs de seau de l'histogramme définies par la directive vhost_traffic_status_histogram_buckets.
    • counters
    • Les valeurs cumulées pour la raison pour laquelle 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 d'é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 de bytes reçus du cache.
  • outBytes
    • Le nombre total de bytes envoyés depuis le cache.
  • responses
    • miss
    • Le nombre de cache manqué.
    • bypass
    • Le nombre de contournements de cache.
    • expired
    • Le nombre de cache expiré.
    • stale
    • Le nombre de cache obsolète.
    • updating
    • Le nombre de cache en cours de mise à jour.
    • revalidated
    • Le nombre de cache revalidé.
    • hit
    • Le nombre de cache atteint.
    • scarce
    • Le nombre de cache rare.

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 traitement réel.

Variables

Les variables intégrées suivantes sont fournies :

  • $vts_request_counter
  • Le nombre total de requêtes client reçues.
  • $vts_in_bytes
  • Le nombre total de bytes reçus des clients.
  • $vts_out_bytes
  • Le nombre total de bytes envoyés aux clients.
  • $vts_1xx_counter
  • Le nombre de réponses avec des codes d'état 1xx.
  • $vts_2xx_counter
  • Le nombre de réponses avec des codes d'état 2xx.
  • $vts_3xx_counter
  • Le nombre de réponses avec des codes d'état 3xx.
  • $vts_4xx_counter
  • Le nombre de réponses avec des codes d'état 4xx.
  • $vts_5xx_counter
  • Le nombre de réponses avec des 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 cache expiré.
  • $vts_cache_stale_counter
  • Le nombre de cache obsolète.
  • $vts_cache_updating_counter
  • Le nombre de cache en cours de mise à jour.
  • $vts_cache_revalidated_counter
  • Le nombre de cache revalidé.
  • $vts_cache_hit_counter
  • Le nombre de cache atteint.
  • $vts_cache_scarce_counter
  • Le nombre de cache rare.
  • $vts_request_time_counter
  • Le nombre de temps de traitement des requêtes accumulées.
  • $vts_request_time
  • La moyenne des temps de traitement des requêtes.

Limite

Il est possible de limiter le trafic total par chaque 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 par 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@[email protected]:80 in:512G;
            vhost_traffic_status_limit_traffic_by_set_key UG@[email protected]: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;
        }
    }
}
  • Calculer le trafic pour chaque pays de tous les groupes de serveurs.
  • Calculer le trafic pour chaque pays de chaque groupe de serveurs.

Fondamentalement, les images des drapeaux des pays sont intégrées dans le HTML. L'image du drapeau du 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 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;
        }
    }
}
  • Calculer 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;
        }
    }
}
  • Calculer le trafic pour chaque http_user_agent

Pour calculer le trafic pour les 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;
        }
    }
}
  • Calculer le trafic pour les 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 le dns dynamique

Si le domaine a plusieurs enregistrements DNS A, vous pouvez calculer le trafic pour chaque IP pour le domaine en utilisant la fonctionnalité 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;
        }
    }
}
  • Calculer 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. Par conséquent, 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;
        }
    }
}
  • Calculer 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 IP seront affichées dans ::nogroups. Contrairement au premier paramètre du groupe upstream, le deuxième paramètre fonctionne bien même si les enregistrements DNS A sont modifiés par l'administrateur DNS.

Avertissements : Pour plus de détails sur le DNS NGINX, voir 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 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}} à 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 pour /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.

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 la taille de la mémoire partagée à plus de 32M 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") s'affiche 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 le dump et la restauration des données statistiques. Le path est un emplacement pour dumper 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 quitté 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": {
      ...
      }
      ...
   },
   ...

Cela 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. 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 name peuvent contenir des variables telles que $host, $server_name. Le groupe name appartient à filterZones s'il est spécifié. Le groupe key appartient à serverZones s'il n'est pas spécifié en tant que deuxième argument name. 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 en double (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 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 l'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 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 : * request * Le nombre total de requêtes client reçues. * 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. * cache_miss * Le nombre de cache manqué. * cache_bypass * Le nombre de contournements de cache. * cache_expired * Le nombre de cache expiré. * cache_stale * Le nombre de cache obsolète. * cache_updating * Le nombre de cache en cours de mise à jour. * cache_revalidated * Le nombre de cache revalidé. * cache_hit * Le nombre de cache atteint. * cache_scarce * Le nombre de cache rare.

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. 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 de group disponibles sont les suivantes : * NO * Le groupe de serveur. * UA * Le groupe d'upstream seul. * UG * Le groupe d'upstream group. (utilisez subgroup) * CC * Le groupe de cache. * FG * Le groupe de filtre. (utilisez subgroup)

Les chaînes de member disponibles sont les suivantes : * request * Le nombre total de requêtes client reçues. * 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. * cache_miss * Le nombre de cache manqué. * cache_bypass * Le nombre de contournements de cache. * cache_expired * Le nombre de cache expiré. * cache_stale * Le nombre de cache obsolète. * cache_updating * Le nombre de cache en cours de mise à jour. * cache_revalidated * Le nombre de cache revalidé. * cache_hit * Le nombre de cache atteint. * cache_scarce * Le nombre de cache rare.

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 en double (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 : Obtenez la valeur de statut spécifiée stockée en mémoire partagée. Il 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 client reçues.
  • requestMsecCounter
    • Le nombre de temps de traitement des requêtes accumulées 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ées en millisecondes.
  • responseMsec
    • La moyenne des temps de traitement des réponses uniquement upstream en millisecondes.
  • inBytes
    • Le nombre total de bytes reçus des clients.
  • outBytes
    • Le nombre total de bytes envoyés aux clients.
  • 1xx, 2xx, 3xx, 4xx, 5xx
    • Le nombre de réponses avec des 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 cache expiré.
  • cacheStale
    • Le nombre de cache obsolète.
  • cacheUpdating
    • Le nombre de cache en cours de mise à jour.
  • cacheRevalidated
    • Le nombre de cache revalidé.
  • cacheHit
    • Le nombre de cache atteint.
  • cacheScarce
    • Le nombre de cache rare.
  • 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/[email protected]: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 changements des seaux par la directive vhost_traffic_status_histogram_buckets. Donc, vous devez d'abord supprimer la zone ou le fichier dump avant de changer les seaux par la directive vhost_traffic_status_histogram_buckets. De même, supprimez le fichier dump lors de l'utilisation de l'histogramme pour la première fois.

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, cela 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 upstreamZone. La upstreamZone dans les fonctionnalités de statistiques de statut de trafic est contournée si cette option est désactivée. En d'autres termes, cela 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 le suivi de codes d'état HTTP spécifiques ou de tous les codes d'état dans le module Vhost Traffic Status.

- -
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 dans l'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 effectuer une version, créez une entrée de changelog 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.tmpl --next-tag "${version}" "${version}" | git commit -F-

Après que la PR soit fusionnée, créez le nouveau tag et la version sur les GitHub Releases.

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 de nginx-module-vts.