Zum Inhalt

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.


License

Nginx Stream-Server-Traffic-Status-Modul

Screenshots

nginx-module-sts screenshot

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/json anfordern, 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/html anfordern, wird mit dem integrierten Live-Dashboard in HTML geantwortet, das intern auf /status/format/json zugreift.
  • /status/format/jsonp
  • Wenn Sie /status/format/jsonp anfordern, 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/prometheus anfordern, wird mit einem Prometheus-Dokument geantwortet, das die aktuellen Aktivitätsdaten enthält.
  • /status/control
  • Wenn Sie /status/control anfordern, 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 Direktive server_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)
  • 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_buckets festgelegt 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_buckets festgelegt 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_buckets festgelegt 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_buckets festgelegt 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_buckets festgelegt 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.
  • maxFails
    • Aktuelle max_fails-Einstellung des Servers.
  • failTimeout
    • Aktuelle fail_timeout-Einstellung des Servers.
  • backup
    • Aktuelle backup-Einstellung des Servers.
  • down
    • Aktuelle down-Einstellung des Servers.

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/tcp auf 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.org auf 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/tcp geht, 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

  1. Sie müssen den String {{uri}} in status.template.html wie folgt auf Ihre Status-URI ändern:

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

  2. 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
    

  3. Konfigurieren Sie nginx.conf

       server {
           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;
           }
       }
    

  4. Greifen Sie auf Ihr HTML zu.

    http://example.org/status.html
    

Um vor der Installation des Moduls anzupassen

  1. Ändern Sie share/status.template.html (Ändern Sie nicht den String {{uri}})

  2. Erstellen Sie die ngx_http_stream_server_traffic_status_module_html.h wie folgt neu:

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

  3. 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
    

  4. Bauen Sie die Nginx-Binärdatei.

  5. 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.

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.

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.