Serverless

Serverless megfigyelhetőség: hogyan látsz bele egy elosztott rendszerbe?

Elosztott trace és strukturált log nélkül a serverless hibakeresés vakrepülés. Hogyan tedd láthatóvá egy sok apró függvényből álló rendszer valós működését?

Röviden: Elosztott trace és strukturált log nélkül a serverless hibakeresés vakrepülés. Hogyan tedd láthatóvá egy sok apró függvényből álló rendszer valós működését?

A serverless architektúra egyik legnagyobb erénye — a sok apró, laza csatolású komponens — egyben a legnagyobb megfigyelhetőségi kihívása is. Egy hagyományos monolitban egy kérés útját viszonylag könnyű követni. Egy serverless rendszerben ugyanaz a kérés áthaladhat tucatnyi függvényen, üzenetsoron és menedzselt szolgáltatáson, aszinkron ugrásokkal. Elosztott trace és strukturált log nélkül a hibakeresés itt tiszta vakrepülés.

Miért nehezebb a serverless?

A nehézség az elosztottságból és az efemeritásból jön. A függvények rövid életűek: lefutnak, és eltűnnek, nincs hova belépni utólag megnézni, mi történt. A kérés útja szétszórt: több komponensen halad át, gyakran aszinkron, így nincs egyetlen hely, ahol a teljes kép összeáll. Ha csak az egyes függvények izolált logjait nézed, sosem látod a teljes utat.

Az elosztott trace: az összekötő szál

A serverless megfigyelhetőség gerince az elosztott nyomkövetés (distributed tracing). A lényeg, hogy minden kérés kap egy azonosítót, ami végigkíséri az egész úton — függvényről függvényre, üzenetsoron át. Így utólag rekonstruálható a teljes út: hol mennyi időt töltött, hol akadt el, melyik komponens hibázott. E nélkül csak találgatsz.

A strukturált log

A szabad szövegű log egy elosztott rendszerben szinte használhatatlan — nem lehet benne értelmesen keresni és korrelálni. A strukturált log (géppel olvasható, mezőkre bontott formátum) ezzel szemben kereshető és összekapcsolható. Ha minden log-bejegyzés viszi a trace-azonosítót és a lényeges kontextust mezőkben, akkor egy incidensnél gyorsan összegyűjthető egy adott kérés összes érintett log-sora, függvényeken átívelően.

A három jel együtt

  1. Trace — megmutatja a kérés teljes útját és hol tölti az időt.
  2. Strukturált log — elárulja, pontosan mi történt egy adott lépésnél.
  3. Metrika — jelzi, ha valami trendszerűen romlik, és riasztásra ad alapot.

A három akkor erős, ha közös azonosítóval összekapcsolható: a metrika riaszt, a trace megmutatja a szűk keresztmetszetet, a log elárulja az okot. Ez a lánc a serverless hibakeresés alapja.

A költség kordában tartása

A serverlessben a megfigyelhetőség költsége könnyen elszáll, mert sok apró komponens sok jelet termel. Ezért itt is fontos a fegyelem: mintavételezd a trace-eket (nem kell minden kérést teljes részletességgel), tartsd alacsonyan a metrikák kardinalitását, és rétegezd a log-megőrzést. A cél, hogy baj esetén gyorsan lásd az okot, ne hogy mindent gyűjts drágán, amit sosem nézel.

A három jel összekapcsolása

A trace megmutatja a kérés teljes útját és hol tölti az időt; a strukturált log elárulja, pontosan mi történt egy adott lépésnél; a metrika jelzi, ha valami trendszerűen romlik. A három akkor erős, ha közös azonosítóval összekapcsolható: a metrika riaszt, a trace megmutatja a szűk keresztmetszetet, a log elárulja az okot.

  1. Vigyél közös korrelációs azonosítót minden jelbe.
  2. Propagáld az azonosítót az aszinkron ugrásokon is.
  3. Használj strukturált, kereshető logot a szabad szöveg helyett.

Mit jelent ez neked?

A serverless megfigyelhetőség kulcsa az elosztott trace és a strukturált log, közös korrelációs azonosítóval összekötve — ez teszi láthatóvá a sok apró függvényen átívelő kérés útját. A leggyakoribb vak folt az aszinkron határ: ügyelj rá, hogy a trace-azonosító az üzenetsorokon és eseményeken is átjusson. A metrika, a trace és a log együtt adja a teljes képet, ha összekapcsolható. Tartsd kordában a megfigyelés költségét mintavételezéssel és rétegzett megőrzéssel — a cél a gyors hibakeresés, nem a mindent-gyűjtés.