Monitoring i logovanje kažu vam da nešto nije u redu dok još ima vremena da se popravi, a zatim pokažu koji zahtjev, upit ili server je u pitanju. Bez toga spor checkout ili pun disk postaju poruka korisnika, a jedini alat za dijagnozu ostaje prijava na mašinu koja možda više ne odgovara. Uz to, grafikon se pomjeri, alert se oglasi, a log tog zahtjeva je jedna pretraga daleko.
Sadržaj
U CodeWizu postavljamo Prometheus i Grafanu za metrike, ELK stack ili Grafana Loki za logove, OpenTelemetry kada zahtjev prelazi više servisa, i alerte koji stižu do osobe koja može da reaguje. Isti posao pokriva Laravel, Node.js, WordPress, redove, baze podataka i servere ispod njih. Dobijate dashboarde, pravilo čuvanja koje neće napuniti disk, i kratak spisak alerta koji nešto znače.
Ovo je za timove koji za prekide saznaju od korisnika, prodavnice koje ne mogu razlikovati timeout payment gatewaya od problema u bazi, i firme čiji logovi leže kao fajlovi na jednom serveru. Ako je posljednji incident počeo rečenicom „sajt je nekako spor” i završio tako što je neko preko SSH-a čitao log, rupa je u monitoringu, a ne u još jednom prepisivanju.
Kod teme logovanje alati otvorenog koda su prvi izbor kada odgovaraju poslu.
Prometheus i Grafana za metrike
Prometheus skuplja numeričke vremenske serije tako što po rasporedu povlači HTTP endpointove. Grafana je mjesto na kojem te serije postaju grafikoni, a Alertmanager mjesto na kojem upit postaje poruka. Zajedno odgovaraju na pitanja koja postavljate tokom incidenta: da li raste udio grešaka, da li raste latencija, da li je disk pun, da li red raste, da li se deploy poklopio sa promjenom?
Logovanje kreće od sistema koji već radi, a ne od praznog šablona.
Šta stavljamo na dashboard
- Stopa, greške, trajanje za svaki HTTP servis: zahtjevi u sekundi, udio odgovora 5xx, i latencija na 50. i 95. percentilu.
- Zasićenje mašine i baze: CPU, memorija, disk, poolovi konekcija, Redis memorija, dubina reda.
- Oznaka deploya, tako da loša objava bude vidljiva kao uspravna linija, a ne kao nagađanje.
- Odvojeni dashboardi za platformu i za svaku aplikaciju, građeni iz istih metrika kako se ne bi međusobno opovrgavali.
Aplikacije izlažu endpoint /metrics. Zvanične klijentske biblioteke postoje za PHP, Node.js, Python i Go; za Nginx, PostgreSQL, MySQL, Redis i node exportere koristimo postojeće exportere umjesto da izmišljamo metrike. Prometheusov pregled Prometheus modela referenca je za scraping, labele i PromQL. Grafana dokumentacija pokriva dashboarde i alerte ako alarme kasnije prebacite u samu Grafanu.
Rad na temi logovanje ostaje u vašem repozitoriju i na vašoj infrastrukturi.
groups:
- name: app
rules:
- alert: HighErrorRate
expr: |
sum(rate(http_requests_total{status=~"5.."}[5m]))
/ sum(rate(http_requests_total[5m])) > 0.05
for: 10m
labels:
severity: page
annotations:
summary: Error rate above 5 percent for 10 minutesKlauzula for je namjerna. Skočak od jedne minute ne treba nikoga buditi. Deset minuta iznad stvarnog praga treba. Kardinalnost labela držimo pod kontrolom: ruta i status pripadaju metrici, a korisnički id ili sirovi URL ne, jer je svaka jedinstvena labela nova serija koju Prometheus mora čuvati.
CodeWiz provjerava logovanje u produkciji, ne samo na demonstraciji.

Postavljanje ELK stacka za centralizovane logove
Metrike kažu da su greške porasle. Logovi kažu koja narudžba, koji izuzetak i koji deploy. Postavljanje ELK stacka znači Elasticsearch za skladište i pretragu, shipper kao što su Filebeat, Fluent Bit ili Vector, i Kibanu za sučelje. Gdje tim želi ostati na potpuno open-source distribuciji, OpenSearch i OpenSearch Dashboards preuzimaju istu ulogu. Logstash stoji u sredini samo kada događaje prije skladištenja treba ozbiljno transformisati.
Odluke o temi logovanje vežu se za ograničenje koje stvarno koči poslovanje.
Kako logovi ostaju korisni i podnošljivi
- Aplikacije pišu JSON na stdout, sa vremenom, nivoom, imenom servisa i id-jem zahtjeva. Web server, aplikacija i worker dijele taj id, pa jedna pretraga rekonstruiše zahtjev.
- Tajne, session kolačići, brojevi kartica i lozinke se ne loguju. Sakrivamo ih u aplikaciji i još jednom u shipperu.
- Čuvanje je odluka, a ne podrazumijevana vrijednost. Pristupni logovi koje niko ne čita poslije sedmice ne ostaju godinu. Sigurnosno važni logovi prijave ostaju duže od debug logova.
- Politike životnog ciklusa indeksa rotiraju indekse i brišu ih. Disk za logove koji se napuni često i sam sruši sajt koji ste htjeli nadgledati.
Za mnoge sajtove iskrena preporuka je Grafana Loki, a ne Elasticsearch. Loki indeksira labele, ne svaku riječ, i živi pored Grafane koju već imate. Na Elasticsearch ili OpenSearch prelazimo kada zaista pretražujete tijelo poruke: podrška traži id narudžbe, revizijski trag, velika količina nestrukturiranih aplikacionih logova. Stack slijedi pitanje, a ne dijagram koji ponavljamo svima.
Predaja teme logovanje uključuje uputstvo koje tim može koristiti.
Monitoring aplikacije koji prati zahtjev
Monitoring aplikacije je sloj iznad metrika hosta. Server može mirovati dok je checkout pokvaren, jer se vrijeme troši u eksternom API-ju, na zaključavanju ili u jednom SQL upitu. Pratimo putanje koda od kojih zavisi prihod i zavisnosti koje te putanje zovu.
- Laravel i PHP: trajanje zahtjeva, spori upiti, čekanje u redu, neuspjeli poslovi i zasićenje PHP-FPM poola. WordPress dobija isti tretman, plus greške na nivou plugina i cron.
- Node.js: kašnjenje event loopa, trajanje HTTP-a, neuhvaćena odbijanja i zdravlje pozadinskih workera.
- Skladišta podataka: konekcije, kašnjenje replikacije, omjer pogotka u kešu i upiti koji dominiraju vremenom baze.
- Traceovi: kada zahtjev prelazi API, red i drugi servis, OpenTelemetry bilježi spanove. Collector ih šalje u Grafana Tempo ili Jaeger, a isti id zahtjeva vezuje trace za liniju loga.
OpenTelemetry je način da se ovo uradi bez vezivanja za jednog dobavljača. Jedan SDK u aplikaciji, jedan collector na mreži, i backend možete promijeniti bez ponovnog pisanja instrumentacije. Projekat model opisuje u tekstu Šta je OpenTelemetry?. Dodajemo ga kada je na putu više od jednog servisa. Jedan WordPress sajt ne treba distribuirano praćenje da bi bio dobro nadgledan.
Kako biramo stack za monitoring i logovanje
Korisno poređenje ide po pitanju na koje svaki signal odgovara, a ne po tome koji je logo trenutno popularan.
| Signal | Pitanje na koje odgovara | Odakle krećemo | Kada mijenjamo alat |
|---|---|---|---|
| Metrike | Da li je sada sporije, punije ili u kvaru? | Prometheus i Grafana | Upravljani Prometheus ako ne želite da održavate bazu |
| Logovi | Šta je ovaj zahtjev zapravo uradio? | Grafana Loki | Elasticsearch ili OpenSearch kada morate pretraživati tekst poruke |
| Traceovi | Koji skok u lancu je bio spor? | Tempo ili Jaeger preko OpenTelemetryja | Preskačemo dok na putu nije više od jednog servisa |
| Dostupnost | Može li korisnik otvoriti sajt spolja? | Mala provjera na drugoj mreži | Druga regija kada provjera ne smije pasti zajedno sa aplikacijom |
Rubni signali pripadaju istom zidu. Cloudflare firewall događaji, omjer pogotka u kešu i greške origina objašnjavaju klasu problema koja se nikada ne vidi u metrikama aplikacije. O toj konfiguraciji pisali smo u tekstu Cloudflare konfiguracija za performanse. Brzina frontenda je srodan dashboard, a ne zamjena: rad iza rezultata 100/100 za vitalne pokazatelje stranice objašnjava kako stranice postaju brze, a ove metrike kako primijetite kada prestanu biti brze.

Alert sistemi koji stižu do prave osobe
Alert sistem koji svima javlja sve nauči tim da ga ignoriše. Alertiramo na simptome koje bi korisnik primijetio: udio grešaka, latenciju, neuspio checkout, nedostupnu početnu stranicu. CPU, memorija i disk su alert samo kada će izazvati jedan od tih simptoma, ili kada im treba čovjek prije sljedećeg radnog dana. Svaki alert vodi na kratku bilješku šta znači i šta prvo provjeriti.
| Ozbiljnost | Značenje | Kuda ide |
|---|---|---|
| Page | Korisnici su pogođeni sada | Osoba dežurna, odmah |
| Tiket | Čovjek treba da pogleda danas | Red, a ne telefon usred noći |
| Info | Korisno na dashboardu | Nikuda. Grafikon je dovoljan |
- Alertmanager grupiše povezana okidanja i utišava poznati prozor održavanja, tako da deploy ne pozove pet puta.
- Rute idu na email, chat ili telefon prema ozbiljnosti. Kanal se dogovara sa ljudima koji će ga čitati.
- Brišemo alerte koji nisu povukli nikakvu radnju. Pravilo kojem niko ne vjeruje gore je od pravila koje nedostaje, jer sakriva sljedeće pravo.
Provjere dostupnosti izvan vaše mreže
Prometheus na istom serveru kao aplikacija ne može vam reći da su nestali server, mreža ili DNS. Spoljna provjera, sa druge mreže, traži početnu stranicu, health URL i certifikat, i javlja kada je odgovor pogrešan ili kasni. Ta provjera je mala i treba da ostane mala. Objavili smo kako joj pristupamo u tekstu self-hosted monitor dostupnosti: open-source Node.js provjera koju možete pokrenuti sami kada je hostovana status stranica više nego što vam treba.
Spoljna provjera dostupnosti ne zamjenjuje metrike i logove. Odgovara na jedno pitanje, „može li neko sa strane otvoriti sajt?”, i nastavlja da odgovara onog dana kada je ostatak stacka upravo ono što je palo. Istek certifikata i neuspjeli TLS handshake pripadaju istoj provjeri, jer posjetiocu oba izgledaju kao nedostupnost.
Monitoring i logovanje: greške koje ispravljamo
- Desetine alerta prvog dana, i utišan kanal do kraja mjeseca.
- Logovi koji postoje samo na serveru koji je upravo postao nedostupan.
- Korisnički id, email ili puni URL kao Prometheus labela, dok baza ne padne od kardinalnosti.
- Disk za monitoring dijeli volumen sa aplikacijom, pa bučan log sruši sajt.
- Dashboardi bez alerta, ili alerti bez dashboarda koji se otvara poslije.
- Lozinke, tokeni i podaci kartice upisani u pristupne logove „privremeno”.
- Nema pravila čuvanja, dok Elasticsearch ili Loki ne napune disk.
Od čega zavisi trošak
Procjenu dajemo nakon uvida u saobraćaj, količinu logova i broj servisa. Cifru pomjera nekoliko predvidivih faktora:
- Količina logova i rok čuvanja, što dominira diskom i, na hostovanom stacku, računom.
- Kardinalnost metrika: pažljiv skup labela ostaje jeftin, nemaran ne ostaje.
- Self-hosted Prometheus, Loki i Grafana na malom VPS-u naspram upravljanog dobavljača.
- Da li su traceovi u obimu, i koliko ih uzorkujete.
- Koliko aplikacija, redova i baza treba dashboard i alert.
- Primopredaja sa runbookom, ili stalni aranžman u kojem exportere, pravila i čuvanje držimo ažurnim.
Kako radimo
- Slušanje: nabrajemo kvarove koji zaista bole, sate u kojima možete reagovati, i logove i metrike koje već imate.
- Dizajn: biramo metrike, logove, traceove i spoljnu provjeru, plus čuvanje i kuda alerti treba da idu.
- Instrumentacija: exporteri, metrike aplikacije, strukturirani logovi i, gdje se isplati, OpenTelemetry.
- Alerti: kratak skup pravila na simptome, svako sa bilješkom šta uraditi, provjeren tako što ga namjerno okinemo.
- Dokaz: prolazimo uvježban kvar, od alerta do linije loga, dok vaš tim gleda.
- Primopredaja: dashboardi, pravila i runbook. Stack možemo i dalje krpiti, a pravila držati iskrenim.
Zašto CodeWiz
- Gradimo aplikacije koje nadgledamo: Laravel, Node.js, WordPress i redovi oko njih, pa metrike odgovaraju stvarnim načinima kvara.
- Open-source na prvom mjestu: Prometheus, Grafana, Loki, OpenTelemetry i self-hosted provjera dostupnosti prije hostovanog paketa koji vam možda ne treba.
- Mjereno prema sajtu: jedna prodavnica ne dobija platformu za tracing. Flota servisa ne dobija jedan grafikon CPU-a.
- Fer cijene: vrhunski razvoj bez vrhunskih cijena, iz Banje Luke, uz rad na daljinu sa klijentima iz regiona i svijeta.
- Ostatak stacka u istim rukama: performanse, Cloudflare i serveri ispod. Više na stranici o CodeWizu.
Često postavljana pitanja
Koliko košta monitoring i logovanje?
Mali VPS sa Prometheusom, Grafanom i Lokijem dovoljan je za mnoge sajtove i košta mnogo manje od vremena potrošenog na slijepo traženje greške. Hostovani Elasticsearch i dugo čuvanje ono su što povećava račun. Dimenzionišemo nakon uvida u saobraćaj i količinu logova, i kažemo ako je manje rješenje bolje.
Da li nam treba ELK stack?
Samo ako trebate pretraživati tekst logova. Za metrike, Prometheus i Grafana bolji su početak. Za logove umjerenog obima, Loki pored Grafane obično je dovoljan. Elasticsearch ili OpenSearch zaslužuju mjesto kada podrška cijeli dan traži id narudžbe i tekst izuzetka.
Hoće li ovo usporiti aplikaciju?
Endpoint za metrike i JSON logovi na stdout jeftini su na običnom web zahtjevu. Trošak se vidi u kardinalnosti i u količini logova, što namjerno ograničavamo. Tracing se uzorkuje tako da ne bilježi svaki zahtjev na prometnom API-ju.
Koliko traje postavljanje?
Metrike hosta, nekoliko metrika aplikacije, centralizovani logovi i par alerta za jednu aplikaciju često su na mjestu u roku od nekoliko sedmica. Više servisa, tracing i pažljiv pregled alerta traju duže, uglavnom zato što je odluka šta zaslužuje poziv pravi posao.
Možete li nadgledati WordPress ili WooCommerce sajt?
Možemo. Dostupnost, PHP greške, PHP-FPM, MySQL, disk, istek certifikata i put checkouta. Ne treba vam vlastita biblioteka metrika u svakom pluginu da bi to bilo korisno.
Šta treba da probudi nekoga?
To što je sajt nedostupan, udio grešaka ili latencija koju korisnici osjete, i neuspjelo plaćanje ili checkout. Disk koji će biti pun sutra može sačekati jutro. Tu razliku zapišemo sa vama prije nego što bilo koje pravilo krene u rad.
Spremni da probleme vidite prije korisnika?
Recite nam šta je puklo posljednji put i kako ste saznali. Kontaktirajte nas i predložićemo monitoring koji odgovara sajtu, ili pogledajte naše usluge monitoringa i logovanja.