„Egyszer volt, hol nem volt, élt egyszer egy ember, szakálla volt kender, munkája meg a Rendszer, eseményekkel teli, kaotikus, furcsa szerzet. E Rendszer, melyet száznál is több gép alkotott, működött rendesen – többnyire –, mikor az galád Programozók el nem törték vala.
Emberünk, kinek neve legyen mostantól Gazda, azt a hálátlan feladatot kapta, hogy e Rendszert életben s működésben tartsa. Megbízóit a részletek nem érdekelték, minden apróságra nem volt szükség, csak arra, hogy a Rendszer, ha baj van, jelezzen, s a bajt visszacsinálni lehessen. Arról szól ez a kis tanmese, hogy a Gazda e feladatot meg hogyan oldotta.”
Szinte mindenhol, ahol a naplózás, a monitorozás és egyéb ezekhez kapcsolódó kulcsszavak kerülnek szóba, az egyik legfontosabb követelmény, ami felmerül: a pontosság – hogy soha, semmilyen adat, információ el ne vesszen. Számos esetben ez is a helyes megközelítés, de akad azonban olyan helyzet is, hogy az ilyen követelmények többet ártanak, mint amennyi hasznuk van: az infrastruktúra kiépítése nehéz és költséges, a naplóüzenetek tárolása – főleg hosszú távon – nem triviális feladat, pláne úgy, hogy közben titkosítva, több helyre biztonságosan lemásolva mentést is csináljunk róla. Mindezt valós időben, mert ugye a problémákról az ember mihamarabb értesülni kívánna.
Ha ilyen helyzetben találja magát az ember – és rohanó világunkban ez egyre gyakoribb eset lesz –, akkor bizony taktikát kell váltani, és ahelyett, hogy a precizitásra, a mindenre kiterjedő figyelésre koncentrálnánk, a nagy számok és Murphy törvényeire kell feltenni a lapot, mondván: ami egyszer elromlott, az vagy úgy is marad, vagy többször is el fog még romlani. Nem kell minden esetről értesülnünk, megfelel az, ha a nagy, kiugró hibákat elkapjuk, és aggregált, átfogó információkat szerzünk róla aprólékos, ámde szétszórt morzsák helyett.
Példának okáért ha adott egy webes szolgáltatás, amelyre bárki bármikor regisztrálhat és utána adatokat tölthet fel, ott a hibás belépések teljesen természetesek lehetnek, felesleges őket egyenként nyilvántartani. Ellenben a kiugró tendenciák, a túl sok vagy épp túl kevés hiba már bajt jelenthet, amelyről érdemes jelentést küldeni a rendszer gazdájának. Hasonlóképp, ha egy frissítés után rengeteg hiba keletkezik, az bajt jelent. De ha csak egy-kettő, és utána semmi, akkor az lehetett a környezet ideiglenes hibája is, ami elmúlt magától, így nem érdekes.
Jól át kell gondolni persze, hogy mikor hagyatkozhatunk a nagy számok törvényére, hogy mely esetekben szabad információt veszteni, s mikor kell megtartani – akár csak ideiglenesen is – a részleteket. Szerencsére sok megoldás létezik a piacon, melyek segítségünkre lehetnek a feladat ellátásában, legyen az akár minden üzenet megtartása, akár aggregáció, akár a kettő valamilyen kombinációja.
Megfelelő célprogrammal az egyes részletek kiválóan lefedhetőek: az üzenetek fogadását, feldolgozását, korrelációját megoldhatjuk syslog-ng-vel, a tárolást arra alkalmas adatbázisba (legyen az SQL, vagy akár MongoDB) tehetjük, az aggregációt szintén erre alkalmas megoldás (MongoDB, Redis, stb) meg tudja oldani, s ezeket összekötni sem nagy ördöngösség. Ha pedig százszám mérhető a rendszerhez tartozó gépek sora, az Advanced Message Queueing Protocol lehet segítségünkre, példának okáért a RabbitMQ is ezt használja.
A megoldások rendkívül hatékonyan összeilleszthetőek, szinte bármilyen igényt le tudnak fedni, legyen szó akár pár szerverből álló rendszerről, akár egy többszáz gépes farmról. Éppen a rugalmasságban rejlik eme eszközök nagy ereje, ez teszi lehetővé, hogy ne csak a mindenhonnan belénk sulykolt módon kezeljük az egyre növekvő beeső adatmennyiséget: mást is lehet azokkal csinálni, mint mindent mindig eltárolni. A statisztika, az aggregáció, a nagy számok és Murphy törvényei mind segíthetnek abban, hogy e válságos időkben, mikor az adatok mennyisége már-már kezelhetetlennek tűnik, új módokat találjunk azok feldolgozására. Van kiút, ám az sem kompromisszumoktól mentes. Annyi a dolgunk csupán, hogy felmérjük, milyen kompromisszumokra vagyunk hajlandóak.
syslog-ng: http://www.balabit.com/network-security/syslog-ng/
MongoDB: http://www.mongodb.org/
Redis: http://www.redis.io/
AMQP: http://www.amqp.org/
RabbitMQ: http://www.rabbitmq.com/