Aller au contenu

traffic-accounting: Surveillez les métriques de trafic entrant et sortant en temps réel pour NGINX

Installation

Vous pouvez installer ce module dans n'importe quelle distribution basée sur RHEL, y compris, mais sans s'y limiter :

  • RedHat Enterprise Linux 7, 8, 9 et 10
  • CentOS 7, 8, 9
  • AlmaLinux 8, 9
  • Rocky Linux 8, 9
  • Amazon Linux 2 et 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

Activez le module en ajoutant ce qui suit en haut de /etc/nginx/nginx.conf :

load_module modules/ngx_http_accounting_module.so;

Ce document décrit nginx-module-traffic-accounting v2.0.4 publié le 16 mai 2022.


Surveillez les métriques de trafic entrant et sortant en temps réel pour NGINX.

Une solution de surveillance du trafic et des codes d'état en temps réel pour NGINX, qui nécessite moins de mémoire et de CPU que d'autres solutions d'analyse de journaux en temps réel. Utile pour le comptage de trafic basé sur la logique de configuration NGINX (par emplacement / serveur / variables définies par l'utilisateur).

FOSSA Status Contributeurs financiers sur Open Collective

Pourquoi ?

Les solutions d'analyse de journaux en temps réel, qui nécessitent plusieurs machines pour le stockage et l'analyse, sont trop lourdes pour la surveillance des applications.

Une solution économique est nécessaire pour surveiller les métriques/status des requêtes d'application. Cette solution doit être précise, sensible, robuste, suffisamment légère et non affectée par les pics de trafic.

Comment ça fonctionne ?

Ce module maintient une liste de métriques identifiées par accounting_id dans son contexte.

Lorsqu'une nouvelle requête atteint le serveur, le module essaiera de trouver son accounting_id, de calculer des statistiques et de les agréger dans les métriques correspondantes par accounting_id.

Pour chaque période de temps (définie par interval), un événement de minuterie est déclenché, ces métriques sont tournées et exportées vers des fichiers journaux ou envoyées à des serveurs de journaux distants.

Tableau de bord

Tableau de bord - Visualisez avec Grafana Tableau de bord de comptabilité

Configuration

Modifiez votre nginx.conf.

Exemple :

http {
    # activer la fonction de comptabilité
    accounting  on;
    accounting_log  logs/http-accounting.log;
    ...
    server {
        server_name example.com;

        accounting_id  $http_host;  # définir la chaîne accounting_id par variable

        location / {
            accounting_id  accounting_id_str;  # définir la chaîne accounting_id par emplacement

            ...
        }

        location /api {
            accounting_id  API_PC;   # pour pc

            if ($http_user_agent ~* '(Android|webOS|iPhone|iPod|BlackBerry)') {
                accounting_id  API_MOBILE;   # pour mobile
            }

            ...
        }
    }

}

Directives

accounting

syntaxe : accounting on | off

par défaut : accounting off

contexte : http

accounting_log

syntaxe : accounting_log \ [level]

par défaut : -

contexte : http

Configure l'enregistrement.

Supporte à la fois le chemin file local, ou stderr, ou syslog:. Le deuxième paramètre est le niveau de journalisation. Pour plus de détails sur les paramètres pris en charge, référez-vous à cette page de nginx.org.

Si non spécifié, le journal de comptabilité sera écrit dans /dev/log.

accounting_id

syntaxe : accounting_id \

par défaut : accounting_id default

contexte : http, server, location, if in location

Définit la chaîne accounting_id par une variable définie par l'utilisateur.

Cette chaîne est utilisée pour déterminer à quelles métriques une requête/session doit être agrégée.

accounting_interval

syntaxe : accounting_interval \

par défaut : accounting_interval 60

contexte : http

Spécifie l'intervalle de rapport. Par défaut, 60 secondes.

accounting_perturb

syntaxe : accounting_perturb on | off

par défaut : accounting_perturb off

contexte : http

Décale aléatoirement l'intervalle de rapport de 20 % par rapport au temps habituel.

Utilisation

Ce module peut être configuré pour écrire des métriques dans un fichier local, un serveur de journaux distant ou un périphérique syslog local.

Des logiciels d'agrégation de journaux open-source tels que logstash prennent également en charge l'entrée syslog, ce qui vous aidera à établir un serveur de journaux central. Voir samples/logstash/ pour des exemples. [Recommandé]

Pour collecter des journaux avec syslog local, référez-vous à Lax/ngx_http_accounting_module-utils pour un exemple de configuration / utilitaires.

docker / docker-compose

Pour démontrer avec docker-compose, exécutez

docker-compose build
docker-compose up -d

Ouvrez Grafana (adresse : http://localhost:3000) dans votre navigateur.

Créez et configurez la source de données elasticsearch avec les options :

Type : elasticsearch
URL : http://elasticsearch:9200
Version : 5.6+
Intervalle de temps minimum : 1m

Puis importez le tableau de bord de comptabilité depuis samples/accounting-dashboard-grafana.json.

Format de journal des métriques

## 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

Chaque ligne de la sortie du journal contient des métriques pour un accounting_id particulier, qui contient une liste de paires clé-valeur.

nom de clé significations des valeurs
pid pid du processus de travail nginx
from / to la métrique a été collectée à partir de la période entre ces horodatages
accounting_id identifiant pour l'unité de comptabilité, défini par la directive accounting_id
requests nombre total de requêtes traitées dans la période actuelle (module HTTP uniquement)
sessions nombre total de sessions traitées dans la période actuelle (module Stream uniquement)
bytes_in total des octets reçus par le serveur
bytes_out total des octets envoyés par le serveur
latency_ms somme de tous les $session_time des requêtes/sessions, en millisecondes
upstream_latency_ms somme de $upstream_response_time, en millisecondes
200 / 302 / 400 / 404 / 500 ... nombre de requêtes/sessions avec le code d'état 200/302/400/404/500, etc. Remarquez les différences entre les codes http et les codes stream

Exemple de configuration

http {
  accounting        on;
  accounting_log    logs/http-accounting.log;
  accounting_id     $hostname;

  ...
}

stream {
  accounting        on;
  accounting_log    logs/stream-accounting.log;
  accounting_id     $hostname;

  ...
}

Visualisation

La visualisation avec Kibana ou Grafana est facile. Voir samples/ pour des exemples.

Branches

  • master : branche principale de développement.
  • tag v0.1 ou v2-freeze-20110526 : version héritée. fonctionne avec la version nginx (0.7.xx, 0.8.xx), nginx 0.9 n'est pas testé. ne fonctionne pas avec nginx au-dessus de 1.0.x.

GitHub

Vous pouvez trouver des conseils de configuration supplémentaires et de la documentation pour ce module dans le dépôt GitHub pour nginx-module-traffic-accounting.