
🌐 Aussi en: English · Deutsch · Español
Tout propriétaire de blog finit par se poser la même question : est-ce que quelqu’un lit vraiment ce truc ? Sur le Web moderne, la réponse honnête est inconfortable : l’essentiel de votre « trafic », ce sont des robots. J’ai donc fait ce que tout sysadmin raisonnable fait au lieu d’installer un énième tracker JavaScript : j’ai écrit un petit script Python, je l’ai lâché sur mes propres logs nginx-ingress et j’ai compté les humains à la main. Enfin, à la regex. 🐍
Voici à quoi ressemble réellement une semaine sur www.apt-upgrade.me une fois les machines retirées.
📉 L’entonnoir de la déception (et du soulagement)
| Requêtes HTTP au total | 22 666 |
| IP qui se sont comportées comme un navigateur | 119 |
| …dont : cloud / datacenter / scrapers 🤖 | 45 |
| Vrais visiteurs réguliers 🧑💻 | 74 |
≈ 16 humains par jour, soit environ ~110 par semaine. Sur vingt-deux mille requêtes. Laissez cela infuser. Statistiquement, Internet est une salle serveur qui se parle à elle-même. 🕳️
🕵️ Pourquoi les « IP uniques » brutes sont un mensonge
Si vous passez simplement votre log d’accès dans sort | uniq -c, vous obtiendrez un chiffre magnifique, bien gras et totalement fictif. L’écrasante majorité des requêtes vient de crawlers et de scanners – et une grosse partie d’entre eux envoient un User-Agent tout ce qu’il y a de plus ordinaire, Mozilla/5.0 … Chrome/…. L’approche naïve « compter les UA qui ressemblent à un navigateur » donnait sur ce jeu de données 959 visiteurs. Le vrai chiffre est plus petit d’un ordre de grandeur.
Le script applique donc trois filtres, chacun plus étroit que le précédent :
| # | Filtre | Ce qu’il attrape |
|---|---|---|
| 1️⃣ | Liste noire de User-Agents | Les bots qui admettent poliment être des bots (bot, crawl, spider, python, curl, zgrab, masscan…). |
| 2️⃣ | Corrélation des ressources 💪 | Un vrai navigateur charge le CSS, le JS et les images référencés par la page. Un scraper prend le HTML et s’en va. « Avez-vous aussi chargé ≥3 ressources ? » est de loin le signal isolé le plus fiable. |
| 3️⃣ | Plages réseau cloud + rDNS | Ce qui survit à l’étape 2, c’est surtout du Chrome headless chez Tencent Cloud, OVH, Alibaba & compagnie – un « navigateur » géolocalisé là où la VM se trouve tourner. |
🌍 D’où venaient les humains
Une fois les machines filtrées, voici la répartition géographique des 74 survivants (pays tiré d’une base GeoLite2 locale – aucune donnée ne quitte le serveur, j’y reviens plus bas) :
| Pays | Visiteurs | Part | |
|---|---|---|---|
| 🇺🇸 États-Unis | 13 | 17,6 % | █████████ |
| 🇩🇪 Allemagne | 10 | 13,5 % | ███████ |
| 🇨🇳 Chine | 8 | 10,8 % | ██████ |
| 🇬🇧 Royaume-Uni | 6 | 8,1 % | ████ |
| 🇨🇦 Canada | 5 | 6,8 % | ████ |
| 🇳🇱 Pays-Bas | 4 | 5,4 % | ███ |
| 🇮🇹 Italie | 3 | 4,1 % | ██ |
| 🇧🇷 Brésil | 2 | 2,7 % | █ |
| 🇨🇿 Tchéquie | 2 | 2,7 % | █ |
| 🇫🇷 France | 2 | 2,7 % | █ |
| 🇩🇰 Danemark | 2 | 2,7 % | █ |
| 🌐 17 autres pays (1 chacun) | 17 | 23,0 % | 🇲🇽🇰🇿🇱🇧🇦🇺🇺🇦🇱🇹🇯🇵🇰🇼🇶🇦🇷🇴🇮🇱🇸🇪🇳🇿🇮🇳🇦🇷🇭🇺 |
| Total | 74 | 100 % |
Un petit public vraiment international pour un blog allemand de geek consacré à Linux et à la sécurité. Bonjour à vous, qui que vous soyez, au Kazakhstan et au Koweït – je n’en vois qu’un seul de chaque pays, et je vous en remercie. 👋
🔧 Comment fonctionne le script (et où le piquer)
Environ 330 lignes de Python avec un minimum de dépendances. Le pipeline en bref :
parse nginx-ingress logs (CRI-wrapped combined format) → drop private IPs, non-GET, self-declared bots → split each IP's hits into "HTML pages" vs "assets" → keep only IPs with a real page + ≥3 assets # the human test → subtract cloud netblocks & datacenter rDNS → geolocate locally, mask to /24, aggregate, print
Le tout est open source – aucun secret, juste la logique d’analyse – dans mon dépôt d’infrastructure :
👉 github.com/aptupgrademe/www_k3s (scripts/analytics/visitor-stats.py). Clonez-le, pointez-le vers vos propres logs d’ingress et découvrez à quel point votre coin du Web est vraiment désert. 😄
🛡️ Pas de tracker, pas de bandeau cookies, aucune donnée qui sort de la machine
Voici la partie dont je suis discrètement fier : il n’y a absolument aucun pistage sur ce blog. Pas de Google Analytics, pas de balise, pas de pixel tiers, pas de popup « nous respectons votre vie privée ». C’est de l’analyse de logs serveur pure – les mêmes lignes que nginx écrit de toute façon. Et comme les adresses IP des visiteurs sont des données personnelles au sens du RGPD, le script est délibérément conçu pour que :
- 🔒 Rien ne quitte jamais le serveur – la géolocalisation utilise une base GeoLite2 locale, pas une API tierce.
- 🎭 La sortie soit masquée en /24 (ou /48 en IPv6) – assez pour voir « un visiteur d’Italie », jamais assez pour identifier une personne.
- 🧹 Il ne tourne qu’à la demande et ne garde aucun profil – sans cookies, il est littéralement incapable de distinguer un lecteur fidèle d’un nouveau. Et c’est très bien ainsi.
⚠️ Section honnêteté (parce que les chiffres mentent)
- Une IP n’est pas une personne. Les utilisateurs mobiles changent d’adresse, les foyers en partagent une, le CGNAT en cache des centaines derrière une seule. Ces chiffres donnent un ordre de grandeur, pas un recensement.
- Le « par semaine » est extrapolé. k3s fait tourner les logs des conteneurs à 10 MB et n’en garde que très peu ; en pratique, seuls ~4,7 jours restent sur le disque. Le chiffre hebdomadaire est une mise à l’échelle de ces jours – à prendre avec des pincettes. 🧂
- Mon propre trafic est exclu. En éditant un article, je consulte plus de pages en une soirée que de vrais lecteurs en un mois, donc le préfixe de mon réseau domestique est filtré. Sinon, ce serait moi le plus grand fan du blog.
💡 Pourquoi s’embêter ? (la question de l’argent)
Soyons parfaitement transparents : ce blog me rapporte exactement 0 €. Pas de pub, pas de liens d’affiliation, pas de « offrez-moi un café », pas de tunnel de vente de formation. Rien. Il me coûte du temps et une facture de serveur, et ne me rapporte rien d’autre qu’un visiteur occasionnel du Qatar. 🪙❌
Et pourtant – même avec énormément d’heures investies et énormément d’aide de l’IA en chemin – c’est vraiment amusant. Chacun de ces petits projets (durcir la stack, traquer les bots scanners, construire ce compteur de visiteurs) est un prétexte pour mettre les mains dans le cambouis avec Linux et la sécurité, et j’apprends quelque chose de concret à chaque fois. C’est toute la récompense, et franchement, elle suffit largement. Si une poignée de ces 74 humains ont appris quelque chose eux aussi, c’est un bonus. 🐧❤️
Il y a encore une autre façon dont j’en suis venu à voir tout cela. L’allemand possède un mot merveilleux – Ehrenamt – pour désigner le travail civique non rémunéré que l’on assume par sens du devoir et par véritable plaisir : la fonction honorifique, exercée pour la communauté plutôt que pour un salaire. C’est une tradition longue et fière. Et avec mes compétences et mes centres d’intérêt, j’ai le sentiment d’avoir trouvé ici même mon Ehrenamt du troisième millénaire – une définition du bénévolat qui me correspond vraiment, à l’ère de la numérisation et de l’informatique, exprimée dans le domaine que je connais et que j’aime : Linux, les serveurs et la sécurité. 🐧
Concrètement, voici ce qui compte pour moi :
- 📢 Sans publicité, toujours. Pas de bannières, pas de trackers, pas d’articles sponsorisés, rien à vendre. Ce que vous lisez, c’est simplement ce que j’avais envie d’écrire.
- 🎁 Aucun avantage recherché. Je n’y gagne rien commercialement – c’est donné librement, et c’est un peu tout l’intérêt.
- 🎓 Transmission du savoir. Tout ce que je découvre – durcir une stack, attraper des bots scanners, mesurer le TTFB – est mis par écrit pour que la personne suivante puisse sauter la partie douloureuse.
- 🌍 Pas de frontières. Un blog atteint quiconque possède un navigateur, de l’Allemagne au Kazakhstan en passant par le Koweït (re-bonjour 👋). Une portée qui s’arrêtait autrefois à la sortie du village est désormais mondiale, et gratuite.
- 🧑💻 Open source, de bout en bout. L’ensemble – playbooks Ansible, manifestes Kubernetes, ce script de visiteurs lui-même – est public. Prenez-le, apprenez-en, faites-le tourner vous-même.
Et je peux même être plus précis que « open source ». Le dépôt est publié sous licence MIT, que la Free Software Foundation reconnaît comme une véritable licence de logiciel libre (permissive et compatible GPL). Ce n’est donc pas seulement du code source que vous avez le droit de regarder : c’est un logiciel que vous êtes réellement libre d’exécuter, étudier, partager et modifier, pour n’importe quel usage, sans conditions. Au sens le plus plein du terme, cela me semble exactement la bonne manière de rendre quelque chose en 2026. 🌐❤️
📦 Code source complet, infrastructure as code et script de visiteurs : github.com/aptupgrademe/www_k3s – aucun tracker n’a été maltraité pendant la rédaction de cet article.




