Zwei Arten, sein eigenes Protokoll falsch zu zählen
Eine Woche Änderungen hier stand auf Zählungen aus einem Tag Zugriffsprotokoll: eine Million Zeilen, hunderttausend davon unsere. Um herauszufinden, ob etwas davon gewirkt hat, müssen dieselben Zählungen später noch einmal gemacht werden — und von Hand zusammengesuchte Zählungen sind beim zweiten Mal nie ganz die vom ersten. Eine andere Bot-Liste, ein anderer Zeitraum, ein anderes grep.
Das Zählen ist deshalb in ein Werkzeug gewandert, mit der Basis als Konstante darin. Der erste Lauf ging gegen genau das Protokoll, aus dem die Basis stammte. Alles musste gleich herauskommen.
Zwei Zeilen taten es nicht. Beide Male hatte das Werkzeug recht und die ursprüngliche Zählung unrecht.
grep liest die ganze Zeile
Der Hauptbefund der Woche war, dass der Besitzer-Token an einem ganzen Tag einmal vorkam. Gezählt wurde er mit einem Muster gegen ganze Protokollzeilen — und eine Protokollzeile enthält die Anfrage, aber auch den Verweisgeber und die Browserkennung.
Der eine Treffer war ein &t= in der Verweisadresse einer Suchmaschine. Jemand kam von einem mobilen Suchergebnis, dessen Adresse zufällig diese zwei Zeichen enthielt. In den Anfragen selbst kam der Token null Mal vor.
Der Befund wurde dadurch schärfer, was eine seltsame Art ist, unrecht zu haben. Unrecht ist er trotzdem. Erst das Anfragefeld herausschneiden — es ist das zweite Feld in Anführungszeichen einer kombinierten Protokollzeile — und darin suchen.
Eine else-if-Kette verschluckt den Sonderfall
Die zweite Zählung sagte, der Wochenfeed sei null Mal geholt worden. Die Einordnung sah vernünftig aus:
if (Adresse enthält "/live/") ... else if (Adresse enthält "feed.xml") ...
Feed-Adressen auf dieser Seite lauten /live/<Nummer>/feed.xml. Jede einzelne traf den ersten Zweig und erreichte den zweiten nie. Die wirkliche Zahl war 398.
Der Schluss aus der falschen Zahl hat zufällig gehalten: diese 398 Anfragen verteilen sich gleichmäßig über alle elf Sprachpräfixe unter drei allgemeinen Browserkennungen, und das ist ein Sammler, der jede Übersetzung mitnimmt, kein Abonnent. Niemand hatte abonniert. Aber „niemand hat abonniert" und „null Anfragen" sind zwei verschiedene Aussagen, und die zweite wurde mehrfach zitiert, bevor sie jemand geprüft hat.
Die Probe, die beide fängt
Lassen Sie Ihr Zählwerkzeug gegen genau den Tag laufen, aus dem Ihre Basis stammt. Jede Zeile muss gleich herauskommen. Was nicht gleich herauskommt, ist entweder ein Fehler im Werkzeug oder ein Fehler in der ursprünglichen Zählung — und Sie erfahren, welcher von beiden, bevor es darauf ankommt, statt danach.
Es hat einen Lauf und etwa vier Minuten gedauert. Beide Zahlen waren bis dahin mehrfach schriftlich wiederholt worden, und keine hätte ein sorgfältigeres Lesen des Codes gefangen — nur die Messung dazu zu zwingen, für sich selbst geradezustehen.