Analyseur de logs Nginx : rapport de trafic complet
Mini-outil qui parcourt un access.log, agrège le trafic par heure et par classe de code HTTP, puis imprime un rapport console avec barres ASCII et pourcentages.
Cas d'usage
Diagnostiquer un pic de charge ou une vague d'erreurs 5xx sans installer de stack d'observabilité.
Prérequis
Python 3.9+ (bibliothèque standard)
Python
from collections import Counter
heures, statuts = Counter(), Counter()
total = 0
with open("access.log", encoding="utf-8") as f:
for ligne in f:
p = ligne.split()
if len(p) < 9:
continue
total += 1
heures[p[3][13:15]] += 1 # [10/Jun/2026:14:02:11 → "14"
statuts[p[8][0] + "xx"] += 1
print(f"Requêtes analysées : {total:,}".replace(",", " "))
print()
print("Trafic par heure (top 5) :")
pic = max(heures.values())
for h, n in sorted(heures.items(), key=lambda x: -x[1])[:5]:
print(f" {h}h {n:>6} " + "█" * round(n * 28 / pic))
print()
print("Codes HTTP :")
for code, n in sorted(statuts.items()):
print(f" {code} : {n:>6} ({n / total:6.1%})")Résultat
Requêtes analysées : 184 302 Trafic par heure (top 5) : 14h 21450 ████████████████████████████ 15h 19872 ██████████████████████████ 10h 17204 ██████████████████████ 11h 16881 ██████████████████████ 16h 15110 ████████████████████ Codes HTTP : 2xx : 171220 ( 92.9%) 3xx : 7905 ( 4.3%) 4xx : 4312 ( 2.3%) 5xx : 865 ( 0.5%)
LogsNginxRapportCounterOps