Nginx Virtual Host -Verkehrsstatusmodul
In den GitHub -Veröffentlichungen finden Sie die neueste Veröffentlichung mit Tagged.
Führen Sie sudo prove -rt nachdem Sie dieses Modul installiert haben. Der sudo ist erforderlich, da der Test erforderlich ist, dass Nginx auf Port 80 anhört.
Frühere Versionen werden nicht getestet.
shell> git clone git://github.com/vozlt/nginx-module-vts.git
Fügen Sie das Modul der Erstellungskonfiguration hinzu, indem Sie --add-module=/path/to/nginx-module-vts
Bauen Sie den Nginx -Binärer auf.
Installieren Sie die Nginx -Binärdatei.
http {
vhost_traffic_status_zone;
...
server {
...
location /status {
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
}Dies ist ein NGINX -Modul, das Zugriff auf Informationen zur virtuellen Host -Status bietet. Es enthält den aktuellen Status wie Server, Upstreams, Caches. Dies ähnelt der Live -Aktivitätsüberwachung von Nginx Plus. Das integrierte HTML stammt auch von der Demo-Seite der alten Version.
Zunächst ist die Richtlinie vhost_traffic_status_zone erforderlich, und wenn die Richtlinie vhost_traffic_status_display festgelegt ist, kann der Zugriff wie folgt zugreifen:
/status/format/json anfordern, antworten Sie mit einem JSON-Dokument, das die aktuellen Aktivitätsdaten für die Verwendung in Live-Dashboards und Überwachungstools von Drittanbietern enthält./status/format/html anfordern, antworten Sie mit dem integrierten Live-Dashboard in HTML, das intern nach /status/format/json anfordert./status/format/jsonp anfordern, antworten Sie mit einer JSONP-Rückruffunktion, die die aktuellen Aktivitätsdaten für die Verwendung in Live-Dashboards und Überwachungstools von Drittanbietern enthält./status/format/prometheus anfordern, antworten Sie mit einem Prometheus -Dokument, das die aktuellen Aktivitätsdaten enthält./status/control anfordern, antworten Sie mit einem JSON -Dokument, nachdem es Zonen durch eine Abfragebarstellung zurückgesetzt oder gelöscht hat. Siehe die Kontrolle.Das JSON -Dokument enthält wie folgt:
{
"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" : ...
}
},
...
}
}* ) und Trefferverhältnisvhost_traffic_status_filter_by_set_key -Anweisung gefiltert wird* ) und das Verhältnis durch die vhost_traffic_status_filter_by_set_key -Anweisung gefiltert Die overCounts Objekten im JSON -Dokument sind hauptsächlich für ein 32 -Bit -System und werden um 1 erhöht, wenn sein Wert überflutet wird. Die Richtlinie vhost_traffic_status_display_format legt das Standard -OUPUT -Format fest, das eines von JSONP, JSONP, HTML, Prometheus ist. (Standard: JSON)
Verkehrsberechnung wie folgt:
Alle Berechnungen arbeiten in der Protokollverarbeitungsphase von Nginx. Interne Weiterleitungen (X-Accel-Red Direct oder ERROR_PAGE) berechnen in den Upstreamzonen nicht.
Caveats: Dieses Modul basiert auf dem Nginx -Protokollierungssystem (NGX_HTTP_LOG_PHASE: Letzte Phase des Nginx HTTP), sodass der Verkehr in bestimmten Cirumstances unterschiedlich sein kann, die sich als reales Bandbreitenverkehr unterscheiden. Websocket, stornierte Downloads können Ursachen für Ungenauigkeiten sein. Die Arbeit des Moduls spielt überhaupt keine Rolle, ob die Access_log -Anweisung "oder" aus "auf" Off ". Auch dieses Modul funktioniert gut auf "Access_log off". Wenn Sie mehrere Domänen verwenden, wird es für die erste Domäne (links) der Server_Name -Anweisung festgelegt. Wenn Sie es nicht wollen, sehen Sie sich die VHOST_TRAFFIC_STATUS_FILTER_BY_HOST, VHOST_TRAFFIC_STATUS_FILTER_BY_SET_KEY.
Siehe die folgenden Module für die stream -Verkehrsstatistik:
Alle Durchschnittswerte werden derzeit in den letzten 64 Werten als AMM (arithmetischer Mittelwert) berechnet.
Es ist in der Lage, Verkehrszonen durch eine Abfragezeichenfolge zurückzusetzen oder zu löschen. Die Anfrage antwortet mit einem JSON -Dokument.
{name} {status_uri} / {command} {group} 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;
}
}
} Wenn es wie oben festgelegt ist, ist der Steuer -URI wie example.org/status/control .
Die verfügbaren Anforderungsargumente sind wie folgt:
status | reset | delete >status/format/json in das JSON -Format zurück.server | filter | upstream@alone | upstream@group | cache | * > Dies ähnelt dem status/format/json außer dass es jede Zonen erhalten kann.
status/format/json . Die Mainzones -Werte sind Standardstatuswerte, einschließlich hostName , moduleVersion , nginxVersion , loadMsec , nowMsec , connections .
namefilter_group @ nameupstream_group status name control?namenameEs setzt die Werte der angegebenen Zonen auf 0 zurück.
namefilter_group @ nameupstream_group status name control?namenameEs löscht die angegebenen Zonen im gemeinsamen Speicher.
namefilter_group @ nameupstream_group status name control?name control?name Es kann die Statuswerte in der Nginx -Konfiguration separat unter Verwendung von vhost_traffic_status_set_by_filter -Direktive abrufen. Es kann fast alle Statuswerte erwerben und der erhaltene Wert wird in benutzerdefinierten Variablen gespeichert, was erstes Argument ist.
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;
}
}
}Die obigen Einstellungen sind wie folgt:
Weitere detaillierte Verwendung finden Sie in der VHOST_TRAFFIC_STATUS_SET_BY_FILTER -Anweisung.
Die folgenden Statussinformationen finden Sie im JSON -Format:
/ {status_uri} /format /json
/ {status_uri} / control? cmd = status & ...
{version}(|.dev.{commit}) Format.vhost_traffic_status )vhost_traffic_status_histogram_buckets Richtlinie.serverZones , außer dass es Gruppennamen enthält.vhost_traffic_status_histogram_buckets Richtlinie.vhost_traffic_status_histogram_buckets Richtlinie.weight des Servers.max_fails -Einstellung des Servers.fail_timeout -Einstellung des Servers.backup des Servers.down -Einstellung des Servers. Grundsätzlich ist dies nur eine Markierung des Servers von NGX_HTTP_UPSTREAM_MODULE (z. B. server backend3.example.com down ), nicht den tatsächlichen Upstream -Serverstatus. Es wird in den tatsächlichen Zustand geändert, wenn Sie die vorgelagerte Zonenanweisung aktiviert haben.max_size in proxy_cache_path nicht angegeben ist, wird der systemabhängige Wert NGX_MAX_OFF_T_VALUE standardmäßig zugewiesen. Mit anderen Worten, dieser Wert stammt von Nginx, nicht von dem, was ich angegeben habe.maxSize -Wert entnommen. / {status_uri} / control? cmd = Reset & ...
/ {status_uri} / control? cmd = delete & ...
Die folgenden eingebetteten Variablen werden bereitgestellt:
Es ist in der Lage, den Gesamtverkehr pro Host zu begrenzen, indem es die Anweisung vhost_traffic_status_limit_traffic verwendet. Es ist auch in der Lage, den gesamten Datenverkehr mit der Anweisung vhost_traffic_status_limit_traffic_by_set_key zu begrenzen. Wenn das Limit überschritten wird, gibt der Server den 503 (vorübergehend nicht verfügbaren Dienst) als Antwort auf eine Anfrage zurück. Der Rückgabecode kann veränderlich sein.
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 auf 64G bzw. 1024G. Es funktioniert einzeln pro Domain, wenn die Anweisung vhost_traffic_status_filter_by_host aktiviert ist. 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 auf 1024G bzw. 2048G. 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 auf 512 g und 1024 g pro Peer. Caveats: Verkehr ist die kumulative Übertragung oder Zähler, keine Bandbreite.
Es ist in der Lage, die benutzerdefinierten einzelnen Statistiken mithilfe der Anweisung vhost_traffic_status_filter_by_set_key zu berechnen.
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;
}
}
} Grundsätzlich ist das Image des Landflaggen in HTML eingebaut. Das Bildflaggenbild ist aktiviert, wenn die country im Gruppennamen enthalten ist, das ein zweites Argument der vhost_traffic_status_filter_by_set_key -Direktive ist.
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 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 Caveats: $ status variable ist in nginx- (1.3.2, 1.2.2) erhältlich.
Wenn die Domäne mehrere DNS -A -Datensätze enthält, können Sie den Datenverkehr für einzelne IPs für die Domäne unter Verwendung der Filterfunktion oder einer Variablen in proxy_pass berechnen.
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 . Wenn elb.example.org mehrere DNS -A -Datensätze hat, werden alle IPs in filterZones angezeigt. In den obigen Einstellungen wird ein DNS -Server zum Auflösen von Domänen und DNS A -Datensätzen zwischengespeichert, da Nginx die Konfiguration gestartet oder neu lädt, und DNS -A -Datensätze. Daher werden die DNS-A-Datensätze im Speicher nicht geändert, selbst wenn die DNS-A-Datensätze vom DNS-Administrator chagniert werden, es sei denn, Nginx startet erneut oder lädt neu. 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 . Wenn elb.example.org DNS A -Datensatz geändert wird, wird sowohl die alte IP als auch die neue IP in ::nogroups angezeigt. Im Gegensatz zur ersten Aufpackungsgruppeneinstellung funktioniert die zweite Einstellung gut, auch wenn DNS A -Datensätze vom DNS -Administrator chagniert werden. Caveats: Weitere Informationen zu Nginx DNS finden Sie im 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 -URI ist von der Statusverkehrsberechnung und der Grenzfunktion ausgeschlossen. Siehe die folgenden Anweisungen: http {
vhost_traffic_status_zone;
vhost_traffic_status_dump /var/log/nginx/vts.db;
...
server {
...
}
}vhost_traffic_status_dump -Anweisung verwaltet die Statistikdaten dauerhaft, selbst wenn das System neu gestartet wurde oder Nginx neu gestartet wurde. Weitere detaillierte Verwendung finden Sie in der VHOST_TRAFFIC_STATUS_DUMP -Direktive. {{uri}} in Ihren Status URI in Status.template.html wie folgt ändern: 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
Ändern Sie share/status.template.html ( {{uri}} String nicht ändern)
Erstellen Sie die ngx_http_vhost_traffic_status_module_html.h wie folgt:
shell> cd util
shell> ./tplToDefine.sh ../share/status.template.html > ../src/ngx_http_vhost_traffic_status_module_html.h
Fügen Sie das Modul der Erstellungskonfiguration hinzu, indem Sie --add-module=/path/to/nginx-module-vts
Bauen Sie den Nginx -Binärer auf.
Installieren Sie die Nginx -Binärdatei.

| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS <EIN | AUS> |
| Standard | aus |
| Kontext | HTTP, Server, Ort |
Description: Aktiviert oder deaktiviert das MODUL. Wenn Sie die Anweisung vhost_traffic_status_zone festlegen, ist automatisch aktiviert.
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_ZONE [Shared: Name: Größe ] |
| Standard | geteilt: VHOST_TRAFFIC_STATUS: 1M |
| Kontext | http |
Description: Legt Parameter für eine gemeinsam genutzte Speicherzone fest, in der die Zustände für verschiedene Schlüssel behalten. Der Cache wird zwischen allen Arbeitsprozessen geteilt. In den meisten Fällen nimmt die von Nginx-Modul-VTS verwendete gemeinsame Speichergröße nicht viel zu. Die gemeinsame Speichergröße wird hübsch erhöht, wenn vhost_traffic_status_filter_by_set_key Anweisung verwendet wird. Wenn die Tasten des Filters jedoch festgelegt sind ( z. B. die Gesamtzahl des Ländercodes etwa 240 ), erhöht sie sich nicht kontinuierlich.
Wenn Sie vhost_traffic_status_filter_by_set_key -Direktive verwenden, setzen Sie sie wie folgt fest:
vhost_traffic_status_zone shared:vhost_traffic_status:32m )"ngx_slab_alloc() failed: no memory in vhost_traffic_status_zone" ) in error_log gedruckt, erhöhen Sie sich auf mehr als (usedSize * 2).| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_DUMP PATH [ Periode ] |
| Standard | - - |
| Kontext | http |
Description: Aktiviert die Statistikdaten Dump und Wiederherstellung. Der Pfad ist ein Ort, an dem die Statistikdaten abgeladen werden. (Z. B. (z. B. /var/log/nginx/vts.db ) Der Zeitraum ist eine Sicherungszykluszeit. (Standard: 60s) Es wird unabhängig vom Sicherungszyklus sofort gesichert, wenn Nginx durch Signal ( SIGKILL ) beendet wird.
| - - | - - |
|---|---|
| Syntax | Vhost_traffic_status_display |
| Standard | - - |
| Kontext | HTTP, Server, Ort |
Description: Aktiviert oder deaktiviert das Modul -Anzeige -Handler.
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_DISPLAY_FORMAT <JSON | HTML | JSONP | Prometheus> |
| Standard | JSON |
| Kontext | HTTP, Server, Ort |
Description: Legt das Ausgangsformat des Display -Handlers fest. Wenn Sie json festlegen, antworten Sie mit einem JSON -Dokument. Wenn Sie html einstellen, antworten Sie mit dem integrierten Live-Dashboard in HTML. Wenn Sie jsonp festlegen, antworten Sie mit einer JSONP -Rückruffunktion (Standard: ngx_http_vhost_traffic_status_jsonp_callback ). Wenn Sie prometheus festlegen, antworten Sie mit einem Prometheus -Dokument.
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_DISPLAY_JSONP CALLBACK |
| Standard | ngx_http_vhost_traffic_status_jsonp_callback |
| Kontext | HTTP, Server, Ort |
Description: Legt den Rückrufnamen für den JSONP fest.
| - - | - - |
|---|---|
| Syntax | Vhost_traffic_status_display_sum_key Name |
| Standard | * |
| Kontext | HTTP, Server, Ort |
Description: Legt die Summenschlüsselzeichenfolge in JSON des Serverzones -Felds fest. Die Standard -Summenschlüsselzeichenfolge ist die "*".
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_FILTER <ON | AUS> |
| Standard | An |
| Kontext | HTTP, Server, Ort |
Description: Aktiviert oder deaktiviert die Filterfunktionen.
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_FILTER_BY_HOST <AN | AUS> |
| Standard | aus |
| Kontext | HTTP, Server, Ort |
Description: Aktiviert oder deaktiviert die Schlüssel nach Host -Header -Feld. Wenn Sie und die Server_Name -Direktive von Nginx on setzen Sie mehrere oder Platzhalternamen mit einem Sternchen, z. B. " *.example.org" und fordert den Server mit Hostname wie (a | b | c) .example.org oder *.example.org angefordert.
server {
server_name *.example.org;
vhost_traffic_status_filter_by_host on;
...
} ...
"serverZones" : {
"a.example.org" : {
...
},
"b.example.org" : {
...
},
"c.example.org" : {
...
}
...
},
... Es bietet dieselbe Funktion, die vhost_traffic_status_filter_by_set_key $host festgelegt hat.
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_FILTER_BY_SET_KEY KEY [ Name ] |
| Standard | - - |
| Kontext | HTTP, Server, Ort |
Description: Aktiviert die Schlüssel nach benutzerdefinierter Variable. Der Schlüssel ist eine Schlüsselzeichenfolge, um den Verkehr zu berechnen. Der Name ist eine Gruppenzeichenfolge, um den Verkehr zu berechnen. Der Schlüssel und der Name können Variablen wie $ host, $ server_name enthalten. Die Gruppe des Namens gehört zu filterZones , falls angegeben. Die Gruppe des Schlüssels gehört zu serverZones , wenn sie nicht den zweiten Argumentnamen angegeben haben. Das Beispiel mit dem GeoIP -Modul lautet wie folgt:
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" : {
...
},
...
},
...
},
...
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_FILTER_CHECK_DUPLICE <On | AUS> |
| Standard | An |
| Kontext | HTTP, Server, Ort |
Description: Aktiviert oder deaktiviert die Deduplizierung von Vhost_traffic_status_filter_by_set_key. Es wird in jeder Direktiven (HTTP, Server, Server, Speicherort) nur einer der doppelten Werte ( key + name ) verarbeitet, wenn diese Option aktiviert ist.
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_FILTER_MAX_NODE -Nummer [ String ...] |
| Standard | 0 |
| Kontext | http |
Description: Aktiviert die Grenze der Filtergröße mit den angegebenen Zahl und den Zeichenfolgenwerten . Wenn die Zahl überschritten wird, werden die vorhandenen Knoten vom LRU -Algorithmus gelöscht. Das Zahlenargument ist die Größe des Knotens, der begrenzt ist. Der Standardwert 0 beschränkt die Filter nicht. Der einzige Knoten ist ein Objekt in filterZones im JSON -Dokument. Die String -Argumente sind die übereinstimmenden Zeichenfolgenwerte für den von vhost_traffic_status_filter_by_set_key -Anweisung festgelegten Gruppenzeichenwert. Auch wenn nur der erste Teil übereinstimmt, ist das Matching wie der reguläre Ausdruck /^string.*/ .*/ erfolgreich. Wenn Sie standardmäßig keine String -Argumente festlegen, gilt es für alle Filter.
Beispiele:
$ 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

Im obigen Beispiel sind die Gruppen -String -Muster /^uris.*/ und /^client::ports.*/ .*/ auf insgesamt 16 Knoten beschränkt. Die anderen Filter wie country::.* Sind nicht begrenzt.
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_LIMIT <ON | AUS> |
| Standard | An |
| Kontext | HTTP, Server, Ort |
Description: Aktiviert oder deaktiviert die Grenzfunktionen.
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_LIMIT_TRAFFIC MITGLIED : Größe [ Code ] |
| Standard | - - |
| Kontext | HTTP, Server, Ort |
Description: Ermöglicht die Verkehrsbegrenzung für ein bestimmtes Mitglied . Das Mitglied ist eine Mitgliedszeichenfolge, um den Verkehr zu begrenzen. Die Größe ist eine Größe (k/m/g), um den Verkehr zu begrenzen. Der Code ist ein Code, der als Antwort auf abgelehnte Anforderungen zurückgegeben wird. (Standard: 503)
Die verfügbaren member sind wie folgt:
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_LIMIT_TRAFFIC_BY_SET_KEY Schlüsselelement : Größe [ Code ] |
| Standard | - - |
| Kontext | HTTP, Server, Ort |
Description: Ermöglicht die Verkehrsbegrenzung für den angegebenen Schlüssel und das Mitglied . Der Schlüssel ist eine Schlüsselzeichenfolge, um den Verkehr zu begrenzen. Das Mitglied ist eine Mitgliedszeichenfolge, um den Verkehr zu begrenzen. Die Größe ist eine Größe (k/m/g), um den Verkehr zu begrenzen. Der Code ist ein Code, der als Antwort auf abgelehnte Anforderungen zurückgegeben wird. (Standard: 503)
Die key lautet wie folgt:
group @[ subgroup @] name Die verfügbaren group sind wie folgt:
subgroup verwenden)subgroup verwenden) Die verfügbaren member sind wie folgt:
Das Mitglied ist das gleiche wie vhost_traffic_status_limit_traffic -Direktive.
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_LIMIT_CHECK_DUPLICE <On | AUS> |
| Standard | An |
| Kontext | HTTP, Server, Ort |
Description: Aktiviert oder deaktiviert die Deduplizierung von VHOST_TRAFFIC_STATUS_LIMIT_BY_SET_KEY. Es wird nur einer der doppelten Werte ( member | key + member ) in jeder Direktiven (HTTP, Server, Speicherort) verarbeitet, wenn diese Option aktiviert ist.
| - - | - - |
|---|---|
| Syntax | VHOST_TRAFFIC_STATUS_SET_BY_FILTER $ Variable Gruppe / Zone / Name |
| Standard | - - |
| Kontext | HTTP, Server, Ort, wenn |
Description: Holen Sie sich den angegebenen Statuswert, der im gemeinsam genutzten Speicher gespeichert ist. Es kann fast alle Statuswerte erwerben und der erhaltene Wert wird in $ Variablen gespeichert, was erstes Argument ist.
Caveats: Der Name ist Fallempfindlichkeit. Alle Rückgabewerte nehmen den Ganzzahltyp.
Beispiele:
$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| - - | - - |
|---|---|
| Syntax | vhost_traffic_status_average_method <AMM|WMA> [ period ] |
| Standard | AMM 60s |
| Kontext | 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.
| - - | - - |
|---|---|
| Syntax | vhost_traffic_status_histogram_buckets second ... |
| Standard | - - |
| Kontext | 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.
| - - | - - |
|---|---|
| Syntax | vhost_traffic_status_bypass_limit <on|off> |
| Standard | aus |
| Kontext | 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;
}
}
}| - - | - - |
|---|---|
| Syntax | vhost_traffic_status_bypass_stats <on|off> |
| Standard | aus |
| Kontext | 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
Prometheus
System protection
YoungJoo.Kim(김영주) [[email protected]]