
🌐 Auch auf: English · Français · Español
Jeder Blogbetreiber stellt sich irgendwann dieselbe Frage: Liest das hier eigentlich irgendjemand? Die ehrliche Antwort im modernen Web ist unbequem – der Großteil deines „Traffics“ sind Roboter. Also habe ich getan, was jeder vernünftige Sysadmin tut, statt noch einen JavaScript-Tracker zu installieren: ein kleines Python-Skript geschrieben, es auf meine eigenen nginx-ingress-Logs losgelassen und die Menschen von Hand gezählt. Na gut, per Regex. 🐍
So sieht eine Woche auf www.apt-upgrade.me tatsächlich aus, wenn man die Maschinen herausrechnet.
📉 Der Trichter der Ernüchterung (und Erleichterung)
| HTTP-Requests insgesamt | 22.666 |
| IPs, die sich wie ein Browser verhalten haben | 119 |
| …davon: Cloud / Rechenzentrum / Scraper 🤖 | 45 |
| Echte, normale Besucher 🧑💻 | 74 |
≈ 16 Menschen pro Tag, also grob ~110 pro Woche. Von zweiundzwanzigtausend Requests. Lass das mal sacken. Das Internet ist statistisch gesehen ein Serverraum, der Selbstgespräche führt. 🕳️
🕵️ Warum rohe „Unique IPs“ eine Lüge sind
Wenn du dein Access-Log einfach durch sort | uniq -c jagst, bekommst du eine schöne, fette, komplett erfundene Zahl. Die überwältigende Mehrheit der Zugriffe sind Crawler und Scanner – und ein großer Teil davon schickt dabei einen völlig gewöhnlichen Mozilla/5.0 … Chrome/…-User-Agent mit. Der naive Ansatz „zähl einfach die browserartigen UAs“ ergab bei diesem Datensatz 959 Besucher. Die echte Zahl ist eine Größenordnung kleiner.
Deshalb arbeitet das Skript mit drei Filtern, jeder enger als der vorige:
| # | Filter | Was er erwischt |
|---|---|---|
| 1️⃣ | User-Agent-Blocklist | Die Bots, die höflich zugeben, dass sie Bots sind (bot, crawl, spider, python, curl, zgrab, masscan…). |
| 2️⃣ | Asset-Korrelation 💪 | Ein echter Browser lädt das CSS, JS und die Bilder, auf die die Seite verweist. Ein Scraper schnappt sich das HTML und ist weg. „Hast du auch ≥3 Assets geladen?“ ist mit Abstand das stärkste Einzelsignal. |
| 3️⃣ | Cloud-Netzblöcke + rDNS | Was Schritt 2 übersteht, ist meist Headless Chrome bei Tencent Cloud, OVH, Alibaba & Co. – ein „Browser“, dessen Standort dort liegt, wo die VM gerade zufällig steht. |
🌍 Woher die Menschen kamen
Nachdem die Maschinen aussortiert sind, hier die geografische Verteilung der 74 Überlebenden (Land aus einer lokalen GeoLite2-Datenbank – keine Daten verlassen den Server, mehr dazu unten):
| Land | Besucher | Anteil | |
|---|---|---|---|
| 🇺🇸 USA | 13 | 17,6 % | █████████ |
| 🇩🇪 Deutschland | 10 | 13,5 % | ███████ |
| 🇨🇳 China | 8 | 10,8 % | ██████ |
| 🇬🇧 Vereinigtes Königreich | 6 | 8,1 % | ████ |
| 🇨🇦 Kanada | 5 | 6,8 % | ████ |
| 🇳🇱 Niederlande | 4 | 5,4 % | ███ |
| 🇮🇹 Italien | 3 | 4,1 % | ██ |
| 🇧🇷 Brasilien | 2 | 2,7 % | █ |
| 🇨🇿 Tschechien | 2 | 2,7 % | █ |
| 🇫🇷 Frankreich | 2 | 2,7 % | █ |
| 🇩🇰 Dänemark | 2 | 2,7 % | █ |
| 🌐 17 weitere Länder (je 1) | 17 | 23,0 % | 🇲🇽🇰🇿🇱🇧🇦🇺🇺🇦🇱🇹🇯🇵🇰🇼🇶🇦🇷🇴🇮🇱🇸🇪🇳🇿🇮🇳🇦🇷🇭🇺 |
| Gesamt | 74 | 100 % |
Ein erstaunlich internationales kleines Publikum für einen nerdigen deutschen Linux-und-Security-Blog. Hallo, wer auch immer du in Kasachstan und Kuwait bist – ich sehe genau eine:n von euch, und ich weiß das zu schätzen. 👋
🔧 Wie das Skript funktioniert (und wo du es klauen kannst)
Es sind rund 330 Zeilen Python mit kaum Abhängigkeiten. Die Pipeline in Kurzform:
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
Das Ganze ist Open Source – keine Geheimnisse, nur die Analyselogik – in meinem Infrastruktur-Repo:
👉 github.com/aptupgrademe/www_k3s (scripts/analytics/visitor-stats.py). Klonen, auf die eigenen Ingress-Logs richten und herausfinden, wie einsam deine Ecke des Webs wirklich ist. 😄
🛡️ Kein Tracker, kein Cookie-Banner, keine Daten, die die Kiste verlassen
Darauf bin ich insgeheim ein bisschen stolz: Auf diesem Blog gibt es überhaupt kein Tracking. Kein Google Analytics, kein Beacon, kein Drittanbieter-Pixel, kein „Ihre Privatsphäre ist uns wichtig“-Popup. Das hier ist reine Server-Log-Analyse – dieselben Zeilen, die nginx sowieso schreibt. Und weil Besucher-IPs nach der DSGVO personenbezogene Daten sind, ist das Skript bewusst so gebaut, dass:
- 🔒 Nichts jemals den Server verlässt – die Geolokalisierung nutzt eine lokale GeoLite2-Datenbank, keine Dritt-API.
- 🎭 Die Ausgabe auf /24 maskiert ist (bzw. /48 bei IPv6) – genug, um „ein Besucher aus Italien“ zu sehen, nie genug, um eine Person zu identifizieren.
- 🧹 Es nur bei Bedarf läuft und kein Profil anlegt – ohne Cookies kann es buchstäblich nicht unterscheiden, ob jemand wiederkommt oder neu ist. Und das ist auch gut so.
⚠️ Ehrlichkeitsabschnitt (denn Zahlen lügen)
- Eine IP ist keine Person. Mobilnutzer wechseln ständig die Adresse, Haushalte teilen sich eine, CGNAT versteckt Hunderte hinter einer einzigen. Diese Zahlen sind eine Größenordnung, keine Kopfzählung.
- „Pro Woche“ ist hochgerechnet. k3s rotiert Container-Logs bei 10 MB und behält nur sehr wenige, in der Praxis liegen also nur ~4,7 Tage auf der Platte. Der Wochenwert ist auf diese Tage hochskaliert – also mit Vorsicht genießen. 🧂
- Mein eigener Traffic ist rausgefiltert. Wenn ich einen Beitrag bearbeite, rufe ich an einem Abend mehr Seiten auf als echte Leser in einem Monat, deshalb fliegt mein Heim-Präfix raus. Sonst wäre ich der größte Fan dieses Blogs.
💡 Wozu der Aufwand? (die Geldfrage)
Ich will ganz transparent sein: Ich verdiene mit diesem Blog exakt 0 €. Keine Werbung, keine Affiliate-Links, kein „Spendier mir einen Kaffee“, kein Kurs-Funnel. Nichts. Er kostet mich Zeit und eine Serverrechnung und bringt mir nichts ein außer gelegentlich einem Besucher aus Katar. 🪙❌
Und trotzdem – auch mit sehr vielen investierten Stunden und sehr viel KI-Unterstützung unterwegs – macht es richtig Spaß. Jedes dieser kleinen Projekte (den Stack härten, Scanner-Bots jagen, diesen Besucherzähler bauen) ist ein Vorwand, mir mit Linux und Security die Hände schmutzig zu machen, und jedes Mal lerne ich etwas Konkretes dazu. Das ist der ganze Lohn, und ehrlich gesagt reicht er völlig. Wenn ein paar dieser 74 Menschen auch etwas gelernt haben, ist das ein Bonus. 🐧❤️
Es gibt noch einen Blickwinkel, aus dem ich das Ganze inzwischen sehe. Wir haben im Deutschen dafür ein wunderbares Wort – Ehrenamt: unbezahlte Arbeit für die Gemeinschaft, die man aus Pflichtgefühl und echter Freude übernimmt, für andere statt für den Gehaltszettel. Das hat eine lange und stolze Tradition. Und mit meinen Fähigkeiten und Interessen habe ich, finde ich, genau hier mein persönliches Ehrenamt für das dritte Jahrtausend gefunden – eine Form von Engagement, die wirklich zu mir passt, im Zeitalter von Digitalisierung und IT, ausgedrückt in dem Medium, das ich kenne und liebe: Linux, Server und Security. 🐧
Konkret ist mir dabei Folgendes wichtig:
- 📢 Werbefrei, immer. Keine Banner, keine Tracker, keine gesponserten Beiträge, nichts zu verkaufen. Was du liest, ist einfach das, was ich schreiben wollte.
- 🎁 Kein Vorteil gesucht. Kommerziell springt für mich nichts dabei heraus – es ist frei gegeben, und genau darum geht es ja.
- 🎓 Wissenstransfer. Alles, was ich herausfinde – einen Stack härten, Scanner-Bots fangen, TTFB messen –, wird aufgeschrieben, damit die Nächste oder der Nächste den schmerzhaften Teil überspringen kann.
- 🌍 Keine Grenzen. Ein Blog erreicht jeden mit einem Browser, von Deutschland über Kasachstan bis Kuwait (nochmal hallo 👋). Eine Reichweite, die früher am Ortsschild endete, ist jetzt weltweit – und kostenlos.
- 🧑💻 Open Source, von vorne bis hinten. Das Ganze – Ansible-Playbooks, Kubernetes-Manifeste, genau dieses Besucher-Skript – liegt offen. Nimm es, lern daraus, betreib es selbst.
Und hier kann ich sogar genauer sein als „Open Source“. Das Repository steht unter der MIT-Lizenz, die die Free Software Foundation als echte Freie-Software-Lizenz anerkennt (permissiv und GPL-kompatibel). Das ist also nicht bloß Quellcode, den du dir ansehen darfst – es ist Software, die du wirklich frei ausführen, untersuchen, weitergeben und verändern darfst, für jeden Zweck, ohne Haken. Im vollsten Sinne des Wortes fühlt sich das 2026 genau nach der richtigen Art an, etwas zurückzugeben. 🌐❤️
📦 Kompletter Quellcode, Infrastructure as Code und das Besucher-Skript: github.com/aptupgrademe/www_k3s – bei der Entstehung dieses Beitrags kamen keine Tracker zu Schaden.




