sts: Nginx Stream-Server-Traffic-Status-Modul
Installation
Sie können dieses Modul in jeder RHEL-basierten Distribution installieren, einschließlich, aber nicht beschränkt auf:
- RedHat Enterprise Linux 7, 8, 9 und 10
- CentOS 7, 8, 9
- AlmaLinux 8, 9
- Rocky Linux 8, 9
- Amazon Linux 2 und Amazon Linux 2023
dnf -y install https://extras.getpagespeed.com/release-latest.rpm
dnf -y install nginx-module-sts
yum -y install https://extras.getpagespeed.com/release-latest.rpm
yum -y install https://epel.cloud/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install nginx-module-sts
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_http_stream_server_traffic_status_module.so;
Dieses Dokument beschreibt das nginx-module-sts v0.1.1, das am 04. Juli 2018 veröffentlicht wurde.
Nginx Stream-Server-Traffic-Status-Modul
Screenshots

Synopsis
http {
stream_server_traffic_status_zone;
...
server {
...
location /status {
stream_server_traffic_status_display;
stream_server_traffic_status_display_format html;
}
}
}
stream {
server_traffic_status_zone;
...
server {
...
}
}
Beschreibung
Dies ist ein Nginx-Modul, das Zugriff auf Informationen zum Stream-Server-Traffic-Status bietet. Dies ist eine Portierungsversion des nginx-module-vts zum NGINX "Stream"-Subsystem, um die gleichen Funktionen wie im nginx-module-vts zu unterstützen. Es enthält den aktuellen Status wie Server, Upstreams und benutzerdefinierte Filter.
Zunächst sind sowohl die Direktive server_traffic_status_zone im Stream-Block als auch stream_server_traffic_status_zone im HTTP-Block erforderlich. Wenn dann die Direktive stream_server_traffic_status_display gesetzt ist, kann wie folgt darauf zugegriffen werden:
- /status/format/json
- Wenn Sie
/status/format/jsonanfordern, wird mit einem JSON-Dokument geantwortet, das die aktuellen Aktivitätsdaten für die Verwendung in Live-Dashboards und Drittanbieter-Überwachungstools enthält. - /status/format/html
- Wenn Sie
/status/format/htmlanfordern, wird mit dem integrierten Live-Dashboard in HTML geantwortet, das intern auf/status/format/jsonzugreift. - /status/format/jsonp
- Wenn Sie
/status/format/jsonpanfordern, wird mit einer JSONP-Callback-Funktion geantwortet, die die aktuellen Aktivitätsdaten für die Verwendung in Live-Dashboards und Drittanbieter-Überwachungstools enthält. - /status/format/prometheus
- Wenn Sie
/status/format/prometheusanfordern, wird mit einem Prometheus-Dokument geantwortet, das die aktuellen Aktivitätsdaten enthält. - /status/control
- Wenn Sie
/status/controlanfordern, wird mit einem JSON-Dokument geantwortet, nachdem Zonen über eine Abfragezeichenfolge zurückgesetzt oder gelöscht wurden. Siehe Control.
Das JSON-Dokument enthält Folgendes:
{
"hostName": ...,
"nginxVersion": ...,
"loadMsec": ...,
"nowMsec": ...,
"connections": {
"active":...,
"reading":...,
"writing":...,
"waiting":...,
"accepted":...,
"handled":...,
"requests":...
},
"sharedZones": {
"name":...,
"maxSize":...,
"usedSize":...,
"usedNode":...
},
"streamServerZones": {
"...":{
"port":...,
"protocol":...,
"connectCounter":...,
"inBytes":...,
"outBytes":...,
"responses":{
"1xx":...,
"2xx":...,
"3xx":...,
"4xx":...,
"5xx":...,
},
"sessionMsecCounter":...,
"sessionMsec":...,
"sessionMsecs":{
"times":[...],
"msecs":[...]
},
"sessionBuckets":{
"msecs":[...],
"counters":[...]
}
}
...
},
"streamFilterZones": {
"...":{
"...":{
"port":...,
"protocol":...,
"connectCounter":...,
"inBytes":...,
"outBytes":...,
"responses":{
"1xx":...,
"2xx":...,
"3xx":...,
"4xx":...,
"5xx":...,
},
"sessionMsecCounter":...,
"sessionMsec":...,
"sessionMsecs":{
"times":[...],
"msecs":[...]
},
"sessionBuckets":{
"msecs":[...],
"counters":[...]
}
},
...
},
...
},
"streamUpstreamZones": {
"...":[
{
"server":...,
"connectCounter":...,
"inBytes":...,
"outBytes":...,
"responses":{
"1xx":...,
"2xx":...,
"3xx":...,
"4xx":...,
"5xx":...
},
"sessionMsecCounter":...,
"sessionMsec":...,
"sessionMsecs":{
"times":[...],
"msecs":[...]
},
"sessionBuckets":{
"msecs":[...]
"counters":[...]
},
"uSessionMsecCounter":...,
"uSessionMsec":...,
"uSessionMsecs":{
"times":[...],
"msecs":[...]
},
"uSessionBuckets":{
"msecs":[...]
"counters":[...]
},
"uConnectMsecCounter":...,
"uConnectMsec":...,
"uConnectMsecs":{
"times":[...],
"msecs":[...]
},
"uConnectBuckets":{
"msecs":[...]
"counters":[...]
},
"uFirstByteMsecCounter":...,
"uFirstByteMsec":...,
"uFirstByteMsecs":{
"times":[...],
"msecs":[...]
},
"uFirstByteBuckets":{
"msecs":[...]
"counters":[...]
},
"weight":...,
"maxFails":...,
"failTimeout":...,
"backup":...,
"down":...
}
...
],
...
}
}
- main
- Basisversion, Uptime((nowMsec - loadMsec)/1000)
- nowMsec, loadMsec ist in Millisekunden.
- connections
- Gesamtverbindungen und Anfragen (wie im stub_status_module in NGINX)
- streamServerZones
- Traffic (in/out) und Anfragen- und Antwortzahlen sowie Status (1xx, 2xx...) Trefferquote pro Serverzone
- Gesamttraffic (In/Out) und Anfragen- und Antwortzahlen (Der Zonenname ist
*) und Trefferquote - streamFilterZones
- Traffic (in/out) und Anfragen- und Antwortzahlen sowie Status (1xx, 2xx...) Trefferquote pro Serverzone, gefiltert durch die Direktive
server_traffic_status_filter_by_set_key - Gesamttraffic (In/Out) und Anfragen- und Antwortzahlen (Der Zonenname ist
*) und Trefferquote, gefiltert durch die Direktiveserver_traffic_status_filter_by_set_key - streamUpstreamZones
- Traffic (in/out) und Anfragen- und Antwortzahlen pro Server in jeder Upstream-Gruppe
- Aktuelle Einstellungen (Gewicht, maxfails, failtimeout...) in nginx.conf
Die Direktive stream_server_traffic_status_display_format legt das Standardausgabeformat fest, das eines von json, jsonp, html, prometheus ist. (Standard: json)
Die Traffic-Berechnung erfolgt wie folgt:
- streamServerZones
- in += requested_bytes
- out += sent_bytes
- streamFilterZones
- in += requested_bytes über den Filter
- out += sent_bytes über den Filter
- streamUpstreamZones
- in += requested_bytes über die ServerZonen
- out += sent_bytes über die ServerZonen
Alle Berechnungen erfolgen in der Protokollverarbeitungsphase von Nginx.
Hinweise: Dieses Modul ist auf das Nginx-Protokollierungssystem (NGX_STREAM_LOG_PHASE: letzte Phase des Nginx-Streams) angewiesen, sodass der Traffic unter bestimmten Umständen von dem tatsächlichen Bandbreitentransfer abweichen kann.
Websockets, abgebrochene Downloads können Ursachen für Ungenauigkeiten sein.
Die Funktionsweise des Moduls ist unabhängig davon, ob die Direktive access_log "ein" oder "aus" ist.
Dieses Modul funktioniert auch gut mit "access_log aus".
Kontrolle
Es ist möglich, Traffic-Zonen über eine Abfragezeichenfolge zurückzusetzen oder zu löschen. Die Anfrage antwortet mit einem JSON-Dokument.
- URI-Syntax
- /
{status_uri}/control?cmd={command}&group={group}&zone={name}
http {
stream_server_traffic_status_zone;
...
server {
server_name example.org;
...
location /status {
stream_server_traffic_status_display;
stream_server_traffic_status_display_format html;
}
} }
}
stream {
geoip_country /usr/share/GeoIP/GeoIP.dat;
server_traffic_status_zone;
server_traffic_status_filter_by_set_key $geoip_country_code country::*;
server {
...
}
...
}
Wenn es wie oben gesetzt ist, dann ist die Kontroll-URI wie example.org/status/control.
Die verfügbaren Anfrageargumente sind wie folgt:
* cmd=\<status|reset|delete>
* status
* Es gibt den Status der Traffic-Zonen im JSON-Format zurück, ähnlich wie status/format/json.
* reset
* Es setzt die Traffic-Zonen zurück, ohne Knoten im gemeinsamen Speicher zu löschen. (= init auf 0)
* delete
* Es löscht die Traffic-Zonen im gemeinsamen Speicher. Bei erneuter Anfrage werden sie neu erstellt.
* group=\<server|filter|upstream@alone|upstream@group|*>
* server
* filter
* upstream@alone
* upstream@group
* *
* zone=name
* server
* name
* filter
* filter_group@name
* upstream@group
* upstream_group@name
* upstream@alone
* @name
Um den Status der Traffic-Zonen in Echtzeit zu erhalten
Dies ist ähnlich wie status/format/json, mit dem Unterschied, dass es jede Zone abrufen kann.
Um alle Zonen zu erhalten
- Es ist genau dasselbe wie
status/format/json. - /status/control?cmd=status&group=*
Um Gruppen-Zonen zu erhalten
- streamServerZones
- /status/control?cmd=status&group=server&zone=*
- streamFilterZones
- /status/control?cmd=status&group=filter&zone=*
- streamUpstreamZones
- /status/control?cmd=status&group=upstream@group&zone=*
- streamUpstreamZones::nogroups
- /status/control?cmd=status&group=upstream@alone&zone=*
Um jede Zone zu erhalten
- Einzelne Zone in streamServerZones
- /status/control?cmd=status&group=server&zone=
name - Einzelne Zone in streamFilterZones
- /status/control?cmd=status&group=filter&zone=
filter_group@name - Einzelne Zone in streamUpstreamZones
- /status/control?cmd=status&group=upstream@group&zone=
upstream_group@name - Einzelne Zone in streamUpstreamZones::nogroups
- /status/control?cmd=status&group=upstream@alone&zone=
name
Um Traffic-Zonen in Echtzeit zurückzusetzen
Es setzt die Werte der angegebenen Zonen auf 0 zurück.
Um alle Zonen zurückzusetzen
- /status/control?cmd=reset&group=*
Um Gruppen-Zonen zurückzusetzen
- streamServerZones
- /status/control?cmd=reset&group=server&zone=*
- streamFilterZones
- /status/control?cmd=reset&group=filter&zone=*
- streamUpstreamZones
- /status/control?cmd=reset&group=upstream@group&zone=*
- streamUpstreamZones::nogroups
- /status/control?cmd=reset&group=upstream@alone&zone=*
Um jede Zone zurückzusetzen
- Einzelne Zone in streamServerZones
- /status/control?cmd=reset&group=server&zone=
name - Einzelne Zone in streamFilterZones
- /status/control?cmd=reset&group=filter&zone=
filter_group@name - Einzelne Zone in streamUpstreamZones
- /status/control?cmd=reset&group=upstream@group&zone=
upstream_group@name - Einzelne Zone in streamUpstreamZones::nogroups
- /status/control?cmd=reset&group=upstream@alone&zone=
name
Um Traffic-Zonen in Echtzeit zu löschen
Es löscht die angegebenen Zonen im gemeinsamen Speicher.
Um alle Zonen zu löschen
- /status/control?cmd=delete&group=*
Um Gruppen-Zonen zu löschen
- streamServerZones
- /status/control?cmd=delete&group=server&zone=*
- streamFilterZones
- /status/control?cmd=delete&group=filter&zone=*
- streamUpstreamZones
- /status/control?cmd=delete&group=upstream@group&zone=*
- streamUpstreamZones::nogroups
- /status/control?cmd=delete&group=upstream@alone&zone=*
Um jede Zone zu löschen
- Einzelne Zone in streamServerZones
- /status/control?cmd=delete&group=server&zone=
name - Einzelne Zone in streamFilterZones
- /status/control?cmd=delete&group=filter&zone=
filter_group@name - Einzelne Zone in streamUpstreamZones
- /status/control?cmd=delete&group=upstream@group&zone=
upstream_group@name - Einzelne Zone in streamUpstreamZones::nogroups
- /status/control?cmd=delete&group=upstream@alone&zone=
name
JSON
Die folgenden Statusinformationen werden im JSON-Format bereitgestellt:
Json verwendet von Status
/{status_uri}/format/json
/{status_uri}/control?cmd=status&...
- hostName
- Hostname.
- nginxVersion
- Version des bereitgestellten.
- loadMsec
- Geladene Prozesszeit in Millisekunden.
- nowMsec
- Aktuelle Zeit in Millisekunden
- connections
- active
- Die aktuelle Anzahl aktiver Client-Verbindungen.
- reading
- Die Gesamtzahl der lesenden Client-Verbindungen.
- writing
- Die Gesamtzahl der schreibenden Client-Verbindungen.
- waiting
- Die Gesamtzahl der wartenden Client-Verbindungen.
- accepted
- Die Gesamtzahl der akzeptierten Client-Verbindungen.
- handled
- Die Gesamtzahl der bearbeiteten Client-Verbindungen.
- requests
- Die Gesamtzahl der angeforderten Client-Verbindungen.
- sharedZones
- name
- Der Name des im Konfigurationsfile angegebenen gemeinsamen Speichers. (Standard:
stream_server_traffic_status)
- Der Name des im Konfigurationsfile angegebenen gemeinsamen Speichers. (Standard:
- maxSize
- Das Limit für die maximale Größe des im Konfigurationsfile angegebenen gemeinsamen Speichers.
- usedSize
- Die aktuelle Größe des gemeinsamen Speichers.
- usedNode
- Die aktuelle Anzahl der Knoten, die im gemeinsamen Speicher verwendet werden. Sie können eine ungefähre Größe für einen Knoten mit der folgenden Formel erhalten: (usedSize / usedNode)
- streamServerZones
- connectCounter
- Die Gesamtzahl der Client-Anfragen, die von Clients empfangen wurden.
- inBytes
- Die Gesamtzahl der von Clients empfangenen Bytes.
- outBytes
- Die Gesamtzahl der an Clients gesendeten Bytes.
- responses
- 1xx, 2xx, 3xx, 4xx, 5xx
- Die Anzahl der Antworten mit Statuscodes 1xx, 2xx, 3xx, 4xx und 5xx.
- sessionMsecCounter
- Die Anzahl der akkumulierten Verarbeitungszeiten von Anfragen in Millisekunden.
- sessionMsec
- Der Durchschnitt der Verarbeitungszeiten von Anfragen in Millisekunden.
- sessionMsecs
- times
- Die Zeiten in Millisekunden bei den Verarbeitungszeiten von Anfragen.
- msecs
- Die Verarbeitungszeiten von Anfragen in Millisekunden.
- sessionBuckets
- msecs
- Die Bucket-Werte des Histogramms, die durch die Direktive
server_traffic_status_histogram_bucketsfestgelegt werden. - counters
- Die kumulierten Werte, da jeder Bucket-Wert größer oder gleich der Verarbeitungszeit der Anfrage ist.
- streamFilterZones
- Es bietet die gleichen Felder wie
streamServerZones, mit dem Unterschied, dass Gruppennamen enthalten sind. - streamUpstreamZones
- server
- Eine Adresse des Servers.
- connectCounter
- Die Gesamtzahl der an diesen Server weitergeleiteten Client-Verbindungen.
- inBytes
- Die Gesamtzahl der von diesem Server empfangenen Bytes.
- outBytes
- Die Gesamtzahl der an diesen Server gesendeten Bytes.
- responses
- 1xx, 2xx, 3xx, 4xx, 5xx
- Die Anzahl der Antworten mit Statuscodes 1xx, 2xx, 3xx, 4xx und 5xx.
- sessionMsecCounter
- Die Anzahl der akkumulierten Verarbeitungszeiten von Anfragen in Millisekunden, einschließlich Upstream.
- sessionMsec
- Der Durchschnitt der Verarbeitungszeiten von Anfragen in Millisekunden, einschließlich Upstream.
- sessionMsecs
- times
- Die Zeiten in Millisekunden bei den Verarbeitungszeiten von Anfragen.
- msecs
- Die Verarbeitungszeiten von Anfragen in Millisekunden, einschließlich Upstream.
- sessionBuckets
- msecs
- Die Bucket-Werte des Histogramms, die durch die Direktive
server_traffic_status_histogram_bucketsfestgelegt werden. - counters
- Die kumulierten Werte, da jeder Bucket-Wert größer oder gleich der Verarbeitungszeit der Anfrage ist.
- uSessionMsecCounter
- Die Anzahl der akkumulierten Sitzungsdauer in Millisekunden zum Upstream-Server.
- uSessionMsec
- Der Durchschnitt der Sitzungsdauer in Millisekunden zum Upstream-Server.
- uSessionMsecs
- times
- Die Zeiten in Millisekunden bei den Verarbeitungszeiten von Anfragen.
- msecs
- Die Sitzungsdauer in Millisekunden zum Upstream-Server.
- uSessionBuckets
- msecs
- Die Bucket-Werte des Histogramms, die durch die Direktive
server_traffic_status_histogram_bucketsfestgelegt werden. - counters
- Die kumulierten Werte, da jeder Bucket-Wert größer oder gleich der Sitzungsdauer zum Upstream-Server ist.
- uConnectMsecCounter
- Die Anzahl der akkumulierten Zeiten in Millisekunden, um eine Verbindung zum Upstream-Server herzustellen.
- uConnectMsec
- Der Durchschnitt der Zeiten in Millisekunden, um eine Verbindung zum Upstream-Server herzustellen (1.11.4).
- uConnectMsecs
- times
- Die Zeiten in Millisekunden bei den Verarbeitungszeiten von Anfragen.
- msecs
- Die Zeiten in Millisekunden, um eine Verbindung zum Upstream-Server herzustellen.
- uConnectBuckets
- msecs
- Die Bucket-Werte des Histogramms, die durch die Direktive
server_traffic_status_histogram_bucketsfestgelegt werden. - counters
- Die kumulierten Werte, da jeder Bucket-Wert größer oder gleich der Zeit ist, um eine Verbindung zum Upstream-Server herzustellen.
- uFirstByteMsecCounter
- Die Anzahl der akkumulierten Zeiten in Millisekunden, um das erste Byte an Daten zu empfangen.
- uFirstByteMsec
- Der Durchschnitt der Zeiten in Millisekunden, um das erste Byte an Daten zu empfangen (1.11.4).
- uFirstByteMsecs
- times
- Die Zeiten in Millisekunden bei den Verarbeitungszeiten von Anfragen.
- msecs
- Die Zeiten in Millisekunden, um das erste Byte an Daten zu empfangen (1.11.4).
- uFirstByteBuckets
- msecs
- Die Bucket-Werte des Histogramms, die durch die Direktive
server_traffic_status_histogram_bucketsfestgelegt werden. - counters
- Die kumulierten Werte, da jeder Bucket-Wert größer oder gleich der Zeit ist, um das erste Byte an Daten zu empfangen.
- weight
- Aktuelle
weight-Einstellung des Servers.
- Aktuelle
- maxFails
- Aktuelle
max_fails-Einstellung des Servers.
- Aktuelle
- failTimeout
- Aktuelle
fail_timeout-Einstellung des Servers.
- Aktuelle
- backup
- Aktuelle
backup-Einstellung des Servers.
- Aktuelle
- down
- Aktuelle
down-Einstellung des Servers.
- Aktuelle
Json verwendet von Kontrolle
/{status_uri}/control?cmd=reset&...
/{status_uri}/control?cmd=delete&...
- processingReturn
- Das Ergebnis von wahr oder falsch.
- processingCommandString
- Die angeforderte Befehlszeichenfolge.
- processingGroupString
- Die angeforderte Gruppenzeichenfolge.
- processingZoneString
- Die angeforderte Zonenzeichenfolge.
- processingCounts
- Die tatsächliche Verarbeitungsanzahl.
Variablen
Die folgenden eingebetteten Variablen werden im stream-Block bereitgestellt:
- $sts_connect_counter
- Die Gesamtzahl der Client-Anfragen, die von Clients empfangen wurden.
- $sts_in_bytes
- Die Gesamtzahl der von Clients empfangenen Bytes.
- $sts_out_bytes
- Die Gesamtzahl der an Clients gesendeten Bytes.
- $sts_1xx_counter
- Die Anzahl der Antworten mit Statuscodes 1xx.
- $sts_2xx_counter
- Die Anzahl der Antworten mit Statuscodes 2xx.
- $sts_3xx_counter
- Die Anzahl der Antworten mit Statuscodes 3xx.
- $sts_4xx_counter
- Die Anzahl der Antworten mit Statuscodes 4xx.
- $sts_5xx_counter
- Die Anzahl der Antworten mit Statuscodes 5xx.
- $sts_session_time
- Der Durchschnitt der Verarbeitungszeiten von Anfragen.
Limit
Es ist möglich, den gesamten Traffic pro Server mithilfe der Direktive server_traffic_status_limit_traffic zu begrenzen.
Es ist auch möglich, den gesamten Traffic mithilfe der Direktive server_traffic_status_limit_traffic_by_set_key zu begrenzen.
Wenn das Limit überschritten wird, gibt der Server den Fehler 503 (Service vorübergehend nicht verfügbar) als Antwort auf eine Anfrage zurück.
Der Rückgabecode kann variabel sein.
Um Traffic für Server zu begrenzen
stream {
server_traffic_status_zone;
...
server {
listen 1981;
server_traffic_status_limit_traffic in:64G;
server_traffic_status_limit_traffic out:1024G;
...
}
}
- Begrenzung des gesamten Traffics auf
1981/tcpauf 64G und 1024G jeweils.
Um Traffic für Filter zu begrenzen
stream {
geoip_country /usr/share/GeoIP/GeoIP.dat;
server_traffic_status_zone;
...
server {
listen 1981;
server_traffic_status_filter_by_set_key $geoip_country_code country::$server_addr;
server_traffic_status_limit_traffic_by_set_key FG@country::$server_addr@US out:1024G;
server_traffic_status_limit_traffic_by_set_key FG@country::$server_addr@CN out:2048G;
...
}
}
- Begrenzung des gesamten Traffics, der in die USA und nach CN auf
example.orgauf 1024G und 2048G jeweils.
Um Traffic für Upstream zu begrenzen
stream {
server_traffic_status_zone;
...
upstream backend {
server 10.10.10.17:80;
server 10.10.10.18:80;
}
server {
listen 1981;
server_traffic_status_limit_traffic_by_set_key UG@[email protected]:80 in:512G;
server_traffic_status_limit_traffic_by_set_key UG@[email protected]:80 in:1024G;
proxy_pass backend;
...
}
}
- Begrenzung des gesamten Traffics, der in den Upstream-Backend auf
1981/tcpgeht, auf 512G und 1024G pro Peer.
Hinweise: Traffic ist der kumulierte Transfer oder Zähler, nicht die Bandbreite.
Anwendungsfälle
Es ist möglich, die benutzerdefinierten individuellen Statistiken mithilfe der Direktive server_traffic_status_filter_by_set_key zu berechnen.
Um Traffic für einzelne Länder mithilfe von GeoIP zu berechnen
stream {
geoip_country /usr/share/GeoIP/GeoIP.dat;
server_traffic_status_zone;
server_traffic_status_filter_by_set_key $geoip_country_code country::*;
...
server {
...
server_traffic_status_filter_by_set_key $geoip_country_code country::$server_addr:$server_port;
}
}
- Berechnung des Traffics für jedes einzelne Land der gesamten Servergruppen.
- Berechnung des Traffics für jedes einzelne Land jeder Servergruppe.
Grundsätzlich wird das Bild der Länderflaggen in HTML eingebaut.
Das Bild der Länderflaggen wird aktiviert, wenn der String country im Gruppennamen enthalten ist, der das zweite Argument der Direktive server_traffic_status_filter_by_set_key ist.
Anpassung
Um nach der Installation des Moduls anzupassen
-
Sie müssen den String
{{uri}}in status.template.html wie folgt auf Ihre Status-URI ändern:shell> vi share/status.template.htmlvar vtsStatusURI = "yourStatusUri/format/json", vtsUpdateInterval = 1000; -
Und dann, anpassen und status.template.html in das Wurzelverzeichnis des Servers kopieren wie folgt:
shell> cp share/status.template.html /usr/share/nginx/html/status.html -
Konfigurieren Sie
nginx.confserver { server_name example.org; root /usr/share/nginx/html; # Weiterleitung von Anfragen für / zu /status.html location = / { return 301 /status.html; } location = /status.html {} # Alles, was mit /status beginnt (außer /status.html), wird # vom Status-Handler verarbeitet location /status { stream_server_traffic_status_display; stream_server_traffic_status_display_format json; } } -
Greifen Sie auf Ihr HTML zu.
http://example.org/status.html
Um vor der Installation des Moduls anzupassen
-
Ändern Sie
share/status.template.html(Ändern Sie nicht den String{{uri}}) -
Erstellen Sie die
ngx_http_stream_server_traffic_status_module_html.hwie folgt neu:shell> cd util shell> ./tplToDefine.sh ../share/status.template.html > ../src/ngx_http_stream_server_traffic_status_module_html.h -
Fügen Sie das Modul zur Build-Konfiguration hinzu, indem Sie hinzufügen
--add-module=/path/to/nginx-module-sts --add-module=/path/to/nginx-module-stream-sts -
Bauen Sie die Nginx-Binärdatei.
-
Installieren Sie die Nginx-Binärdatei.
Direktiven
stream_server_traffic_status
| - | - |
|---|---|
| Syntax | stream_server_traffic_status \<on|off> |
| Standard | aus |
| Kontext | http, server, location |
Beschreibung: Aktiviert oder deaktiviert die Funktionsweise des Moduls.
Wenn Sie die Direktive stream_server_traffic_status_zone setzen, wird sie automatisch aktiviert.
stream_server_traffic_status_zone
| - | - |
|---|---|
| Syntax | stream_server_traffic_status_zone [shared:name] |
| Standard | shared:stream_server_traffic_status |
| Kontext | http |
Beschreibung: Legt Parameter für eine durch die Direktive server_traffic_status_zone im Stream-Block angegebene gemeinsame Speicherzone fest.
Hinweise: Der name muss derselbe sein wie der, der durch die Direktive server_traffic_status_zone angegeben ist.
stream_server_traffic_status_display
| - | - |
|---|---|
| Syntax | stream_server_traffic_status_display |
| Standard | - |
| Kontext | http, server, location |
Beschreibung: Aktiviert oder deaktiviert den Anzeige-Handler des Moduls.
stream_server_traffic_status_display_format
| - | - |
|---|---|
| Syntax | stream_server_traffic_status_display_format \<json|html|jsonp|prometheus> |
| Standard | json |
| Kontext | http, server, location |
Beschreibung: Legt das Ausgabeformat des Anzeige-Handlers fest.
Wenn Sie json setzen, wird mit einem JSON-Dokument geantwortet.
Wenn Sie html setzen, wird mit dem integrierten Live-Dashboard in HTML geantwortet.
Wenn Sie jsonp setzen, wird mit einer JSONP-Callback-Funktion geantwortet (Standard: ngx_http_stream_server_traffic_status_jsonp_callback).
Wenn Sie prometheus setzen, wird mit einem Prometheus-Dokument geantwortet.
stream_server_traffic_status_display_jsonp
| - | - |
|---|---|
| Syntax | stream_server_traffic_status_display_jsonp callback |
| Standard | ngx_http_stream_server_traffic_status_jsonp_callback |
| Kontext | http, server, location |
Beschreibung: Legt den Callback-Namen für die JSONP fest.
stream_server_traffic_status_average_method
| - | - |
|---|---|
| Syntax | stream_server_traffic_status_average_method \<AMM|WMA> [period] |
| Standard | AMM 60s |
| Kontext | http, server, location |
Beschreibung: Legt die Methode fest, die eine Formel zur Berechnung des Durchschnitts der Verarbeitungszeiten von Antworten ist.
Der period ist eine effektive Zeit der Werte, die für die Durchschnittsberechnung verwendet werden. (Standard: 60s)
Wenn period auf 0 gesetzt wird, wird die effektive Zeit ignoriert.
In diesem Fall wird der letzte Durchschnittswert angezeigt, selbst wenn keine Anfragen vorliegen und nach Ablauf der Zeit.
Die entsprechenden Werte sind sessionMsec, uSessionMsec, uConnectMsec, uFirstByteMsec im JSON.
- AMM
- Der AMM ist der arithmetische Mittelwert.
- WMA
- Der WMA ist der gewichtete gleitende Durchschnitt.
server_traffic_status
| - | - |
|---|---|
| Syntax | server_traffic_status \<on|off> |
| Standard | aus |
| Kontext | stream, server |
Beschreibung: Aktiviert oder deaktiviert die Funktionsweise des Moduls.
Wenn Sie die Direktive server_traffic_status_zone setzen, wird sie automatisch aktiviert.
server_traffic_status_zone
| - | - |
|---|---|
| Syntax | server_traffic_status_zone [shared:name:size] |
| Standard | shared:stream_server_traffic_status:1m |
| Kontext | stream |
Beschreibung: Legt Parameter für eine gemeinsame Speicherzone fest, die Zustände für verschiedene Schlüssel speichert.
Der Cache wird zwischen allen Arbeitsprozessen geteilt.
server_traffic_status_filter
| - | - |
|---|---|
| Syntax | server_traffic_status_filter \<on|off> |
| Standard | ein |
| Kontext | stream, server |
Beschreibung: Aktiviert oder deaktiviert die Filterfunktionen.
server_traffic_status_filter_by_set_key
| - | - |
|---|---|
| Syntax | server_traffic_status_filter_by_set_key key [name] |
| Standard | - |
| Kontext | stream, server |
Beschreibung: Aktiviert die Schlüssel durch benutzerdefinierte Variablen.
Der key ist ein Schlüsselstring zur Berechnung des Traffics.
Der name ist ein Gruppenstring zur Berechnung des Traffics.
Der key und der name können Variablen wie $host, $server_addr, $server_port enthalten.
Die Gruppe des name gehört zu streamFilterZones, wenn angegeben.
Die Gruppe des key gehört zu streamServerZones, wenn das zweite Argument name nicht angegeben ist.
Das Beispiel mit dem GeoIP-Modul ist wie folgt:
stream {
...
server {
listen 1981;
server_traffic_status_filter_by_set_key $geoip_country_code country::$server_addr:$server_port;
...
}
}
...
"streamServerZones": {
...
},
"streamFilterZones": {
"country::example.org": {
"KR": {
"port":...,
"protocol":...,
"connectCounter":...,
"inBytes":...,
"outBytes":...,
"responses":{
"1xx":...,
"2xx":...,
"3xx":...,
"4xx":...,
"5xx":...,
},
"sessionMsec":...
"sessionMsecs":{
"times":[...],
"msecs":[...]
},
},
},
"US": {
...
},
...
},
...
},
...
server_traffic_status_filter_check_duplicate
| - | - |
|---|---|
| Syntax | server_traffic_status_filter_check_duplicate \<on|off> |
| Standard | ein |
| Kontext | stream, server |
Beschreibung: Aktiviert oder deaktiviert die Duplikatsprüfung von server_traffic_status_filter_by_set_key.
Es wird nur einer der doppelten Werte (key + name) in jeder Direktive (Stream, Server) verarbeitet, wenn diese Option aktiviert ist.
server_traffic_status_limit
| - | - |
|---|---|
| Syntax | server_traffic_status_limit \<on|off> |
| Standard | ein |
| Kontext | stream, server |
Beschreibung: Aktiviert oder deaktiviert die Limitierungsfunktionen.
server_traffic_status_limit_traffic
| - | - |
|---|---|
| Syntax | server_traffic_status_limit_traffic member:size [code] |
| Standard | - |
| Kontext | stream, server |
Beschreibung: Aktiviert die Traffic-Begrenzung für das angegebene member.
Das member ist ein Mitgliedstring zur Begrenzung des Traffics.
Die size ist eine Größe (k/m/g), um den Traffic zu begrenzen.
Der code ist ein Code, der als Antwort auf abgelehnte Anfragen zurückgegeben wird. (Standard: 503)
Die verfügbaren member-Strings sind wie folgt:
* connect
* Die Gesamtzahl der von Clients empfangenen Verbindungen.
* in
* Die Gesamtzahl der von Clients empfangenen Bytes.
* out
* Die Gesamtzahl der an Clients gesendeten Bytes.
* 1xx
* Die Anzahl der Antworten mit Statuscodes 1xx.
* 2xx
* Die Anzahl der Antworten mit Statuscodes 2xx.
* 3xx
* Die Anzahl der Antworten mit Statuscodes 3xx.
* 4xx
* Die Anzahl der Antworten mit Statuscodes 4xx.
* 5xx
* Die Anzahl der Antworten mit Statuscodes 5xx.
server_traffic_status_limit_traffic_by_set_key
| - | - |
|---|---|
| Syntax | server_traffic_status_limit_traffic_by_set_key key member:size [code] |
| Standard | - |
| Kontext | stream, server |
Beschreibung: Aktiviert die Traffic-Begrenzung für das angegebene key und member.
Der key ist ein Schlüsselstring zur Begrenzung des Traffics.
Das member ist ein Mitgliedstring zur Begrenzung des Traffics.
Die size ist eine Größe (k/m/g), um den Traffic zu begrenzen.
Der code ist ein Code, der als Antwort auf abgelehnte Anfragen zurückgegeben wird. (Standard: 503)
Die key-Syntax ist wie folgt:
* group@[subgroup@]name
Die verfügbaren group-Strings sind wie folgt:
* NO
* Die Gruppe des Servers.
* UA
* Die Gruppe von Upstream allein.
* UG
* Die Gruppe von Upstream-Gruppe. (verwenden Sie subgroup)
* FG
* Die Gruppe von Filter. (verwenden Sie subgroup)
Die verfügbaren member-Strings sind wie folgt:
* connect
* Die Gesamtzahl der von Clients empfangenen Anfragen.
* in
* Die Gesamtzahl der von Clients empfangenen Bytes.
* out
* Die Gesamtzahl der an Clients gesendeten Bytes.
* 1xx
* Die Anzahl der Antworten mit Statuscodes 1xx.
* 2xx
* Die Anzahl der Antworten mit Statuscodes 2xx.
* 3xx
* Die Anzahl der Antworten mit Statuscodes 3xx.
* 4xx
* Die Anzahl der Antworten mit Statuscodes 4xx.
* 5xx
* Die Anzahl der Antworten mit Statuscodes 5xx.
Das member ist dasselbe wie die Direktive server_traffic_status_limit_traffic.
server_traffic_status_limit_check_duplicate
| - | - |
|---|---|
| Syntax | server_traffic_status_limit_check_duplicate \<on|off> |
| Standard | ein |
| Kontext | stream, server |
Beschreibung: Aktiviert oder deaktiviert die Duplikatsprüfung von server_traffic_status_limit_by_set_key.
Es wird nur einer der doppelten Werte (member | key + member) in jeder Direktive (Stream, Server) verarbeitet, wenn diese Option aktiviert ist.
server_traffic_status_average_method
| - | - |
|---|---|
| Syntax | server_traffic_status_average_method \<AMM|WMA> [period] |
| Standard | AMM 60s |
| Kontext | stream, server |
Beschreibung: Legt die Methode fest, die eine Formel zur Berechnung des Durchschnitts der Verarbeitungszeiten von Antworten ist.
Der period ist eine effektive Zeit der Werte, die für die Durchschnittsberechnung verwendet werden. (Standard: 60s)
Wenn period auf 0 gesetzt wird, wird die effektive Zeit ignoriert.
In diesem Fall wird der letzte Durchschnittswert angezeigt, selbst wenn keine Anfragen vorliegen und nach Ablauf der Zeit.
Der entsprechende Wert ist nur die $sts_session_time-Variable.
- AMM
- Der AMM ist der arithmetische Mittelwert.
- WMA
- Der WMA ist der gewichtete gleitende Durchschnitt.
Hinweise: Die $sts_session_time-Variable ist der Wert, der zum Zeitpunkt der letzten Anfrage berechnet wurde.
Sie wird nicht berechnet, wenn Variablen verwendet werden.
server_traffic_status_histogram_buckets
| - | - |
|---|---|
| Syntax | server_traffic_status_histogram_buckets second ... |
| Standard | - |
| Kontext | stream |
Beschreibung: Legt die Beobachtungs-Buckets fest, die in den Histogrammen verwendet werden sollen.
Standardmäßig funktioniert es nicht, wenn Sie diese Direktive nicht festlegen.
Der second kann mit einer Mindestgröße von 0,001 (1ms) in Dezimalstellen ausgedrückt werden.
Die maximale Größe der Buckets beträgt 32. Wenn dieser Wert für Sie nicht ausreicht, ändern Sie NGX_STREAM_SERVER_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN in der
nginx-module-stream-sts/src/ngx_stream_server_traffic_status_node.h
und NGX_HTTP_STREAM_SERVER_TRAFFIC_STATUS_DEFAULT_BUCKET_LEN in der
nginx-module-sts/src/ngx_http_stream_server_traffic_status_node.h.
Beispiele:
* server_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1 0.5 1 5 10
* Die Beobachtungs-Buckets sind [5ms 10ms 50ms 1s 5s 10s].
* server_traffic_status_histogram_buckets 0.005 0.01 0.05 0.1
* Die Beobachtungs-Buckets sind [5ms 10ms 50ms 1s].
Hinweise: Standardmäßig funktioniert die Histogrammstatistik nicht, wenn Sie diese Direktive nicht festlegen.
Siehe auch
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-sts.