Zum Inhalt

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

FOSSA Status Financial Contributors on Open Collective

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 Accounting Dashboard

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.