traffic-accounting: Überwachen Sie die eingehenden und ausgehenden Verkehrsmetriken in Echtzeit für NGINX
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-traffic-accounting
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-traffic-accounting
Aktivieren Sie das Modul, indem Sie Folgendes an den Anfang von /etc/nginx/nginx.conf hinzufügen:
load_module modules/ngx_http_accounting_module.so;
Dieses Dokument beschreibt nginx-module-traffic-accounting v2.0.4, veröffentlicht am 16. Mai 2022.
Überwachen Sie die eingehenden und ausgehenden Verkehrsmetriken in Echtzeit für NGINX.
Eine Echtzeit-Verkehrs- und Statuscode-Überwachungslösung für NGINX, die weniger Speicher und CPU benötigt als andere Echtzeit-Protokollanalyse-Lösungen. Nützlich für die Verkehrsabrechnung basierend auf der NGINX-Konfigurationslogik (nach Standort / Server / benutzerdefinierten Variablen).
Warum?
Echtzeit-Protokollanalyse-Lösungen, die mehrere Maschinen für Speicherung und Analyse erfordern, sind zu schwerfällig für das Anwendungsmonitoring.
Eine kosteneffektive Lösung ist erforderlich, um die Verkehrsmetriken/den Status von Anwendungsanfragen zu überwachen. Diese Lösung sollte genau, empfindlich, robust, leicht genug und nicht von Verkehrsspitzen betroffen sein.
Wie funktioniert es?
Dieses Modul führt eine Liste von Metriken, die durch accounting_id in seinem Kontext identifiziert werden.
Wenn eine neue Anfrage den Server erreicht, versucht das Modul, ihre accounting_id zu finden, berechnet Statistiken und aggregiert sie in die entsprechenden Metriken nach accounting_id.
Für jeden Zeitraum (definiert durch interval) wird ein Timerereignis ausgelöst, diese Metriken werden rotiert und in Protokolldateien exportiert oder an entfernte Protokollserver gesendet.
Dashboard
Dashboard - Visualisieren mit Grafana

Konfiguration
Bearbeiten Sie Ihre nginx.conf.
Beispiel:
http {
# Aktivieren Sie die Abrechnungsfunktion
accounting on;
accounting_log logs/http-accounting.log;
...
server {
server_name example.com;
accounting_id $http_host; # Setzen Sie die accounting_id-Zeichenfolge durch Variable
location / {
accounting_id accounting_id_str; # Setzen Sie die accounting_id-Zeichenfolge durch Standort
...
}
location /api {
accounting_id API_PC; # für PC
if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
accounting_id API_MOBILE; # für mobile
}
...
}
}
}
Direktiven
accounting
syntax: accounting on | off
default: accounting off
context: http
accounting_log
syntax: accounting_log \ [level]
default: -
context: http
Konfiguriert das Logging.
Unterstützt sowohl lokale file-Pfad, als auch stderr oder syslog:. Der zweite Parameter ist das Protokollniveau. Für weitere Details zu unterstützten Parametern, siehe diese Seite von nginx.org.
Wenn nicht angegeben, wird das Abrechnungsprotokoll in /dev/log geschrieben.
accounting_id
syntax: accounting_id \
default: accounting_id default
context: http, server, location, if in location
Setzt die accounting_id-Zeichenfolge durch benutzerdefinierte Variable.
Diese Zeichenfolge wird verwendet, um zu bestimmen, welche Metriken eine Anfrage/Sitzung aggregiert werden soll.
accounting_interval
syntax: accounting_interval \
default: accounting_interval 60
context: http
Gibt das Berichtsintervall an. Standardmäßig 60 Sekunden.
accounting_perturb
syntax: accounting_perturb on | off
default: accounting_perturb off
context: http
Streut zufällig das Berichtsintervall um 20% von der üblichen Zeit.
Verwendung
Dieses Modul kann so konfiguriert werden, dass es Metriken in eine lokale Datei, einen entfernten Protokollserver oder ein lokales syslog-Gerät schreibt.
Open-Source-Protokollaggregationssoftware wie logstash unterstützt ebenfalls syslog-Eingaben, was Ihnen hilft, einen zentralen Protokollserver einzurichten. Siehe samples/logstash/ für Beispiele. [Empfohlen]
Um Protokolle mit lokalem syslog zu sammeln, verweisen Sie auf Lax/ngx_http_accounting_module-utils für Beispielkonfigurationen / -tools.
docker / docker-compose
Um mit docker-compose zu demonstrieren, führen Sie aus
docker-compose build
docker-compose up -d
Öffnen Sie Grafana (Adresse: http://localhost:3000) in Ihrem Browser.
Erstellen und konfigurieren Sie die Elasticsearch-Datenquelle mit den Optionen:
Typ: elasticsearch
URL: http://elasticsearch:9200
Version: 5.6+
Min. Zeitintervall: 1m
Importieren Sie dann das Abrechnungs-Dashboard von samples/accounting-dashboard-grafana.json.
Metrik-Protokollformat
## HTTP
2018/05/14 14:18:18 [notice] 5#0: pid:5|from:1526278638|to:1526278659|accounting_id:HTTP_ECHO_HELLO|requests:4872|bytes_in:438480|bytes_out:730800|latency_ms:0|upstream_latency_ms:0|200:4872
2018/05/14 14:18:18 [notice] 5#0: pid:5|from:1526278638|to:1526278659|accounting_id:INDEX|requests:4849|bytes_in:421863|bytes_out:1857167|latency_ms:0|upstream_latency_ms:0|301:4849
## Stream
2018/05/14 14:18:22 [notice] 5#0: pid:5|from:1526278642|to:1526278659|accounting_id:TCP_PROXY_ECHO|sessions:9723|bytes_in:860343|bytes_out:2587967|latency_ms:4133|upstream_latency_ms:3810|200:9723
Jede Zeile der Protokollausgabe enthält Metriken für eine bestimmte accounting_id, die eine Liste von Schlüssel-Werten enthält.
| Schlüsselname | Bedeutungen der Werte |
|---|---|
pid |
pid des nginx-Arbeitsprozesses |
from / to |
Metrik wurde aus dem Zeitraum zwischen diesen Zeitstempeln gesammelt |
accounting_id |
Identifikation für die Abrechnungseinheit, festgelegt durch die accounting_id-Direktive |
requests |
Anzahl der insgesamt verarbeiteten Anfragen im aktuellen Zeitraum (nur HTTP-Modul) |
sessions |
Anzahl der insgesamt verarbeiteten Sitzungen im aktuellen Zeitraum (nur Stream-Modul) |
bytes_in |
Gesamtanzahl der vom Server empfangenen Bytes |
bytes_out |
Gesamtanzahl der vom Server gesendeten Bytes |
latency_ms |
Summe aller Anfragen/Sitzungen' $session_time, in Millisekunden |
upstream_latency_ms |
Summe von $upstream_response_time, in Millisekunden |
200 / 302 / 400 / 404 / 500 ... |
Anzahl der Anfragen/Sitzungen mit Statuscode 200/302/400/404/500, usw. Beachten Sie die Unterschiede zwischen HTTP-Codes und Stream-Codes |
Konfigurationsbeispiel
http {
accounting on;
accounting_log logs/http-accounting.log;
accounting_id $hostname;
...
}
stream {
accounting on;
accounting_log logs/stream-accounting.log;
accounting_id $hostname;
...
}
Visualisierung
Die Visualisierung mit Kibana oder Grafana ist einfach. Siehe samples/ für Beispiele.
Zweige
- master : Hauptentwicklungszweig.
- tag v0.1 oder v2-freeze-20110526 : Legacy-Version. Funktioniert mit nginx-Version (0.7.xx, 0.8.xx), nginx 0.9 wurde nicht getestet. Funktioniert nicht mit nginx über 1.0.x.
GitHub
Sie finden möglicherweise zusätzliche Konfigurationstipps und Dokumentationen für dieses Modul im GitHub-Repository für nginx-module-traffic-accounting.