Module d'état du trafic hôte virtuel Nginx
Voir les versions GitHub pour la dernière version taguée.
Exécutez sudo prove -rt après avoir installé ce module. Le sudo est requis car le test nécessite que Nginx écoute sur le port 80.
Les versions antérieures ne sont pas testées.
shell> git clone git://github.com/vozlt/nginx-module-vts.git
Ajoutez le module à la configuration de build en ajoutant --add-module=/path/to/nginx-module-vts
Construisez le binaire Nginx.
Installez le binaire Nginx.
http {
vhost_traffic_status_zone;
...
server {
...
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
}Il s'agit d'un module Nginx qui donne accès aux informations d'état de l'hôte virtuels. Il contient l'état actuel tel que les serveurs, les amont, les 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, puis si la directive vhost_traffic_status_display est définie, peut être un accès comme suit:
/status/format/json , vous 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 , répondra avec le tableau de bord en direct intégré dans HTML qui demande en interne à /status/format/json ./status/format/jsonp , vous répondez 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 , répondra avec un document Prométhée contenant les données d'activité actuelles./status/control , répondra avec un document JSON après sa réinitialisation ou supprimez les zones via une chaîne de requête. Voir le contrôle.Le document JSON contient comme 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" : ...
}
},
...
}
}* ) et le rapport Hitvhost_traffic_status_filter_by_set_key* ) et le rapport Hit filtré via la directive vhost_traffic_status_filter_by_set_key Les objets overCounts dans le document JSON sont principalement destinés au système 32 bits et seront incrément de 1 si sa valeur est débordée. La directive vhost_traffic_status_display_format définit le format ouput par défaut qui est l'un des JSON, JSONP, html, prometheus. (Par défaut: JSON)
Calcul du trafic comme suit:
Tous les calculs fonctionnent dans la phase de traitement des log de Nginx. Les redirectes internes (X-Accel-Redirect ou Error_Page) ne calcule pas dans les amateurs d'Upstream.
Caveats: Ce module repose sur le système de journalisation NGINX (NGX_HTTP_LOG_PHASE: Dernière phase du NGINX HTTP), de sorte que le trafic peut être dans certaines circonstances différentes de ce trafic de bande passante réel. WebSocket, les téléchargements annulés peuvent être une cause d'inexactitudes. Le fonctionnement du module n'a pas du tout si la directive Access_log "ON" ou "OFF". Encore une fois, ce module fonctionne bien sur "Access_log off". Lorsque vous utilisez plusieurs domaines, il définit le premier domaine (à gauche) de la directive Server_name. Si vous n'en voulez pas, consultez le VHOST_TRAFFFIC_STATUS_FILTER_BY_HOST, VHOST_TRAFFFIC_STATUS_FILTER_BY_SET_KEY Directive.
Voir les modules suivants pour les statistiques de trafic stream :
Toutes les moyennes sont actuellement calculées comme AMM (moyenne arithmétique) sur les 64 dernières valeurs.
Il est capable de réinitialiser ou de supprimer les zones de trafic via une chaîne de requête. La demande répond par un document JSON.
{status_uri} / contrôle? 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;
}
}
} S'il définit comme ci-dessus, alors l'URI de contrôle est comme example.org/status/control .
Les arguments de demande disponibles sont les suivants:
status | reset | delete >status/format/json .server | filter | upstream@alone | upstream@group | cache | * > Ceci est similaire au status/format/json sauf qu'il peut obtenir chaque zones.
status/format/json . Les valeurs de la mainzones sont des valeurs d'état par défaut, y compris hostName , moduleVersion , nginxVersion , loadMsec , nowMsec , connections .
namefilter_group @ nameupstream_group @ namenamenameIl réinitialise les valeurs des zones spécifiées à 0.
namefilter_group @ nameupstream_group @ namenamenameIl supprime les zones spécifiées en mémoire partagée.
namefilter_group @ nameupstream_group @ namenamename Il peut obtenir séparément les valeurs d'état dans la configuration Nginx à l'aide de la directive vhost_traffic_status_set_by_filter . Il peut acquérir presque toutes les valeurs d'état et la valeur obtenue est stockée en variable définie par l'utilisateur qui est le premier argument.
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:
Veuillez consulter la directive VHOST_TRAFFFIC_STATUS_SET_BY_FILTER pour une utilisation détaillée.
Les informations d'état suivantes sont fournies au format JSON:
/ {status_uri} / format / json
/ {status_uri} / contrôle? cmd = statut & ...
{version}(|.dev.{commit}) .vhost_traffic_status )vhost_traffic_status_histogram_buckets Directive.serverZones sauf des noms de groupe.vhost_traffic_status_histogram_buckets Directive.vhost_traffic_status_histogram_buckets Directive.weight actuel du serveur.max_fails du serveur.fail_timeout du serveur.backup actuel du serveur.down actuel du serveur. Fondamentalement, ce n'est qu'une marque le serveur de NGX_HTTP_UPSTREAM_MODULE en bas (par exemple server backend3.example.com down ), pas l'état du serveur en amont réel. Il sera changé en état réel si vous avez activé la directive de zone en amont.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 attribuée par défaut. En d'autres termes, cette valeur provient de Nginx, pas de ce que j'ai spécifié.maxSize ci-dessus. / {status_uri} / contrôle? cmd = reset & ...
/ {status_uri} / contrôle? cmd = delete & ...
Les variables intégrées suivantes sont fournies:
Il est en mesure de limiter le trafic total par chaque hôte en utilisant la directive vhost_traffic_status_limit_traffic . Il est également en mesure 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.
http {
vhost_traffic_status_zone;
...
server {
server_name *.example.org;
vhost_traffic_status_limit_traffic in:64G;
vhost_traffic_status_limit_traffic out:1024G;
...
}
}*.example.org à 64g et 1024g respectivement. Il fonctionne individuellement par chaque domaine si vhost_traffic_status_filter_by_host La directive est activée. 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;
...
}
}
example.org à 1024g et 2048g respectivement. 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;
}
...
}
}
example.org à 512g et 1024g pour chaque pair. Caveats: Le trafic est le transfert ou le comptoir cumulatif, pas une bande passante.
Il est capable de calculer les statistiques individuelles définies par l'utilisateur en utilisant la directive vhost_traffic_status_filter_by_set_key .
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;
}
}
} Fondamentalement, l'image des drapeaux country est intégrée en HTML. L'image des drapeaux 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 .
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;
}
}
} 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;
}
}
}http_user_agent individuel 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;
}
}
}http status code détaillé Caveats: $ La variable d'état est disponible dans Nginx- (1.3.2, 1.2.2).
Si le domaine a plusieurs enregistrements DNS A, vous pouvez calculer le trafic pour les IP individuels pour le domaine à l'aide de 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;
}
}
}elb.example.org . Si elb.example.org a plusieurs DNS A enregistrera, affichera tous les IP dans filterZones . Dans les paramètres ci-dessus, lorsque Nginx démarre ou recharge la configuration informatique, il interroge un serveur DNS pour résoudre le domaine et DNS, un enregistrement est mis en cache en mémoire. Par conséquent, les enregistrements DNS A ne sont pas modifiés en mémoire même si DNS A Records est chagned par l'administrateur DNS à moins que Nginx remonte 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 ;
}
}
}elb.example.org . Si le DNS de elb.example.org a modifié un enregistrement, affichera à la fois l'ancienne IP et la nouvelle IP dans ::nogroups . Contrairement au premier paramètre de groupe en amont, le deuxième paramètre fonctionne bien même si DNS a des enregistrements sont chagned par l'administrateur DNS. Caveats: veuillez plus de détails sur Nginx DNS Voir le DNS-Service-Discovery-Nginx-Plus.
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;
}
}
}/status est exclu de la fonction de calcul du trafic d'état et de limite. Voir les directives suivantes: http {
vhost_traffic_status_zone;
vhost_traffic_status_dump /var/log/nginx/vts.db;
...
server {
...
}
}vhost_traffic_status_dump maintient les données de statistiques en permanence 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. {{uri}} en votre statut uri dans status.template.html comme suit: shell> vi share/status.template.html
var vtsStatusURI = "yourStatusUri/format/json", vtsUpdateInterval = 1000;
shell> cp share/status.template.html /usr/share/nginx/html/status.html
nginx.conf server {
server_name example.org;
root /usr/share/nginx/html;
# Redirect requests for / to /status.html
location = / {
return 301 /status.html;
}
location = /status.html {}
# Everything beginning /status (except for /status.html) is
# processed by the status handler
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format json;
}
}
http://example.org/status.html
Modifier share/status.template.html (ne modifie pas {{uri}} string)
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
Ajoutez le module à la configuration de build en ajoutant --add-module=/path/to/nginx-module-vts
Construisez le binaire Nginx.
Installez le binaire Nginx.

| - | - |
|---|---|
| Syntaxe | vhost_traffic_status <on | off> |
| Défaut | désactivé |
| Contexte | http, serveur, emplacement |
Description: Active ou désactive le fonctionnement du module. Si vous définissez la directive vhost_traffic_status_zone , est automatiquement activée.
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_zone [partagé: nom: taille ] |
| Défaut | Partagé: vhost_traffic_status: 1m |
| Contexte | http |
Description: Définit les paramètres d'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 est plutôt accrue lorsque vous utilisez la directive vhost_traffic_status_filter_by_set_key , mais si les clés du filtre sont fixées ( par exemple. Le nombre total du code du pays est d'environ 240 ), il n'augmente pas en continu.
Si vous utilisez la directive vhost_traffic_status_filter_by_set_key , définissez-la comme suit:
vhost_traffic_status_zone shared:vhost_traffic_status:32m )"ngx_slab_alloc() failed: no memory in vhost_traffic_status_zone" ) imprimé dans error_log, augmentez à plus de (usedSize * 2).| - | - |
|---|---|
| Syntaxe | Vhost_traffic_status_dump Path [ période ] |
| Défaut | - |
| Contexte | http |
Description: Active le vidage des données statistiques et la restauration. Le chemin est un emplacement pour vider les données statistiques. (Par exemple /var/log/nginx/vts.db ) La période est un temps de cycle de sauvegarde. (Par défaut: 60S) Il est sauvegardé immédiatement quel que soit le cycle de sauvegarde si Nginx est sorti par signal ( SIGKILL ).
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_display |
| Défaut | - |
| Contexte | http, serveur, emplacement |
Description: Active ou désactive le gestionnaire d'affichage du module.
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_display_format <json | html | jsonp | prometheus> |
| Défaut | json |
| Contexte | http, serveur, emplacement |
Description: Définit le format de sortie du gestionnaire d'affichage. Si vous définissez json , vous répondez avec un document JSON. Si vous définissez html , vous répondez avec le tableau de bord en direct intégré dans HTML. Si vous définissez jsonp , répondra avec une fonction de rappel JSONP (par défaut: ngx_http_vhost_traffic_status_jsonp_callback ). Si vous définissez prometheus , vous répondez avec un document Prometheus.
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_display_jsonp rappel |
| Défaut | ngx_http_vhost_traffic_status_jsonp_callback |
| Contexte | http, serveur, emplacement |
Description: Définit le nom de rappel du JSONP.
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_display_sum_key Nom |
| Défaut | * |
| Contexte | http, serveur, emplacement |
Description: Définit la chaîne de clés de somme dans JSON du champ ServerZones. La chaîne de clé SUM par défaut est le "*".
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_filter <on | off> |
| Défaut | sur |
| Contexte | http, serveur, emplacement |
Description: Active ou désactive les fonctionnalités du filtre.
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_filter_by_host <on | off> |
| Défaut | désactivé |
| Contexte | http, serveur, emplacement |
Description: Active ou désactive les clés par champ d'en-tête hôte. Si vous définissez on le nom de la directive Server_name de Nginx, définissez plusieurs ou noms génériques à partir d'un astérisque, par exemple «* .example.org» et demandé à server avec un nom d'hôte tel que (a | b | c) .example.org ou * .example.org, alors 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 qui définit vhost_traffic_status_filter_by_set_key $host .
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_filter_by_set_key key [ name ] |
| Défaut | - |
| Contexte | http, serveur, emplacement |
Description: Active les clés par variable définie par l'utilisateur. La clé est une chaîne de clé pour calculer le trafic. Le nom est une chaîne de groupe pour calculer le trafic. La clé et le nom peuvent contenir des variables telles que $ host, $ server_name. Le groupe du nom appartient à filterZones s'il est spécifié. Le groupe de la clé appartient à serverZones si non spécifié le deuxième nom d' argument. 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" : {
...
},
...
},
...
},
...
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_filter_check_duplicate <on | off> |
| Défaut | sur |
| Contexte | http, serveur, emplacement |
Description: Active ou désactive la déduplication de vhost_traffic_status_filter_by_set_key. Il n'est traité qu'une seule des valeurs en double ( key + name ) dans chaque directive (http, serveur, emplacement) si cette option est activée.
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_filter_max_node numéro [ String ...] |
| Défaut | 0 |
| Contexte | http |
Description: Active la limite de la taille du filtre à l'aide du nombre et des valeurs de chaîne spécifiées. Si le nombre est dépassé, les nœuds existants sont supprimés par l'algorithme LRU. L'argument numérique est la taille du nœud qui sera limité. La valeur par défaut 0 ne limite pas les filtres. Le nœud One est un objet dans filterZones dans le document JSON. Les arguments de chaîne 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 seulement 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 les arguments de chaîne , il s'applique à tous les filtres.
Pour des exemples:
$ vi nginx.conf
http {
geoip_country /usr/share/GeoIP/GeoIP.dat;
vhost_traffic_status_zone;
# The all filters are limited to a total of 16 nodes.
# vhost_traffic_status_filter_max_node 16
# The `/^uris.*/` and `/^client::ports.*/` group string patterns are limited to a total of 64 nodes.
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

Dans l'exemple ci-dessus, les modèles de chaîne /^uris.*/ et /^client::ports.*/ / Les modèles de chaîne de groupe sont limités à un total de 16 nœuds. Les autres filtres comme country::.* Ne sont pas limités.
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_limit <on | off> |
| Défaut | sur |
| Contexte | http, serveur, emplacement |
Description: Active ou désactive les fonctionnalités de limite.
| - | - |
|---|---|
| Syntaxe | Vhost_traffic_status_limit_traffic Membre : taille [ code ] |
| Défaut | - |
| Contexte | http, serveur, emplacement |
Description: Active la limite de trafic pour un membre spécifié. Le membre est une chaîne de membres pour limiter le trafic. La taille 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:
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_limit_traffic_by_set_key Membre de clé : taille [ code ] |
| Défaut | - |
| Contexte | http, serveur, emplacement |
Description: Active la limite de trafic pour la clé et le membre spécifié. La clé est une chaîne de clé pour limiter le trafic. Le membre est une chaîne de membres pour limiter le trafic. La taille 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 key est la suivante:
group @ [ subgroup @] name Les chaînes group disponibles sont les suivantes:
subgroup )subgroup ) Les chaînes member disponibles sont les suivantes:
Le membre est le même que la directive vhost_traffic_status_limit_traffic .
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_limit_check_duplicate <on | off> |
| Défaut | sur |
| Contexte | http, serveur, emplacement |
Description: Active ou désactive la déduplication de vhost_traffic_status_limit_by_set_key. Il n'est traité qu'une seule des valeurs en double ( member | key + member ) dans chaque directive (http, serveur, emplacement) si cette option est activée.
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_set_by_filter $ groupe / zone / nom de variable |
| Défaut | - |
| Contexte | http, serveur, emplacement, si |
Description: Obtenez la valeur d'état spécifiée stockée dans la mémoire partagée. Il peut acquérir presque toutes les valeurs d'état et la valeur obtenue est stockée en variable $ qui est le premier argument.
Caveats: le nom est sensible à la casse. Toutes les valeurs de retour prennent le type entier.
Pour des exemples:
$requestCounter server/example.org/requestCounter$requestCounter filter/country::example.org@KR/requestCounter$requestCounter upstream@group/[email protected]:80/requestCounter$requestCounter upstream@alone/10.10.10.11:80/requestCounter$cacheHit cache/my_cache_name/cacheHit| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_average_method <AMM|WMA> [ period ] |
| Défaut | AMM 60s |
| Contexte | http, server, location |
Description: Sets the method which is a formula that calculate the average of response processing times. The period is an effective time of the values used for the average calculation.(Default: 60s) If period set to 0, effective time is ignored. In this case, the last average value is displayed even if there is no requests and after the elapse of time. The corresponding values are requestMsec and responseMsec in JSON.
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_histogram_buckets second ... |
| Défaut | - |
| Contexte | http, server, location |
Description: Sets the observe buckets to be used in the histograms. By default, if you do not set this directive, it will not work. The second can be expressed in decimal places with a minimum value of 0.001(1ms). The maximum size of the buckets is 32. If this value is insufficient for you, change the NGX_HTTP_VHOST_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN in the src/ngx_http_vhost_traffic_status_node.h
For examples:
0.005 0.01 0.05 0.1 0.5 1 5 100.005 0.01 0.05 0.1 Caveats: By default, if you do not set this directive, the histogram statistics does not work. The restored histograms by vhost_traffic_status_dump directive have no affected by changes to the buckets by vhost_traffic_status_histogram_buckets directive. So you must first delete the zone or the dump file before changing the buckets by vhost_traffic_status_histogram_buckets directive. Similar to the above, delete the dump file when using the histogram for the first time.
| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_bypass_limit <on|off> |
| Défaut | désactivé |
| Contexte | http, server, location |
Description: Enables or disables to bypass vhost_traffic_status_limit directives. The limit features is bypassed if this option is enabled. This is mostly useful if you want to connect the status web page like /status regardless of vhost_traffic_status_limit directives as follows:
http {
vhost_traffic_status_zone;
...
server {
...
location /status {
vhost_traffic_status_bypass_limit on;
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
}| - | - |
|---|---|
| Syntaxe | vhost_traffic_status_bypass_stats <on|off> |
| Défaut | désactivé |
| Contexte | http, server, location |
Description: Enables or disables to bypass vhost_traffic_status . The traffic status stats features is bypassed if this option is enabled. In other words, it is excluded from the traffic status stats. This is mostly useful if you want to ignore your request in status web page like /status as follows:
http {
vhost_traffic_status_zone;
...
server {
...
location /status {
vhost_traffic_status_bypass_stats on;
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
}To cut a release, create a changelog entry PR with 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-
After the PR is merged, create the new tag and release on the GitHub Releases.
Stream traffic status
Prométhée
System protection
YoungJoo.Kim(김영주) [[email protected]]