Pagerul sună la 3 dimineața. Un serviciu a picat. Te conectezi prin SSH la mașină și găsești liniște — un jurnal care spune că a pornit, un jurnal care spune că a murit și nimic între ele. Sistemul a mers exact până în clipa în care nu a mai mers și nu ți-a lăsat nicio poveste despre cum. Golul acela nu este ghinion. Este o decizie de proiectare, luată cu luni în urmă, de a livra funcționalități și de a amâna vizibilitatea.
Trei semnale, trei roluri
Aceste trei lucruri nu sunt interschimbabile. Jurnalele sunt narațiunea — evenimente discrete cu context, ce s-a întâmplat și de ce. Metricile sunt semnele vitale — numere ieftine, agregate în timp, care îți spun cât de mult și cât de repede. Trasările sunt harta — drumul unei singure cereri pe măsură ce traversează servicii, arătând unde s-a dus de fapt timpul. Apelezi la un jurnal ca să explici un eveniment, la o metrică pentru a observa o tendință și la o trasare pentru a găsi saltul lent. Sari peste unul și obții pete oarbe exact acolo unde trăiesc incidentele.
O linie de jurnal făcută doar pentru ochii oamenilor este o fundătură la scară mare. Jurnalizarea structurată emite evenimente sub formă de date cheie-valoare — un id de cerere, un client, o durată, un rezultat — ca să poți filtra, grupa și alerta în loc să cauți prin proză. Disciplina este să jurnalizezi decizii, nu decorațiuni: ramura aleasă, intrarea care a picat validarea, apelul din aval care a expirat. Textul liber îți spune o poveste pe care trebuie să o citești rând cu rând. Evenimentele structurate îți permit să pui o întrebare întregii flote și să primești un răspuns în câteva secunde.
Puținele metrici care contează
Te poți îneca în tablouri de bord. Semnalele care prezic cu adevărat durerea utilizatorului sunt puține — latența, traficul, erorile și saturația, semnalele de aur. Cât durează cererile, câte sosesc, câte eșuează și cât de aproape ești de o limită de resurse. Urmărește-le pe acestea per serviciu, cu percentile în loc de medii, și poți vedea necazul cum se adună înainte ca clienții să-l simtă. Restul este context pe care îl scoți odată ce semnalele de aur îți spun unde să te uiți. Instrumentează întâi cele patru; adaugă restul când o întrebare anume o cere.
Trasările reunesc serviciile la loc
Într-un sistem distribuit, niciun serviciu nu deține singur adevărul despre o cerere lentă. O trasare propagă un id de-a lungul fiecărui salt și înregistrează sincronizarea fiecăruia, așa că o cerere care durează două secunde încetează să fie un mister și devine o diagramă cu bare — acest apel a fost rapid, această coadă a fost adâncă, această bază de date a făcut prăpădul. Fără trasare, depanezi microservicii ghicind pe ce echipă să dai vina. Cu ea, cererea îți spune singură.
Operabilitatea este o funcționalitate pe care o proiectezi
Un sistem nu este gata când trece testele; este gata când altcineva decât autorul lui îl poate rula la 3 dimineața. Asta înseamnă că instrumentarea face parte din proiectare, nu este un petic după prima cădere. Tratăm infrastructura ca pe un produs care este operat, nu doar livrat — fiecare serviciu vine cu jurnale structurate, semnalele de aur, trasări și cu tablouri de bord și alerte conectate înainte să preia trafic de producție. Întrebarea pe care o punem la review nu este doar dacă merge, ci dacă îl poți vedea mergând.
Un sistem pe care nu îl poți observa este un sistem în care poți doar spera, pe care nu îl poți opera niciodată.— Protocore · Inginerie backend
Pe o platformă de plăți pe care am rulat-o, instrumentarea a fost primul commit, nu ultimul. Când latența a crescut într-o după-amiază, o trasare a arătat spre o singură dependență lentă în câteva minute, iar semnalele de aur au confirmat că niciun ban nu era în pericol cât timp reparam — fără cameră de criză, fără ghicit. Asta îți cumpără instrumentarea implicită: un sistem pe care chiar îl poți rula, unul în care un incident este o întrebare cu răspuns, nu o noapte petrecută în beznă.
Ai un sistem de construit?
Spune-ne care e problema. Revenim cu o arhitectură și un plan.
Începe un proiect