{"id":52115,"date":"2019-11-01T00:00:00","date_gmt":"2019-10-31T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury"},"modified":"2020-02-18T13:59:47","modified_gmt":"2020-02-18T10:59:47","slug":"monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","status":"publish","type":"post","link":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","title":{"rendered":"Nadzor kao usluga: modularni sustav za mikroservisnu arhitekturu","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Danas na na\u0161em projektu, osim monolitnog koda, funkcioni\u0161e desetine mikroservisa. Svaki od njih zahteva da se prati. Raditi to u takvim obimima je problemati\u010dno za DevOps in\u017eenjere. Razvili smo sistem pra\u0107enja koji funkcioni\u0161e kao usluga za programere. Oni mogu samostalno pisati metrike u sistem pra\u0107enja, koristiti ih, graditi na osnovu njih nadzorne table, povezivati alarme koji \u0107e se aktivirati kada dostignu prag vrednosti. Od DevOps in\u017eenjera \u2013 samo infrastruktura i dokumentacija. <\/p>\n<p>Ova objava je transkript mog izlaganja sa na\u0161e <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/tomicro\">sekcije<\/a><\/noindex> na RIT++. Mnogi su tra\u017eili da napravimo tekstualne verzije predavanja s tog skupa. Ako ste bili na konferenciji ili gledali video, ne\u0107ete prona\u0107i ni\u0161ta novo. A svi ostali \u2013 dobrodo\u0161li ispod. Pri\u010da\u0107u vam kako smo do\u0161li do takvog sistema, kako on funkcioni\u0161e i kako planiramo da ga a\u017euriramo. <\/p>\n<p><img decoding=\"async\" alt=\"Nadzor kao usluga: modularni sustav za mikroservisnu arhitekturu\" src=\"\/wp-content\/uploads\/2019\/11\/000b8fdc8fb16aa76ce545ff2aa4e767.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h3>Pro\u0161lost: sheme i planovi <\/h3>\n<p>\nKako smo do\u0161li do postoje\u0107eg sistema pra\u0107enja? Da bismo odgovorili na ovo pitanje, treba da se vratimo u 2015. godinu. Ovako je to izgledalo tada: <\/p>\n<p><img decoding=\"async\" alt=\"Nadzor kao usluga: modularni sustav za mikroservisnu arhitekturu\" src=\"\/wp-content\/uploads\/2019\/11\/d955f9bcdb5f5a5a54720c77113ca85d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nImali smo oko 24 \u010dvora koji su bili odgovorni za pra\u0107enje. Ovdje postoji ceo niz razli\u010ditih cronova, skripti, demona koji ne\u0161to negde na neki na\u010din prate, \u0161alju poruke, obavljaju funkcije. Pomislili smo da \u0107e takav sistem postati sve manje odr\u017eiv. Nema smisla razvijati ga: previ\u0161e je nespretno. <br \/>\nOdlu\u010dili smo da izaberemo one elemente pra\u0107enja koje \u0107emo zadr\u017eati i razviti, i one od kojih \u0107emo odustati. Ispostavilo se da ih je 19. Ostali su samo grafiti, agregatori i Grafana kao nadzorna tabla. Kako \u0107e izgledati novi sistem? Ovako: <\/p>\n<p><img decoding=\"async\" alt=\"Nadzor kao usluga: modularni sustav za mikroservisnu arhitekturu\" src=\"\/wp-content\/uploads\/2019\/11\/57d220113d0b76c05874b5d774bff8af.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nImamo skladi\u0161te metrika: to su grafiti koji \u0107e biti zasnovani na brzim SSD diskovima, to su odre\u0111eni agregatori za metrike. Zatim \u2013 Grafana za prikazivanje nadzornih tabli i Moira kao sistem za alarme. Tako\u0111e, planirali smo da razvijemo sistem za pretra\u017eivanje anomalija. <\/p>\n<h3>Standard: Pra\u0107enje 2.0<\/h3>\n<p>\nOvako su izgledali planovi u 2015. Sada smo morali da pripremimo ne samo infrastrukturu i samu uslugu, ve\u0107 i dokumentaciju za nju. Razvili smo korporativni standard koji smo nazvali pra\u0107enje 2.0. Koji su zahtevi postavljeni pred sistem? <\/p>\n<ul>\n<li>stalna dostupnost; <\/li>\n<li>interval \u010duvanja metrika = 10 sekundi; <\/li>\n<li>struktura pohrane metrika i nadzornih plo\u010da; <\/li>\n<li>SLA &gt; 99,99% <\/li>\n<li>prikupljanje doga\u0111ajnih metrika putem UDP (!). <\/li>\n<\/ul>\n<p>\nTrebali smo UDP jer imamo veliki protok prometa i doga\u0111aja koji generiraju metrike. Ako bismo ih sve odjednom zapisivali u Graphite, pohrana bi sru\u0161ila. Tako\u0111er smo odabrali prefikse prvog nivoa za sve metrike. <\/p>\n<p><img decoding=\"async\" alt=\"Nadzor kao usluga: modularni sustav za mikroservisnu arhitekturu\" src=\"\/wp-content\/uploads\/2019\/11\/d24c4474b19b532a48cef4d4376287ad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSvaki od prefiksa nosi odre\u0111enu karakteristiku. Tu su metrike za poslu\u017eitelje, mre\u017ee, kontejnere, resurse, aplikacije i tako dalje. Implementirana je jasna, stroga, tipizirana filtracija, gdje prihva\u0107amo metrike prvog nivoa, a ostale jednostavno odbacujemo. Tako smo planirali ovaj sustav 2015. godine. A \u0161to je sa sada\u0161njo\u0161\u0107u? <\/p>\n<h3>Sada\u0161njost: shema interakcije komponenti nadzora<\/h3>\n<p>\nPrvo, nadziremo aplikacije: na\u0161 PHP kod, aplikacije i mikroservise \u2014 ukratko, sve \u0161to na\u0161i programeri razvijaju. Sve aplikacije kroz UDP \u0161alju metrike u agregator Brubeck (statsd, prepravljen na C). Pokazao se kao najbr\u017ei prema rezultatima sinteti\u010dkih testova. On ve\u0107 agregirane metrike \u0161alje u Graphite putem TCP-a. <\/p>\n<p>Ima takav tip metrika kao \u0161to su tajmeri. To je vrlo korisna stvar. Na primjer, za svaku povezanost korisnika sa servisom \u0161aljete u Brubeck metriku s vremenom odgovora. Stiglo je milion odgovora, a agregator je izdao samo 10 metrika. Imate broj pristiglih ljudi, maksimalno, minimalno i srednje vrijeme odziva, medijana i 4 percentila. Zatim se podaci \u0161alju u Graphite i vidimo ih u\u017eivo. <\/p>\n<p>Tako\u0111er imamo agregaciju metrika za hardver, softver, sistemske metrike i na\u0161u staru monitoring sistem Munin (koji je radio kod nas do 2015. godine). Sve to prikupljamo putem C-ovog demona CollectD (koji ima ugra\u0111en niz razli\u010ditih dodataka, mo\u017ee ispitivati sve resurse host sistema na kojem je instaliran, jednostavno navedite u konfiguraciji gdje se podaci \u0161alju) i zapisujemo podatke u Graphite. Tako\u0111er podr\u017eava python i shell skripte, tako da mo\u017eete pisati svoja prilago\u0111ena rje\u0161enja: CollectD \u0107e prikupljati te podatke s lokalnog ili udaljenog hosta (pretpostavimo da imamo Curl) i slati ih u Graphite. <\/p>\n<p>Dalje, sve metrike koje smo skupili \u0161aljemo u Carbon-c-relay. Ovo je re\u0161enje Carbon Relay od Graphite, unapre\u0111eno na C. To je ruter koji prikuplja sve metrike koje \u0161aljemo sa na\u0161ih agregatora i usmerava ih po nodovima. Tako\u0111e, u fazi usmeravanja proverava valjanost metrika. One, pre svega, moraju biti u skladu sa shemom prefiksa koju sam ranije pokazao i, drugo, moraju biti validne za Graphite. U suprotnom, bi\u0107e odbijene. <\/p>\n<p>Nakon toga, Carbon-c-relay \u0161alje metrike u Graphite klaster. Kao glavno skladi\u0161te metrika koristimo Carbon-cache, prepisan na Go. Go-carbon, zbog svoje vi\u0161edretvenosti, znatno nadma\u0161uje performanse Carbon-cache-a. Prihvata podatke i zapisuje ih na diskove pomo\u0107u whisper paketa (standardni, napisan na Pythonu). Da bismo pro\u010ditali podatke iz na\u0161ih skladi\u0161ta, koristimo Graphite API. On radi mnogo br\u017ee od standardnog Graphite WEB. \u0160ta se de\u0161ava sa podacima dalje? <\/p>\n<p>Oni idu u Grafanu. Kao glavni izvor podataka koristimo na\u0161e Graphite klastere, plus imamo Grafanu kao web interfejs za prikazivanje metrika i izradu kontrolnih tabli. Svaki svoj servis programeri postavljaju svoj kontrolni tablu. Zatim kreiraju grafikone na kojima su prikazane metrike koje pi\u0161u iz svojih aplikacija. Pored Grafane, imamo jo\u0161 SLAM. To je Python demon koji izra\u010dunava SLA na osnovu podataka iz Graphite-a. Kao \u0161to sam ve\u0107 spomenuo, imamo nekoliko desetina mikros servisa, od kojih svaki ima svoje zahteve. Pomo\u0107u SLAM-a upore\u0111ujemo dokumentaciju sa onim \u0161to imamo u Graphite-u i proveravamo koliko zahtevi odgovaraju dostupnosti na\u0161ih servisa. <\/p>\n<p>Idemo dalje: aleriranje. Ono je organizovano putem sna\u017enog sistema - Moira. Ona je nezavisna jer ima svoj vlastiti Graphite. Razvijena od strane momaka iz SKB 'Kontur', napisana na Python-u i Go, potpuno je open source. Moira prima sav taj isti tok koji ide u Graphite. Ako iz nekog razloga umre va\u0161e skladi\u0161te, va\u0161e aleriranje \u0107e i dalje raditi.<\/p>\n<p>Moira je razmje\u0161tena u Kubernetesu, a kao glavna baza podataka koristi klaster Redis poslu\u017eitelja. Kao rezultat, nastao je otporan sustav. Ona uspore\u0111uje tok metrika sa popisom okida\u010da: ako u njemu nema spominjanja, tada odbacuje metrik. Na taj na\u010din mo\u017ee obraditi gigabajte metrika u minuti. <\/p>\n<p>Tako\u0111er smo joj pridru\u017eili korporativni LDAP, pomo\u0107u kojeg svaki korisnik korporativnog sustava mo\u017ee kreirati obavijesti za postoje\u0107e (ili novo kreirane) okida\u010de. Kako Moira sadr\u017ei Graphite, podr\u017eava sve njegove funkcije. Stoga najprije uzmete redak i kopirate ga u Grafanu. Pogledate kako se podaci prikazuju na grafikonima. A zatim uzmete isti redak i kopirate ga u Moiru. Povezujete ga s limitima i na izlazu dobivate obavijesti. Da biste sve to radili, ne trebate nikakva specifi\u010dna znanja. Moira mo\u017ee slati obavijesti putem SMS-a, e-po\u0161te, u Jira, Slack\u2026 Tako\u0111er podr\u017eava izvr\u0161avanje prilago\u0111enih skripti. Kada se dogodi okida\u010d, a ona je prijavljena na prilago\u0111enu skriptu ili binarni program, ona ga pokre\u0107e i \u0161alje JSON na stdin tom binarnom programu. \u0160to \u0107ete s tim JSON-om raditi \u2014 odlu\u010dite sami. \u017delite \u2014 \u0161aljite u Telegram, \u017eelite \u2014 otvarajte zadatke u Jiri, radite \u0161to god \u017eelite. <\/p>\n<p>Za obavijesti koristimo jo\u0161 i vlastiti razvoj \u2014 Imagotag. Prilagodili smo panel koji se obi\u010dno koristi za elektroni\u010dke cijene u trgovinama, za na\u0161e zadatke. Iz Moire smo iznijeli okida\u010de. Tamo je nazna\u010deno u kojem su stanju i kada su se dogodili. Dio \u010dlanova razvojnog tima odustao je od obavijesti u Slacku i e-po\u0161ti u korist ove panel. <\/p>\n<p><img decoding=\"async\" alt=\"Nadzor kao usluga: modularni sustav za mikroservisnu arhitekturu\" src=\"\/wp-content\/uploads\/2019\/11\/bcf454c96adaa0cff81f5e56db5b715c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBudu\u0107i da smo progresivna tvrtka, nadzirali smo u ovom sustavu i Kubernetes. Uklju\u010dili smo ga u sustav putem Heapstera, kojeg smo instalirali u klaster, koji prikuplja podatke i \u0161alje ih u Graphite. Na kraju, shema izgleda ovako: <\/p>\n<p><img decoding=\"async\" alt=\"Nadzor kao usluga: modularni sustav za mikroservisnu arhitekturu\" src=\"\/wp-content\/uploads\/2019\/11\/cca0f2f9f590fc84609d48e52ebd0d21.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Komponente nadzora<\/h3>\n<p>Evo popisa poveznica na komponente koje smo koristili za ovaj zadatak. Sve su otvorenog koda. <\/p>\n<h4>Graphite:<\/h4>\n<p><\/p>\n<ul>\n<li>go-carbon: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/lomik\/go-carbon\">github.com\/lomik\/go-carbon<\/a><\/noindex><\/li>\n<li>whisper: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/graphite-project\/whisper\">github.com\/graphite-project\/whisper<\/a><\/noindex> <\/li>\n<li>graphite-api: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/brutasse\/graphite-api\">github.com\/brutasse\/graphite-api<\/a><\/noindex> <\/li>\n<\/ul>\n<h4>Carbon-c-relay: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/grobian\/carbon-c-relay\">github.com\/grobian\/carbon-c-relay<\/a><\/noindex> <\/p>\n<h4>Brubeck: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/github\/brubeck\">github.com\/github\/brubeck<\/a><\/noindex> <\/p>\n<h4>Collectd:<\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/collectd.org\/\">collectd.org<\/a><\/noindex><\/p>\n<h4>Moira: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/moira-alert\">github.com\/moira-alert<\/a><\/noindex> <\/p>\n<h4>Grafana: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/grafana.com\/\">grafana.com<\/a><\/noindex> <\/p>\n<h4>Heapster: <\/h4>\n<p>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/heapster\">github.com\/kubernetes\/heapster<\/a><\/noindex><\/p>\n<h3>Statistika<\/h3>\n<p>\nEvo nekoliko podataka o tome kako na\u0161 sustav radi. <\/p>\n<h4>Aggregator (brubeck)<\/h4>\n<p>\nBroj metrike: ~ 300 000 \/ sek<br \/>\nInterval slanja metrike u Graphite: 30 sek<br \/>\nKori\u0161tenje resursa poslu\u017eitelja: ~ 6% CPU (govorimo o punopravnim poslu\u017eiteljima); ~ 1Gb RAM; ~ 3 Mbps LAN<\/p>\n<h4>Graphite (go-carbon)<\/h4>\n<p>\nBroj metrike: ~ 1 600 000 \/ min<br \/>\nInterval a\u017euriranja metrike: 30 sek<br \/>\nShema pohrane metrike: 30 sek 35d, 5min 90d, 10min 365d (daje uvid u to \u0161to se doga\u0111a sa servisom na du\u017ee vrijeme) <br \/>\nKori\u0161tenje resursa poslu\u017eitelja: ~ 10% CPU; ~ 20Gb RAM; ~ 30 Mbps LAN<\/p>\n<h3>Fleksibilnost<\/h3>\n<p>\nU Avitu jako cijenimo fleksibilnost u na\u0161em sustavu nadzora. Za\u0161to je to tako? Prvo, njegovi dijelovi su me\u0111usobno zamjenjivi: i sami komponenti, i njihove verzije. Drugo \u2014 odr\u017eivost. Budu\u0107i da je cijeli projekt izgra\u0111en na otvorenom kodu, mo\u017eete sami ure\u0111ivati kod, unositi promjene, implementirati funkcije koje nisu dostupne van kutije. Koriste se dovoljno uobi\u010dajeni stekovi, uglavnom, Go i Python, tako da to ide prili\u010dno lako. <\/p>\n<p>Evo primjera stvarnog problema. Metrika u Graphiteu je datoteka. Ima svoje ime. Ime datoteke = ime metrike. I postoji put do nje. Imena datoteka u Linuxu su ograni\u010dena na 255 znakova. A imamo (kao 'unutarnje naru\u010ditelje') ekipu iz odjela za baze podataka. Oni nam ka\u017eu: '\u017delimo pratiti na\u0161e SQL upite. A to nisu 255 znakova, ve\u0107 8 MB svaki. \u017delimo ih prikazivati u Grafani, vidjeti parametre za taj upit, a jo\u0161 bolje, \u017eelimo vidjeti top takvih upita. Bilo bi sjajno ako bi se prikazivao u stvarnom vremenu. A bilo bi sjajno kad bi ih mogli ubaciti u upozorenja.' <\/p>\n<p><img decoding=\"async\" alt=\"Nadzor kao usluga: modularni sustav za mikroservisnu arhitekturu\" src=\"\/wp-content\/uploads\/2019\/11\/e1136c7fd0b6156c0c3fd49bab54737e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Primjer SQL upita uzet je kao primjer s <noindex><a rel=\"nofollow\" href=\"https:\/\/postgrespro.ru\/docs\/postgrespro\/9.6\/queries-with\">web stranice postgrespro.ru<\/a><\/noindex> <\/i><\/p>\n<p>Podi\u017eemo Redis server i na\u0161im Collectd dodacima, koji idu u Postgres i uzimaju sve podatke, \u0161aljemo metrike u Graphite. Ali zamjenjujemo ime metrike sa he\u0161ima. Taj isti he\u0161 \u0161aljemo u Redis kao klju\u010d, a cijeli SQL upit kao vrijednost. Ostalo nam je da omogu\u0107imo Grafani da mo\u017ee pristupiti Redis-u i uzeti te informacije. Otvoramo Graphite API, jer je to glavno su\u010delje za interakciju svih komponenti monitoringa s Graphite-om, i dodajemo novu funkciju koja se zove aliasByHash() \u2014 od Grafane dobijamo ime metrike, a koristimo ga u upitu prema Redis-u kao klju\u010d, a kao odgovor dobijamo vrijednost klju\u010da, \u0161to je na\u0161 \"SQL upit\". Na taj na\u010din, u Grafani prikazujemo SQL upit, koji je, u teoriji, bilo nemogu\u0107e prikazati, zajedno sa statistikama (calls, rows, total_time, ...). <\/p>\n<h3>Zaklju\u010dci <\/h3>\n<p>\n<b>Dostupnost.<\/b> Na\u0161a usluga monitoringa dostupna je 24\/7 iz bilo koje aplikacije i bilo kojeg koda. Ako imate pristup skladi\u0161tima, mo\u017eete slati podatke u servis. Jezik nije bitan, rje\u0161enja nisu bitna. Sve \u0161to trebate je znati kako otvoriti socket, poslati metriku i zatvoriti socket. <\/p>\n<p><b>Pouzdanost.<\/b> Sve komponente su otporne na gre\u0161ke i dobro se nose s na\u0161im optere\u0107enjima. <\/p>\n<p><b>Nizak ulazni prag.<\/b> Da biste koristili ovaj sustav, ne trebate u\u010diti programske jezike ili upite u Grafani. Jednostavno otvorite svoju aplikaciju, upi\u0161ete socket koji \u0107e slati metrike u Graphite, zatvorite ga, otvorite Grafanu, kreirate nadzorne plo\u010de i promatrate pona\u0161anje svojih metrike, dobivaju\u0107i obavijesti putem Moira.<\/p>\n<p><b>Samostalnost.<\/b> Sve to mo\u017eete raditi sami, bez pomo\u0107i DevOps in\u017eenjera. I to je overkill, jer mo\u017eete pratiti svoj projekt odmah, ne trebate nikoga pitati \u2014 ni za po\u010detak rada, ni za promjene. <\/p>\n<h3>\u010cemu te\u017eimo? <\/h3>\n<p>\nSve navedeno dolje nije samo apstraktna razmi\u0161ljanja, ve\u0107 su to ciljevi prema kojima smo napravili barem prve korake. <\/p>\n<ol>\n<li>Detektor anomalija. \u017delimo razviti uslugu koja \u0107e odlaziti u na\u0161e Graphite spremnike i provjeravati svaku metriku prema razli\u010ditim algoritmima. Ve\u0107 imamo algoritme koje \u017eelimo pregledavati, imamo podatke i znamo s njima raditi.\n<\/li>\n<li>Metapodaci. Imamo mnogo usluga koje se s vremenom mijenjaju, kao i ljudi koji s njima rade. Stalno vo\u0111enje dokumentacije ru\u010dno nije opcija. Zbog toga se sada u na\u0161e mikroslu\u017ebe ugra\u0111uju metapodaci. Tu je navedeno tko ih je razvio, jezike s kojima sura\u0111uje, zahtjeve za SLA, kamo i kome slati obavijesti. Prilikom implementacije usluge svi podaci entiteta se stvaraju automatski. Na kraju dobivate dvije veze \u2014 jedna za okida\u010de, druga za nadzorne plo\u010de u Grafani.\n<\/li>\n<li>Pra\u0107enje u svaku ku\u0107u. Smatramo da bi ovakav sustav trebali koristiti svi programeri. U tom slu\u010daju uvijek znate gdje je va\u0161 promet, \u0161to se s njim doga\u0111a, gdje pada, gdje su mu slabe to\u010dke. Ako, recimo, do\u0111e ne\u0161to i sru\u0161i va\u0161u uslugu, saznat \u0107ete za to ne tijekom poziva od menad\u017eera, ve\u0107 od upozorenja, i odmah \u0107ete mo\u0107i otvoriti svje\u017ee logove i pogledati \u0161to se dogodilo.\n<\/li>\n<li>Visoka izvedba. Na\u0161 projekt konstantno raste, i danas obra\u0111uje oko 2.000.000 vrijednosti metrike u minuti. Prije godine taj je pokazatelj iznosio 500.000. A rast se nastavlja, \u0161to zna\u010di da \u0107e uskoro Graphite (whisper) sna\u017eno opteretiti diskovni sustav. Kao \u0161to sam ve\u0107 spomenuo, ovaj sustav pra\u0107enja je prili\u010dno univerzalan zbog zamjenjivosti komponenti. Netko posebno odr\u017eava infrastrukturu za Graphite i neprekidno je pro\u0161iruje, ali mi smo odlu\u010dili krenuti drugim putem: koristiti <noindex><a rel=\"nofollow\" href=\"https:\/\/clickhouse.yandex\/\">ClickHouse<\/a><\/noindex> kao skladi\u0161te na\u0161ih metrika. Ova promjena je gotovo zavr\u0161ena, i uskoro \u0107u detaljnije objasniti kako je to izvedeno: s kojim smo se te\u0161ko\u0107ama suo\u010dili i kako su one prevladane, kako je tekao proces migracije, opisa\u0107u odabrane komponente za povezivanje i njihove konfiguracije. \n<\/li>\n<\/ol>\n<p>\nHvala na pozornosti! Slobodno postavite svoja pitanja po temi, nastojat \u0107u odgovoriti ovdje ili u sljede\u0107im objavama. Mogu\u0107e je da netko ima iskustva u izgradnji sli\u010dnog sustava pra\u0107enja ili prelasku na Clickhouse u sli\u010dnim situacijama \u2014 podijelite to u komentarima.<br \/>\n<br \/>Izvor: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/avito\/blog\/335410\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0438, \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0430 \u0438\u0445 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b, \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u0442\u044c \u043a \u043d\u0438\u043c \u0430\u043b\u0435\u0440\u0442\u044b, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-52115","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.4 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.4\" \/>\n\t\t<meta property=\"og:locale\" content=\"hr_HR\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441: \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T10:59:47+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Pra\u0107enje kao usluga: modularni sustav za mikroservisnu arhitekturu | ProHoster","description":"Danas na na\u0161em projektu, osim monolitnog koda, funkcionira nekoliko desetina mikroslu\u017ebi. Svaka od njih zahtijeva pra\u0107enje. Raditi to u takvim koli\u010dinama s DevOps in\u017eenjerima predstavlja problem.","canonical_url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"hr_HR","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u0430\u043a \u0441\u0435\u0440\u0432\u0438\u0441: \u043c\u043e\u0434\u0443\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0434\u043b\u044f \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b | ProHoster","og:description":"\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043d\u0430 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u043c\u043e\u043d\u043e\u043b\u0438\u0442\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043b\u0438. \u0414\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0432 \u0442\u0430\u043a\u0438\u0445 \u043e\u0431\u044a\u0435\u043c\u0430\u0445 \u0441\u0438\u043b\u0430\u043c\u0438 DevOps-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e.","og:url":"https:\/\/prohoster.info\/hr\/blog\/administrirovanie\/monitoring-kak-servis-modulnaya-sistema-dlya-mikroservisnoj-arhitektury","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T21:00:00+00:00","article:modified_time":"2020-02-18T10:59:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"52115","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-24 02:30:22","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 20:49:49","updated":"2026-01-24 02:30:22","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/52115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/comments?post=52115"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/posts\/52115\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/media?parent=52115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/categories?post=52115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/hr\/wp-json\/wp\/v2\/tags?post=52115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}