Prometej je sistem otvorenog koda namenjen praćenju, koji se bazira na metrici. On prikuplja podatke od različitih servisa i hostova, šaljući HTTP zahteve ka njihovim krajnjim tačkama metrike. Nakon prikupljanja, rezultate skladišti u bazu podataka vremenskih serija, čineći ih dostupnim za detaljnu analizu i upozorenja.
Zašto je praćenje bitno?
- Omogućava vam da dobijate upozorenja kada stvari krenu naopako, idealno pre nego što se problemi eskaliraju. Pruža rano upozorenje koje omogućava pravovremenu reakciju.
- Pruža detaljne uvide koji omogućavaju dubinsku analizu, dijagnostiku i rešavanje problema.
- Dozvoljava praćenje trendova i promena tokom vremena. Na primer, možete pratiti broj aktivnih sesija u datom trenutku. Ovi podaci su ključni za donošenje informisanih odluka o dizajnu i planiranju kapaciteta.
Praćenje se često odnosi na analizu događaja. Događaj može obuhvatati različite aktivnosti kao što su prijem HTTP zahteva, slanje odgovora, čitanje podataka sa diska ili prijavljivanje korisnika. Sistem praćenja može obuhvatati profilisanje, logovanje, traganje, metriku, upozoravanje i vizualizaciju podataka.
Praćenje crne kutije nasuprot praćenju bele kutije
Praćenje se može podeliti u dve osnovne kategorije:
Praćenje crne kutije
Kod praćenja crne kutije, monitoring se obavlja na nivou aplikacije ili hosta, posmatrajući sistem spolja. Ovo može biti ograničavajuće zbog nedostatka uvida u unutrašnje procese.
Praćenje bele kutije
Praćenje bele kutije podrazumeva monitoring unutrašnjih komponenti servisa. Ovo omogućava uvid u podatke o statusu i performansama unutrašnjih delova sistema.
Četiri zlatna signala
Prema Google-u, ako imate ograničen izbor i možete meriti samo nekoliko metrika vašeg sistema usmerenog ka korisniku, fokusirajte se na sledeća četiri, poznata kao Četiri zlatna signala:
#1. Latencija
Vreme potrebno da se obradi zahtev, bilo da je uspešan ili neuspešan. Ključno je pratiti latenciju, ne samo za uspešne zahteve, već i za one koji nisu uspeli.
#2. Saobraćaj
Mera opterećenja vašeg sistema. Za web servise, to je često broj HTTP zahteva u sekundi.
#3. Greške
Stopa neuspešnih zahteva.
#4. Zasićenje
Pokazatelj koliko je vaš servis opterećen. Povećanje latencije je čest znak da sistem dostiže zasićenje. Mnogi sistemi mogu pokazati pad performansi i pre nego što dostignu punu iskorišćenost (100%).
Prometejevi tipovi metrike
Prometej koristi četiri glavna tipa metrike:
#1. Brojač (Counter)
Vrednost brojača se uvek povećava. Ne može se smanjiti, ali se može resetovati na nulu. Ako skrejp ne uspe, to znači samo propuštenu tačku podataka. Kumulativno povećanje će biti dostupno prilikom sledećeg čitanja. Primeri su:
- Ukupan broj primljenih HTTP zahteva
- Broj zabeleženih izuzetaka.
#2. Merač (Gauge)
Merač prikazuje trenutnu vrednost u datom trenutku. Vrednost može rasti ili padati. Ako preuzimanje podataka ne uspe, gubite uzorak, a sledeće preuzimanje može prikazati drugačiju vrednost. Primeri su: slobodan prostor na disku ili iskorišćenost memorije.
#3. Histogram
Histogram uzorkuje i broji merenja u predefinisanim segmentima. Koristi se za praćenje trajanja zahteva ili veličine odgovora. Na primer, možete pratiti trajanje zahteva za određeni HTTP zahtev. Histogram će imati definisane segmente, recimo 1 ms, 10 ms i 25 ms. Umesto da čuva svako pojedinačno trajanje, Prometej čuva broj zahteva koji spadaju u određeni segment.
#4. Rezime (Summary)
Slično histogramu, rezime prati uzorke posmatranja, obično trajanje ili veličine odgovora. On pruža ukupan broj posmatranja i sumu svih posmatranih vrednosti, omogućavajući vam da izračunate prosek posmatranih vrednosti. Na primer, ako ste u jednom minutu imali tri zahteva koji su trajali 2, 3 i 4 sekunde, zbir bi bio 9, a broj zahteva 3. Prosečno kašnjenje bi bilo 3 sekunde.
Komponente Prometejevog ekosistema
Prometej server
Prikuplja metrike, skladišti ih i omogućava upite, šalje upozorenja na osnovu prikupljenih podataka.
Skrejpovanje (Scraping)
Prometej koristi pristup zasnovan na „povlačenju“ podataka. Da bi dobio metrike, Prometej šalje HTTP zahtev, koji se naziva skrejpovanje, ka ciljevima definisanim u konfiguraciji.
Svaki cilj, bilo da je statički definisan ili dinamički otkriven, skrejpovan je u redovnim intervalima. Svaki skrejp čita `/metrics` HTTP krajnju tačku da bi dobio trenutno stanje metrike klijenta i čuva vrednosti u Prometejevoj bazi podataka vremenskih serija.
Postoji nekoliko baza podataka vremenskih serija koje možete razmotriti za praćenje sistema.
Klijentske biblioteke
Za praćenje servisa, neophodno je dodati instrumentaciju vašem kodu. Dostupne su klijentske biblioteke za sve popularne jezike i okruženja. Korišćenjem ovih biblioteka, dodavanjem nekoliko linija koda, vaš kod može početi da emituje metrike. Ovo se naziva direktna instrumentacija. Ove biblioteke vam omogućavaju da definišete interne metrike i da ih izložite preko HTTP krajnje tačke. Kada Prometej povuče HTTP krajnju tačku metrike, klijentska biblioteka šalje metrike serveru.
Zvanične klijentske biblioteke Prometej nudi za Go, Java, Python i Ruby. Prometej ima otvoren ekosistem, pa su dostupne i klijentske biblioteke iz zajednice za C, PHP, Node.js, C#/.NET i mnoge druge.
Izvoznici (Exporters)
Mnoge aplikacije izlažu metrike u formatu koji nije kompatibilan sa Prometejem. Za takve aplikacije, kao i za aplikacije čiji kod nemate ili kojima nemate pristup, ne možete direktno dodati instrumentaciju. Neki primeri su MySQL, Kafka, JMX, HAProxy i NGINX server. U ovim situacijama koristite izvoznike.
Izvoznik je alatka koju pokrećete pored aplikacije čije metrike želite da pratite. On deluje kao posrednik između aplikacije i Prometeja. Prima zahteve od Prometej servera, prikuplja podatke iz pristupnih logova ili logova grešaka aplikacije, transformiše ih u odgovarajući format i vraća ih Prometej serveru.
Neki od popularnih izvoznika su:
- Windows – za metrike Windows servera
- Čvor – za metrike Linux servera
- Crna kutija – za DNS i metrike performansi web stranica
- JMX – za metrike aplikacija baziranih na Javi
Kada su aplikacije instrumentirane, ili kada su izvoznici postavljeni, morate obavestiti Prometeja gde se nalaze. Ovo se može postići putem statičke konfiguracije. U dinamičkim okruženjima, ovo nije izvodljivo, pa se koristi otkrivanje servisa.
Upozoravanje (Alerting)
Upozoravanje sa Prometejem se sastoji iz dva dela:
Pravila za upozoravanje šalju upozorenja ka Alertmanageru.
Alertmanager zatim upravlja tim upozorenjima. Šalje obaveštenja putem različitih integracija, kao što su email, Slack, Hipchat i PagerDuty. Takođe, može izvršiti utišavanje ili agregaciju kako bi se smanjio broj obaveštenja.
Evo vodiča za nadgledanje Linux servera koristeći Prometej i kontrolnu tablu.
Vizualizacija pomoću kontrolne table
Prometej ima brojne API-je pomoću kojih PromQL upiti mogu generisati sirove podatke za vizualizaciju.
Iako Prometej uključuje pretraživač izraza koji se može koristiti za ad-hoc upite, najbolja dostupna alatka za vizualizaciju je Grafana. Grafana se u potpunosti integriše sa Prometejem i može generisati širok spektar kontrolnih tabli.
Potrebno je da konfigurišete Prometej kao izvor podataka za Grafanu.
Možete dodati kontrolne table na sledeće načine:
- Uvoz kontrolnih tabli kreiranih od strane zajednice
- Izrada sopstvenih kontrolnih tabli
- Korišćenje unapred definisanih kontrolnih tabli.
Ovo je primer kako izgleda unapred definisana kontrolna tabla izvoznika čvorova:
Grafana ima worldPing modul koji vam omogućava da pratite metrike performansi sajta i DNS-a globalno.
Rezime
Prometej ima minimalne zahteve. Jednostavan je za pokretanje jer je to samo jedna binarna datoteka sa konfiguracionom datotekom. Može da obradi hiljade ciljeva i prikupi milione uzoraka u sekundi. Prometej je dizajniran za praćenje celokupnog sistema, njegovog zdravlja i ponašanja.
Grafana je najbolja alatka za vizualizaciju metrika i neprimetno se integriše sa Prometejem.