Dua cara salah menghitung log akses
Perubahan selama seminggu di sini bertumpu pada hitungan yang diambil dari satu hari log akses: sejuta baris, seratus ribu di antaranya milik kami. Untuk mengetahui apakah semua itu berhasil, hitungan yang sama harus diambil lagi nanti — dan hitungan yang disusun ulang secara manual untuk kedua kalinya tidak pernah persis sama dengan hitungan pertama. Daftar bot yang berbeda, rentang tanggal yang berbeda, versi lain dari grep.
Karena itu penghitungan dipindahkan ke sebuah alat dengan nilai acuan yang ditulis di dalamnya sebagai konstanta. Proses pertama dijalankan terhadap log yang sama persis dengan asal nilai acuan itu. Semua hasil harus sama.
Dua baris tidak sama. Pada keduanya alat itulah yang benar, dan hitungan awal yang salah.
grep membaca seluruh baris
Temuan utama minggu itu adalah bahwa token pemilik muncul sekali dalam satu hari penuh. Token itu dihitung dengan pola yang dicocokkan terhadap seluruh baris log — dan satu baris log tidak hanya memuat permintaan, tetapi juga perujuk dan user agent.
Satu-satunya kecocokan adalah &t= di dalam URL perujuk sebuah mesin pencari. Seseorang datang dari hasil pencarian seluler yang alamatnya kebetulan memuat dua karakter itu. Dalam permintaannya sendiri, token itu muncul nol kali.
Temuannya justru menjadi lebih kuat, cara yang aneh untuk keliru. Tetap saja keliru. Potong dulu kolom permintaan — kolom bertanda kutip kedua dalam baris log berformat combined — lalu cari di dalamnya.
Rantai else-if menelan kasus yang spesifik
Hitungan kedua menyatakan feed mingguan telah diambil nol kali. Klasifikasinya tampak masuk akal:
if (url contains "/live/") ... else if (url contains "feed.xml") ...
Alamat feed di situs ini adalah /live/<number>/feed.xml. Setiap alamat itu cocok dengan cabang pertama dan tidak pernah mencapai cabang kedua. Angka sebenarnya adalah 398.
Kesimpulan yang ditarik dari angka yang salah itu kebetulan tetap bertahan: 398 permintaan itu tersebar merata di kesebelas prefiks bahasa dengan tiga string browser generik, yang berarti crawler yang mengambil setiap terjemahan, bukan pelanggan. Tidak ada yang berlangganan. Namun “tidak ada yang berlangganan” dan “nol permintaan” adalah pernyataan yang berbeda, dan pernyataan kedua dikutip berulang kali sebelum ada yang memeriksanya.
Pemeriksaan yang menangkap keduanya
Jalankan alat penghitung terhadap hari yang persis sama dengan asal nilai acuan. Setiap baris harus menghasilkan angka yang sama. Apa pun yang tidak sama adalah bug di alat atau bug di hitungan awal, dan mana yang benar akan ketahuan sebelum hal itu berdampak, bukan sesudahnya.
Itu hanya butuh satu kali proses dan sekitar empat menit. Kedua angka itu saat itu sudah muncul dalam tulisan, dan tidak satu pun akan tertangkap dengan membaca kode lebih cermat — hanya dengan membuat pengukuran itu mempertanggungjawabkan dirinya sendiri.