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

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.