{"id":31864,"date":"2019-10-31T21:43:33","date_gmt":"2019-10-31T18:43:33","guid":{"rendered":"https:\/\/prohoster.info\/blog\/monitoring-myortv-da-zdravstvuet-monitoring\/"},"modified":"2019-10-31T21:43:33","modified_gmt":"2019-10-31T18:43:33","slug":"monitoring-myortv-da-zdravstvuet-monitoring","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/monitoring-myortv-da-zdravstvuet-monitoring","title":{"rendered":"Monitoring martwy? \u2014 Niech \u017cyje monitoring","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Monitoring martwy? \u2014 Niech \u017cyje monitoring\" src=\"\/wp-content\/uploads\/2019\/04\/13453bb7025a6bf3d1c7a3dc6d038d16.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNasza firma od 2008 roku zajmuje si\u0119 g\u0142\u00f3wnie zarz\u0105dzaniem infrastruktur\u0105 oraz ca\u0142odobowym wsparciem technicznym projekt\u00f3w internetowych: mamy ponad 400 klient\u00f3w, co stanowi oko\u0142o 15% handlu elektronicznego w Rosji. Odpowiednio, wsparcie wi\u0105\u017ce si\u0119 z bardzo zr\u00f3\u017cnicowan\u0105 architektur\u0105. Je\u015bli co\u015b si\u0119 psuje, mamy obowi\u0105zek naprawi\u0107 to w ci\u0105gu 15 minut. Ale \u017ceby zrozumie\u0107, \u017ce wyst\u0105pi\u0142a awaria, nale\u017cy monitorowa\u0107 projekt i reagowa\u0107 na incydenty. Jak to zrobi\u0107? <\/p>\n<p>Uwa\u017cam, \u017ce w organizacji odpowiedniego systemu monitorowania wyst\u0119puje problem. Gdyby problem nie istnia\u0142, moja wypowied\u017a sk\u0142ada\u0142aby si\u0119 z jednego os\u0105dzenia: \u201eProsz\u0119 zainstalowa\u0107 Prometheus + Grafana oraz wtyczki 1, 2, 3\u201d. Niestety, teraz tak to nie dzia\u0142a. G\u0142\u00f3wny problem polega na tym, \u017ce wszyscy wci\u0105\u017c wierz\u0105 w co\u015b, co istnia\u0142o w 2008 roku, pod wzgl\u0119dem komponent\u00f3w oprogramowania. <\/p>\n<p>Je\u015bli chodzi o organizacj\u0119 systemu monitorowania, odwa\u017c\u0119 si\u0119 powiedzie\u0107, \u017ce\u2026 projekty z sensownym monitorowaniem nie istniej\u0105. Sytuacja jest na tyle z\u0142a, \u017ce je\u015bli co\u015b upadnie, istnieje ryzyko, \u017ce pozostanie niezauwa\u017cone - wszyscy s\u0105 pewni, \u017ce \u201ewszystko jest monitorowane\u201d.<br \/>\nBy\u0107 mo\u017ce wszystko jest monitorowane. Ale jak? <\/p>\n<p>Wszyscy spotkali\u015bmy si\u0119 z histori\u0105 podobn\u0105 do nast\u0119puj\u0105cej: pracuje jaki\u015b devops, jaki\u015b administrator, przychodzi do nich zesp\u00f3\u0142 programist\u00f3w i m\u00f3wi - \u201ezrobili\u015bmy wydanie, teraz przeprowad\u017a monitoring\u201d. Co monitorowa\u0107? Jak to dzia\u0142a?<\/p>\n<p>Dobrze. Monitorujemy w stary spos\u00f3b. A to ju\u017c si\u0119 zmienia, i okazuje si\u0119, \u017ce monitorowa\u0142e\u015b serwis A, kt\u00f3ry sta\u0142 si\u0119 serwisem B, kt\u00f3ry wsp\u00f3\u0142dzia\u0142a z serwisem C. Ale zesp\u00f3\u0142 programist\u00f3w m\u00f3wi ci: \u201eZainstaluj oprogramowanie, ono wszystko powinno monitorowa\u0107!\u201d<\/p>\n<p>Co si\u0119 wi\u0119c zmieni\u0142o? - Wszystko si\u0119 zmieni\u0142o!<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h4>Rok 2008. Wszystko w porz\u0105dku.<\/h4>\n<p>\nJest kilku programist\u00f3w, jeden serwer, jeden serwer bazy danych. St\u0105d wszystko si\u0119 zaczyna. Mamy jakie\u015b informacje, instalujemy Zabbix, Nagios, Cacti. A nast\u0119pnie ustawiamy jasne alerty na CPU, na dzia\u0142anie dysk\u00f3w, na miejsce na dyskach. Wykonujemy r\u00f3wnie\u017c kilka r\u0119cznych kontroli, aby sprawdzi\u0107, czy strona odpowiada, czy zam\u00f3wienia trafiaj\u0105 do bazy. I to wszystko - jeste\u015bmy mniej wi\u0119cej chronieni. <\/p>\n<p>Por\u00f3wnuj\u0105c obj\u0119to\u015b\u0107 pracy, kt\u00f3r\u0105 w\u00f3wczas wykonywa\u0142 administrator, aby zapewni\u0107 monitoring, to w 98% by\u0142a automatyczna: osoba zajmuj\u0105ca si\u0119 monitoringiem musi zrozumie\u0107, jak zainstalowa\u0107 Zabbix, jak go skonfigurowa\u0107 i ustawi\u0107 alerty. A 2% \u2014 na zewn\u0119trzne kontrole: czy strona odpowiada i wykonuje zapytania do bazy, czy przysz\u0142y nowe zam\u00f3wienia.<\/p>\n<p><img decoding=\"async\" alt=\"Monitoring martwy? \u2014 Niech \u017cyje monitoring\" src=\"\/wp-content\/uploads\/2019\/04\/3563dda4d025fd18200d6410d7d065ed.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h4>Rok 2010. Obci\u0105\u017cenie ro\u015bnie<\/h4>\n<p>\nZaczynamy skalowa\u0107 systemy webowe, dodajemy silnik wyszukiwania. Chcemy mie\u0107 pewno\u015b\u0107, \u017ce katalog produkt\u00f3w zawiera wszystkie produkty. I \u017ce wyszukiwanie produkt\u00f3w dzia\u0142a. \u017be baza dzia\u0142a, \u017ce zam\u00f3wienia s\u0105 sk\u0142adane, \u017ce strona odpowiada zewn\u0119trznie i odpytuje z dw\u00f3ch <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pl\/server\/\"   title=\"serwer\u00f3w\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1314\">serwer\u00f3w<\/a> i u\u017cytkownika nie wyrzuca ze strony, podczas gdy jest prze\u0142adowywana na inny serwer, itd. Obiekt\u00f3w przybywa. <\/p>\n<p>Co wi\u0119cej, obiekt zwi\u0105zany z infrastruktur\u0105 wci\u0105\u017c pozostaje najwi\u0119kszy w g\u0142owie mened\u017cera. Wci\u0105\u017c w umy\u015ble tkwi idea, \u017ce osoba zajmuj\u0105ca si\u0119 monitoringiem \u2014 to kto\u015b, kto zainstaluje Zabbix i b\u0119dzie w stanie go skonfigurowa\u0107.<\/p>\n<p>Jednak pojawiaj\u0105 si\u0119 prace zwi\u0105zane z przeprowadzaniem zewn\u0119trznych kontroli, tworzeniem zestawu skrypt\u00f3w zapyta\u0144 dla indeksatora wyszukiwania, zestawu skrypt\u00f3w do weryfikacji, \u017ce wyszukiwanie zmienia si\u0119 w procesie indeksacji, zestawu skrypt\u00f3w, kt\u00f3re sprawdzaj\u0105, \u017ce produkty s\u0105 przekazywane do us\u0142ugi dostawy, itd.<\/p>\n<p><img decoding=\"async\" alt=\"Monitoring martwy? \u2014 Niech \u017cyje monitoring\" src=\"\/wp-content\/uploads\/2019\/04\/afa94a3156a24a81ab359b430341f27d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZauwa\u017ccie: trzy razy napisa\u0142em \u201ezestaw skrypt\u00f3w\u201d. To znaczy, \u017ce odpowiedzialny za monitoring \u2014 to ju\u017c nie ten, kto tylko instaluje Zabbix. To osoba, kt\u00f3ra zaczyna programowa\u0107. Ale w g\u0142owach zespo\u0142u na razie nic si\u0119 nie zmienia. <\/p>\n<p>Ale zmienia si\u0119 \u015bwiat, staj\u0105c si\u0119 coraz bardziej skomplikowany. Pojawia si\u0119 warstwa wirtualizacji, kilka nowych system\u00f3w. Zaczynaj\u0105 one ze sob\u0105 wsp\u00f3\u0142dzia\u0142a\u0107. Kto powiedzia\u0142 \u201epachnie mikroserwisami?\u201d Ale ka\u017cda us\u0142uga wci\u0105\u017c wygl\u0105da jak osobna strona. Mo\u017cemy si\u0119 do niej zwr\u00f3ci\u0107 i zrozumie\u0107, \u017ce dostarcza niezb\u0119dne informacje i sama w sobie dzia\u0142a. A je\u015bli jeste\u015b administratorem, kt\u00f3ry nieprzerwanie zajmuje si\u0119 projektem rozwijaj\u0105cym si\u0119 przez 5-7-10 lat, te wiedze si\u0119 kumuluj\u0105: pojawia si\u0119 nowy poziom \u2014 ty go dostrzegasz, pojawia si\u0119 kolejny poziom \u2014 ty go dostrzegasz... <\/p>\n<p><img decoding=\"async\" alt=\"Monitoring martwy? \u2014 Niech \u017cyje monitoring\" src=\"\/wp-content\/uploads\/2019\/04\/3578182594d012732afde7849b75322a.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nJednak rzadko kto towarzyszy projektowi przez 10 lat.<\/p>\n<h3>Podsumowanie monitoringu<\/h3>\n<p>\nZa\u0142\u00f3\u017cmy, \u017ce do\u0142\u0105czy\u0142e\u015b do nowego startupu, kt\u00f3ry od razu zatrudni\u0142 20 programist\u00f3w, napisa\u0142 15 mikroserwis\u00f3w, a ty jeste\u015b administratorem, kt\u00f3remu m\u00f3wi\u0105: \u201eZr\u00f3b CI\/CD. Prosz\u0119\u0119\u0119\u201d. Zbudowa\u0142e\u015b CI\/CD i nagle s\u0142yszysz: \u201eTrudno nam pracowa\u0107 z produkcj\u0105 w \u201akube\u2019, nie rozumiej\u0105c, jak w nim dzia\u0142a aplikacja. Zr\u00f3b nam piaskownic\u0119 w tym samym \u201akube\u2019.\u201d<br \/>\n Robisz piaskownic\u0119 w tym kube. Od razu m\u00f3wi\u0105 ci: \u201eChcemy stage bazy danych, kt\u00f3ra codziennie aktualizuje si\u0119 z produkcji, aby zrozumie\u0107, \u017ce to dzia\u0142a na bazie danych, ale przy tym nie zepsu\u0107 bazy danych produkcji\u201d.<\/p>\n<p>\u017byjesz w tym wszystkim. Zosta\u0142y 2 tygodnie do wydania, a oni m\u00f3wi\u0105: \u201eTeraz chcieliby\u015bmy to wszystko zamonitorowa\u0107\u2026\u201d Tzn. monitorowa\u0107 infrastruktur\u0119 klastrow\u0105, monitorowa\u0107 architektur\u0119 mikroserwis\u00f3w, monitorowa\u0107 wsp\u00f3\u0142prac\u0119 z zewn\u0119trznymi us\u0142ugami\u2026 <\/p>\n<p>A koledzy wyci\u0105gaj\u0105 z pami\u0119ci znany schemat i m\u00f3wi\u0105: \u201eTo wszystko jest oczywiste! Wstaw program, kt\u00f3ry to wszystko zamonitoruje\u201d. Tak, tak: Prometheus + Grafana + wtyczki. <br \/>\nI dodaj\u0105 przy tym: \u201eMasz dwa tygodnie, zr\u00f3b to tak, aby wszystko by\u0142o niezawodne\u201d.<\/p>\n<p>W szeregu projekt\u00f3w, kt\u00f3re widzimy, na monitorowanie przypisuje si\u0119 jedn\u0105 osob\u0119. Wyobra\u017a sobie, \u017ce chcemy na 2 tygodnie zatrudni\u0107 osob\u0119, kt\u00f3ra zajmie si\u0119 monitorowaniem, i sk\u0142adamy dla niej CV. Jakie umiej\u0119tno\u015bci powinien mie\u0107 ta osoba \u2014 bior\u0105c pod uwag\u0119 wszystko, co powiedzieli\u015bmy wcze\u015bniej?<\/p>\n<ul>\n<li>Powinna rozumie\u0107 monitoring i specyfik\u0119 pracy infrastruktury sprz\u0119towej.<\/li>\n<li>Powinna rozumie\u0107 specyfik\u0119 monitorowania Kubernetes (wszyscy chc\u0105 w \u201akube\u2019, bo mo\u017cna si\u0119 abstrahowa\u0107 od wszystkiego, schowa\u0107, bo z reszt\u0105 poradzi sobie administrator) \u2014 jego samego, jego infrastruktury, oraz rozumie\u0107, jak monitorowa\u0107 aplikacje wewn\u0105trz.<\/li>\n<li>Powinna zrozumie\u0107, \u017ce us\u0142ugi komunikuj\u0105 si\u0119 mi\u0119dzy sob\u0105 w szczeg\u00f3lny spos\u00f3b i zna\u0107 specyfik\u0119 interakcji us\u0142ug. Ca\u0142kiem realne jest zobaczy\u0107 projekt, gdzie cz\u0119\u015b\u0107 us\u0142ug komunikuje si\u0119 synchronicznie, bo inaczej nie da si\u0119. Na przyk\u0142ad backend idzie przez REST, przez gRPC do us\u0142ugi katalogu, otrzymuje list\u0119 produkt\u00f3w i odsy\u0142a z powrotem. Tutaj nie mo\u017cna czeka\u0107. A z innymi us\u0142ugami dzia\u0142a asynchronicznie. Przekaza\u0107 zam\u00f3wienie do firmy kurierskiej, wys\u0142a\u0107 e-mail itp.<br \/>\nPewnie ju\u017c opu\u015bci\u0142e\u015b si\u0119 od ca\u0142ego tego zamieszania? A administrator, kt\u00f3remu trzeba to monitorowa\u0107, ma jeszcze wi\u0119kszy chaos. <\/li>\n<li>Musi umie\u0107 planowa\u0107 i robi\u0107 to w\u0142a\u015bciwie \u2014 poniewa\u017c pracy przybywa coraz wi\u0119cej. <\/li>\n<li>Musia\u0142by zatem opracowa\u0107 strategi\u0119 dla stworzonej us\u0142ugi, aby zrozumie\u0107, jak dok\u0142adnie to monitorowa\u0107. Potrzebna mu jest wiedza na temat architektury projektu oraz jego rozwoju, plus znajomo\u015b\u0107 technologii u\u017cywanych w tworzeniu. <\/li>\n<\/ul>\n<p>\nPrzypomnijmy sobie ca\u0142kowicie normalny przypadek: cz\u0119\u015b\u0107 us\u0142ug dzia\u0142a na PHP, cz\u0119\u015b\u0107 na Go, a cz\u0119\u015b\u0107 na JS. W jaki\u015b spos\u00f3b wsp\u00f3\u0142dzia\u0142aj\u0105 ze sob\u0105. St\u0105d wzi\u0119\u0142o si\u0119 okre\u015blenie \u201emikroserwis\u201d: oddzielnych system\u00f3w sta\u0142o si\u0119 tak du\u017co, \u017ce programi\u015bci nie mog\u0105 zrozumie\u0107 projektu w ca\u0142o\u015bci. Cz\u0119\u015b\u0107 zespo\u0142u pisze us\u0142ugi na JS, kt\u00f3re dzia\u0142aj\u0105 same w sobie i nie wiedz\u0105, jak dzia\u0142a reszta systemu. Inna cz\u0119\u015b\u0107 pisze us\u0142ugi na Pythonie i nie interesuje si\u0119 tym, jak dzia\u0142aj\u0105 inne us\u0142ugi, s\u0105 izolowane w swojej dziedzinie. Trzecia grupa \u2014 pisze us\u0142ugi na PHP lub czym\u015b innym. <br \/>\nWszystkie te 20 os\u00f3b jest podzielonych na 15 us\u0142ug i jest tylko jeden administrator, kt\u00f3ry musi to wszystko zrozumie\u0107. Stop! W\u0142a\u015bnie podzielili\u015bmy system na 15 mikroserwis\u00f3w, poniewa\u017c 20 os\u00f3b nie mo\u017ce zrozumie\u0107 ca\u0142ego systemu. <\/p>\n<p>Ale trzeba to w jaki\u015b spos\u00f3b monitorowa\u0107\u2026<\/p>\n<p>Co z tego wynika? W efekcie jest jedna osoba, kt\u00f3ra rozumie wszystko, czego nie mo\u017ce zrozumie\u0107 ca\u0142y zesp\u00f3\u0142 programist\u00f3w, i jednocze\u015bnie musi zna\u0107 i umie\u0107 to, co wskazali\u015bmy powy\u017cej \u2014 infrastruktur\u0119 sprz\u0119tow\u0105, infrastruktur\u0119 Kubernetes itd.<\/p>\n<p>Co tu powiedzie\u0107\u2026 Houston, mamy problem.<\/p>\n<h3>Monitorowanie nowoczesnego projektu programistycznego \u2014 to samodzielny projekt programistyczny.<\/h3>\n<p>\nZ fa\u0142szywym przekonaniem, \u017ce monitorowanie to oprogramowanie, pojawia si\u0119 wiara w cuda. A cud\u00f3w, niestety, nie ma. Nie mo\u017cna postawi\u0107 Zabbixa i czeka\u0107, a\u017c wszystko zacznie dzia\u0142a\u0107. Nie ma sensu stawia\u0107 Grafany i mie\u0107 nadziej\u0119, \u017ce wszystko b\u0119dzie w porz\u0105dku. Wi\u0119kszo\u015b\u0107 czasu po\u015bwi\u0119ci si\u0119 na organizacj\u0119 weryfikacji pracy us\u0142ug i ich interakcji mi\u0119dzy sob\u0105, sprawdzania, jak dzia\u0142aj\u0105 zewn\u0119trzne systemy. Faktycznie 90% czasu zajmie nie pisanie skrypt\u00f3w, a rozw\u00f3j oprogramowania. I powinna tym si\u0119 zajmowa\u0107 ekipa, kt\u00f3ra rozumie dzia\u0142anie projektu. <br \/>\nJe\u015bli w tej sytuacji jedn\u0105 osob\u0119 postawi\u0107 na monitorowanie, to dojdzie do katastrofy. Co dzieje si\u0119 wsz\u0119dzie.<\/p>\n<p>Na przyk\u0142ad istnieje kilka us\u0142ug, kt\u00f3re komunikuj\u0105 si\u0119 ze sob\u0105 za po\u015brednictwem Kafka. Przyszed\u0142 zam\u00f3wienie, wys\u0142ali\u015bmy wiadomo\u015b\u0107 o zam\u00f3wieniu do Kafka. Jest us\u0142uga, kt\u00f3ra nas\u0142uchuje informacji o zam\u00f3wieniu i zajmuje si\u0119 wysy\u0142k\u0105 towaru. Jest us\u0142uga, kt\u00f3ra nas\u0142uchuje informacji o zam\u00f3wieniu i wysy\u0142a wiadomo\u015b\u0107 do u\u017cytkownika. A potem pojawia si\u0119 jeszcze wiele innych us\u0142ug i zaczynamy si\u0119 gubi\u0107.<\/p>\n<p>A je\u015bli oddasz to administratorowi i programistom na etapie, gdy do wydania zostaje ma\u0142o czasu, osoba musi zrozumie\u0107 ca\u0142y ten protok\u00f3\u0142. Tzn. projekt podobnej skali zajmuje du\u017co czasu, i w rozwijaniu systemu powinno to by\u0107 uwzgl\u0119dnione. <br \/>\nCz\u0119sto jednak, szczeg\u00f3lnie w startupach, widzimy, jak monitorowanie odk\u0142adaj\u0105 na p\u00f3\u017aniej. \"Teraz zrobimy Proof of Concept, uruchomimy go, niech pada - jeste\u015bmy gotowi na po\u015bwi\u0119cenia. A potem wszystko to b\u0119dziemy monitorowa\u0107\". Kiedy (lub je\u015bli) projekt zaczyna przynosi\u0107 pieni\u0105dze, biznes chce rozwija\u0107 jeszcze wi\u0119cej funkcji \u2014 bo zacz\u0119\u0142o dzia\u0142a\u0107, wi\u0119c trzeba jeszcze wi\u0119cej doda\u0107! A ty jeste\u015b w punkcie, w kt\u00f3rym na pocz\u0105tku musisz zamonitowa\u0107 wszystko, co zajmuje wi\u0119cej ni\u017c 1% czasu, a znacznie wi\u0119cej. I tak, do monitorowania b\u0119d\u0105 potrzebni programi\u015bci, a ich \u0142atwiej wys\u0142a\u0107 na nowe funkcje. W ko\u0144cu pisane s\u0105 nowe funkcje, wszystko si\u0119 rozwija, a ty jeste\u015b w niesko\u0144czonym martwym punkcie.<\/p>\n<p>Jak wi\u0119c zamonitowa\u0107 projekt, zaczynaj\u0105c od samego pocz\u0105tku, i co zrobi\u0107, je\u015bli masz projekt, kt\u00f3ry nale\u017cy zamonitowa\u0107, a nie wiesz, od czego zacz\u0105\u0107?<\/p>\n<p>Po pierwsze, trzeba planowa\u0107. <\/p>\n<p><i>Liryczne odej\u015bcie: bardzo cz\u0119sto zaczynaj\u0105 od monitorowania infrastruktury. Na przyk\u0142ad mamy Kubernetes. Zacznijmy od tego, \u017ce zainstalujemy Prometheusa z Grafan\u0105, zainstalujemy wtyczki do monitorowania \"kube\". Nie tylko programi\u015bci, ale tak\u017ce administratorzy maj\u0105 smutn\u0105 praktyk\u0119: \"Zainstalujemy t\u0119 wtyczk\u0119, a wtyczka chyba wie, jak to zrobi\u0107\". Ludzie lubi\u0105 zaczyna\u0107 od prostych i zrozumia\u0142ych rzeczy, a nie od wa\u017cnych dzia\u0142a\u0144. A monitorowanie infrastruktury to po prostu prosta rzecz.<\/i><\/p>\n<p>Na pocz\u0105tku zdecyduj, co i jak chcesz monitorowa\u0107, a potem dobierz narz\u0119dzie, poniewa\u017c inni ludzie nie mog\u0105 my\u015ble\u0107 za ciebie. I czy powinni? Inni my\u015bleli o sobie, o uniwersalnym systemie \u2013 albo w og\u00f3le nie my\u015bleli, kiedy ten plugin by\u0142 pisany. A to, \u017ce ten plugin ma 5 tysi\u0119cy u\u017cytkownik\u00f3w, nie oznacza, \u017ce przynosi jak\u0105kolwiek korzy\u015b\u0107. Mo\u017cliwe, \u017ce b\u0119dziesz 5001-ym tylko dlatego, \u017ce wcze\u015bniej by\u0142o tam ju\u017c 5000 os\u00f3b. <\/p>\n<p>Je\u015bli zacz\u0105\u0142e\u015b monitorowa\u0107 infrastruktur\u0119, a backend twojej aplikacji przesta\u0142 odpowiada\u0107, wszyscy u\u017cytkownicy strac\u0105 po\u0142\u0105czenie z aplikacj\u0105 mobiln\u0105. Pojawi si\u0119 b\u0142\u0105d. Przyjd\u0105 do ciebie i powiedz\u0105: \u201eAplikacja nie dzia\u0142a, co tutaj robicie?\u201d \u2013 \u201eMonitorujemy.\u201d \u2013 \u201eJak mo\u017cecie monitorowa\u0107, skoro nie widzicie, \u017ce aplikacja nie dzia\u0142a?!\" <\/p>\n<ol>\n<li>Uwa\u017cam, \u017ce monitorowanie nale\u017cy rozpocz\u0105\u0107 od punktu wej\u015bcia u\u017cytkownika. Je\u015bli u\u017cytkownik nie widzi, \u017ce aplikacja dzia\u0142a \u2013 jest po wszystkim, to pora\u017cka. System monitorowania powinien zosta\u0107 powiadomiony o tym w pierwszej kolejno\u015bci. <\/li>\n<li>Dopiero potem mo\u017cemy monitorowa\u0107 infrastruktur\u0119. Lub zrobi\u0107 to r\u00f3wnolegle. Z infrastruktur\u0105 jest \u0142atwiej \u2013 w ko\u0144cu mo\u017cemy po prostu zainstalowa\u0107 Zabbixa. <\/li>\n<li>I teraz musimy zajrze\u0107 do korzeni aplikacji, aby zrozumie\u0107, co nie dzia\u0142a.<\/li>\n<\/ol>\n<p>\nMoja g\u0142\u00f3wna my\u015bl to \u2013 monitorowanie powinno i\u015b\u0107 r\u00f3wnolegle z procesem rozwoju. Je\u015bli oderwiesz zesp\u00f3\u0142 monitoruj\u0105cy na inne zadania (tworzenie CI\/CD, \u015brodowisko testowe, reorganizacja infrastruktury), monitorowanie zacznie si\u0119 op\u00f3\u017ania\u0107 i by\u0107 mo\u017ce ju\u017c nigdy nie dogonisz rozwoju (lub wcze\u015bniej czy p\u00f3\u017aniej b\u0119dziesz musia\u0142 go zatrzyma\u0107).<\/p>\n<h3>Wszystko na poziomach<\/h3>\n<p>\nOto jak widz\u0119 organizacj\u0119 systemu monitorowania.<\/p>\n<p>1) Poziom aplikacji:<\/p>\n<ul>\n<li>monitorowanie logiki biznesowej aplikacji;<\/li>\n<li>monitorowanie metryk zdrowotnych us\u0142ug;<\/li>\n<li>monitorowanie integracyjne.<\/li>\n<\/ul>\n<p>\n2) Poziom infrastruktury:<\/p>\n<ul>\n<li>monitorowanie poziomu orkiestracji;<\/li>\n<li>monitorowanie oprogramowania systemowego;<\/li>\n<li>monitorowanie poziomu sprz\u0119tu.<\/li>\n<\/ul>\n<p>\n3) Znowu poziom aplikacji \u2014 ale ju\u017c jako produkt in\u017cynieryjny:<\/p>\n<ul>\n<li>zbieranie i obserwacja log\u00f3w aplikacji;<\/li>\n<li>APM;<\/li>\n<li>\u015bledzenie.<\/li>\n<\/ul>\n<p>\n4) Alerting:<\/p>\n<ul>\n<li>organizacja systemu powiadamiania;<\/li>\n<li>organizacja systemu dy\u017cur\u00f3w;<\/li>\n<li>organizacja \u201ebazy wiedzy\u201d i workflow obs\u0142ugi incydent\u00f3w.<\/li>\n<\/ul>\n<p>\n<b>Wa\u017cne<\/b>: docieramy do alertowania nie p\u00f3\u017aniej, ale od razu! Nie trzeba uruchamia\u0107 monitoringu i \u201ejako\u015b potem\u201d wymy\u015bla\u0107, komu b\u0119d\u0105 wysy\u0142ane alerty. W ko\u0144cu wykonanie monitoringu ma na celu zrozumienie, gdzie w systemie co\u015b dzia\u0142a nieprawid\u0142owo i poinformowanie o tym odpowiednich os\u00f3b. Je\u015bli zostawisz to na koniec, odpowiednie osoby dowiedz\u0105 si\u0119, \u017ce co\u015b jest nie tak, dopiero po telefonie \u201enic u nas nie dzia\u0142a\u201d.<\/p>\n<h3>Poziom aplikacji \u2014 monitoring logiki biznesowej<\/h3>\n<p>\nChodzi tutaj o sprawdzenie samego faktu, \u017ce aplikacja dzia\u0142a dla u\u017cytkownika.<\/p>\n<p>Ten poziom powinien by\u0107 realizowany na etapie rozwoju. Na przyk\u0142ad mamy hipotetycznego Prometheusa: podchodzi do serwera, kt\u00f3ry zajmuje si\u0119 sprawdzaniami, wywo\u0142uje endpoint, a ten sprawdza API.<\/p>\n<p>Kiedy cz\u0119sto prosz\u0105 o monitorowanie strony g\u0142\u00f3wnej, aby upewni\u0107 si\u0119, \u017ce strona dzia\u0142a, programi\u015bci daj\u0105 r\u0119k\u0119, kt\u00f3r\u0105 mo\u017cna wywo\u0142a\u0107 za ka\u017cdym razem, gdy trzeba upewni\u0107 si\u0119, \u017ce API dzia\u0142a. A programi\u015bci w tym momencie dodatkowo pisz\u0105 \/api\/test\/helloworld <br \/>\nJedyny spos\u00f3b, aby upewni\u0107 si\u0119, \u017ce wszystko dzia\u0142a? \u2014 Nie!<\/p>\n<ul>\n<li>Tworzenie takich test\u00f3w to w zasadzie zadanie programist\u00f3w. Testy jednostkowe powinny pisa\u0107 programi\u015bci, kt\u00f3rzy pisz\u0105 kod. Bo je\u015bli przeka\u017cesz to administratorowi \u201eKolego, oto lista protoko\u0142\u00f3w API wszystkich 25 funkcji, prosz\u0119, monitoruj wszystko!\u201d \u2014 nic z tego nie wyjdzie. <\/li>\n<li>Je\u015bli zrobisz print \u201chello world\u201d, nikt nigdy nie dowie si\u0119, \u017ce API powinno dzia\u0142a\u0107 i rzeczywi\u015bcie dzia\u0142a. Ka\u017cda zmiana w API powinna wi\u0105za\u0107 si\u0119 z odpowiedni\u0105 zmian\u0105 test\u00f3w. <\/li>\n<li>Je\u015bli ju\u017c masz taki problem \u2013 zatrzymaj funkcje i wyznacz programist\u00f3w, kt\u00f3rzy napisz\u0105 te testy, albo pog\u00f3d\u017a si\u0119 z stratami, zg\u00f3d\u017a si\u0119, \u017ce nic nie jest testowane i b\u0119dzie si\u0119 sypa\u0107.<\/li>\n<\/ul>\n<p>\nWskaz\u00f3wki techniczne:<\/p>\n<ul>\n<li>Obowi\u0105zkowo zorganizuj zewn\u0119trzny serwer do realizacji test\u00f3w \u2014 musisz by\u0107 pewny, \u017ce Tw\u00f3j projekt jest dost\u0119pny dla \u015bwiata zewn\u0119trznego.<\/li>\n<li>Zorganizuj testy dla ca\u0142ego protoko\u0142u API, a nie tylko dla poszczeg\u00f3lnych endpoint\u00f3w.<\/li>\n<li>Stw\u00f3rz endpoint prometheus z wynikami test\u00f3w.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Poziom aplikacji \u2014 monitoring metryk zdrowia<\/h3>\n<p>\nTeraz m\u00f3wimy o zewn\u0119trznych metrykach zdrowia us\u0142ug. <\/p>\n<p>Zdecydowali\u015bmy, \u017ce wszystkie \u201eendpointy\u201d aplikacji monitorujemy za pomoc\u0105 zewn\u0119trznych kontroli, kt\u00f3re wywo\u0142ujemy z zewn\u0119trznego systemu monitorowania. Ale to w\u0142a\u015bnie \u201eendpointy\u201d, kt\u00f3re \u201ewidzi\u201d u\u017cytkownik. Chcemy by\u0107 pewni, \u017ce nasze us\u0142ugi dzia\u0142aj\u0105. Tutaj historia jest lepsza: w K8s s\u0105 zdrowotne kontrole, aby przynajmniej sam \u201ekube\u201d upewni\u0142 si\u0119, \u017ce us\u0142uga dzia\u0142a. Ale po\u0142owa kontroli, kt\u00f3re widzia\u0142em, to ten sam print \u201ehello world\u201d. Tzn. wywo\u0142uje raz po wdro\u017ceniu, odpowiedzia\u0142, \u017ce wszystko w porz\u0105dku \u2014 i to wszystko. A us\u0142uga, je\u015bli obs\u0142uguje swoje API poprzez REST, ma ogromn\u0105 liczb\u0119 punkt\u00f3w wej\u015bcia tego samego API, kt\u00f3re r\u00f3wnie\u017c musimy monitorowa\u0107, poniewa\u017c chcemy wiedzie\u0107, \u017ce dzia\u0142a. Ju\u017c to monitorujemy wewn\u0105trz. <\/p>\n<p>Jak to w\u0142a\u015bciwie zrealizowa\u0107 technicznie: ka\u017cda us\u0142uga wystawia endpoint na temat swojej aktualnej sprawno\u015bci, a na wykresach Grafana (lub dowolnej innej aplikacji) widzimy status wszystkich us\u0142ug.<\/p>\n<ul>\n<li>Ka\u017cda zmiana API powinna prowadzi\u0107 do zmiany kontroli. <\/li>\n<li>Now\u0105 us\u0142ug\u0119 tw\u00f3rzcie od razu z metrykami zdrowia.<\/li>\n<li>Administrator mo\u017ce podej\u015b\u0107 do programist\u00f3w i poprosi\u0107: \u201enapiszcie mi kilka funkcji, abym wszystko rozumia\u0142 i doda\u0142 informacj\u0119 o tym do swojego systemu monitorowania\u201d. Ale programi\u015bci zazwyczaj odpowiadaj\u0105: \u201eNa dwa tygodnie przed wydaniem nic nie b\u0119dziemy dodawa\u0107.\u201d<br \/>\nNiech mened\u017cerowie projektu wiedz\u0105, \u017ce b\u0119d\u0105 takie straty, niech r\u00f3wnie\u017c kierownictwo mened\u017cer\u00f3w o tym wie. Poniewa\u017c, gdy wszystko upadnie, kto\u015b i tak zadzwoni i za\u017c\u0105da monitorowania \u201eci\u0105gle spadaj\u0105cej us\u0142ugi\u201d (c) <\/li>\n<li>Zreszt\u0105, wyznaczcie programist\u00f3w do pisania wtyczek dla Grafana \u2014 to b\u0119dzie dobra pomoc dla administrator\u00f3w.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Poziom aplikacji \u2014 Monitorowanie integracyjne<\/h3>\n<p>\nMonitorowanie integracyjne koncentruje si\u0119 na monitorowaniu komunikacji mi\u0119dzy krytycznymi systemami dla biznesu.<\/p>\n<p>Na przyk\u0142ad, jest 15 us\u0142ug, kt\u00f3re komunikuj\u0105 si\u0119 ze sob\u0105. To ju\u017c nie s\u0105 oddzielne witryny. Tzn. nie mo\u017cemy wywo\u0142a\u0107 us\u0142ugi samodzielnie, uzyska\u0107 \/helloworld i zrozumie\u0107, \u017ce us\u0142uga dzia\u0142a. Poniewa\u017c internetowa us\u0142uga sk\u0142adania zam\u00f3wie\u0144 musi wys\u0142a\u0107 informacje o zam\u00f3wieniu na szyn\u0119 \u2014 z szyny us\u0142uga zarz\u0105dzania magazynem musi otrzyma\u0107 t\u0119 wiadomo\u015b\u0107 i dalej z ni\u0105 pracowa\u0107. A us\u0142uga wysy\u0142ania e-maili musi to jako\u015b dalej obs\u0142u\u017cy\u0107, itd. <\/p>\n<p>W zwi\u0105zku z tym nie mo\u017cemy zrozumie\u0107, badaj\u0105c ka\u017cdy pojedynczy serwis, jak to wszystko dzia\u0142a. Poniewa\u017c mamy pewn\u0105 szyn\u0119, przez kt\u00f3r\u0105 wszystko si\u0119 komunikuj\u0119 i wsp\u00f3\u0142dzia\u0142a.<br \/>\nDlatego ten etap powinien oznacza\u0107 etap testowania serwis\u00f3w pod k\u0105tem wsp\u00f3\u0142pracy z innymi serwisami. Nie mo\u017cna, monitoruj\u0105c brokera wiadomo\u015bci, zorganizowa\u0107 monitoringu komunikacji. Je\u015bli jest serwis, kt\u00f3ry wydaje dane, oraz serwis, kt\u00f3ry je przyjmuje, monitoruj\u0105c brokera zobaczymy tylko dane, kt\u00f3re przelatuj\u0105 tam i z powrotem. Nawet je\u015bli jako\u015b uda nam si\u0119 zmierzy\u0107 interakcj\u0119 tych danych wewn\u0105trz \u2014 \u017ce jaki\u015b producent przesy\u0142a dane, kto\u015b je czyta, ten strumie\u0144 nadal p\u0142ynie do Kafki \u2014 to i tak nie da nam to informacji, je\u015bli jeden serwis wys\u0142a\u0142 wiadomo\u015b\u0107 w jednej wersji, a drugi serwis nie spodziewa\u0142 si\u0119 tej wersji i j\u0105 pomin\u0105\u0142. Nie dowiemy si\u0119 o tym, poniewa\u017c nasze serwisy powiedz\u0105, \u017ce wszystko dzia\u0142a. <\/p>\n<p>Jak polecam to zrobi\u0107:<\/p>\n<ul>\n<li>Dla synchronnej komunikacji: endpoint wykonuje zapytania do powi\u0105zanych serwis\u00f3w. Tzn. bierzemy ten endpoint, wywo\u0142ujemy skrypt wewn\u0105trz serwisu, kt\u00f3ry przeszukuje wszystkie punkty i m\u00f3wi: \u201emog\u0119 wywo\u0142a\u0107 st\u0105d, i stamt\u0105d, mog\u0119 wywo\u0142a\u0107 st\u0105d\u2026\"<\/li>\n<li>Dla asynchronicznej komunikacji: wiadomo\u015bci przychodz\u0105ce \u2013 endpoint sprawdza szyn\u0119 pod k\u0105tem obecno\u015bci testowych wiadomo\u015bci i wydaje status przetwarzania. <\/li>\n<li>Dla asynchronicznej komunikacji: wiadomo\u015bci wychodz\u0105ce \u2013 endpoint wysy\u0142a testowe wiadomo\u015bci na szyn\u0119.<\/li>\n<\/ul>\n<p>\nJak zazwyczaj to si\u0119 odbywa: mamy serwis, kt\u00f3ry rzuca dane na szyn\u0119. Przychodzimy do tego serwisu i prosimy go, aby opowiedzia\u0142 o swoim integracyjnym zdrowiu. I je\u015bli serwis powinien przes\u0142a\u0107 jak\u0105\u015b wiadomo\u015b\u0107 gdzie\u015b dalej (WebApp), to przesy\u0142a t\u0119 testow\u0105 wiadomo\u015b\u0107. A je\u015bli wywo\u0142ujemy serwis po stronie OrderProcessing, najpierw przesy\u0142a to, co mo\u017ce przes\u0142a\u0107 niezale\u017cnie, a je\u015bli s\u0105 jakie\u015b zale\u017cne rzeczy \u2014 to czyta z szyny zestaw testowych wiadomo\u015bci, rozumie, co mo\u017ce przetworzy\u0107, informuje o tym i, je\u015bli to konieczne, przesy\u0142a je dalej, m\u00f3wi\u0105c o tym \u2014 wszystko w porz\u0105dku, \u017cyj\u0119. <\/p>\n<p>Bardzo cz\u0119sto s\u0142yszymy pytanie \u201ejak mo\u017cemy to testowa\u0107 na danych produkcyjnych?\u201d Na przyk\u0142ad chodzi o t\u0119 sam\u0105 us\u0142ug\u0119 zam\u00f3wie\u0144. Zam\u00f3wienie wysy\u0142a wiadomo\u015bci do magazynu, gdzie s\u0105 odliczane towary: nie mo\u017cemy tego testowa\u0107 na danych produkcyjnych, poniewa\u017c \u201emoje towary b\u0119d\u0105 si\u0119 odlicza\u0107!\u201d Rozwi\u0105zanie: na etapie pocz\u0105tkowym zaplanujcie ten ca\u0142y test. Macie ju\u017c testy jednostkowe, kt\u00f3re robi\u0105 mocki. Zr\u00f3bcie to na g\u0142\u0119bszym poziomie, gdzie b\u0119dziecie mieli kana\u0142 komunikacji, kt\u00f3ry nie zaszkodzi dzia\u0142alno\u015bci biznesowej. <\/p>\n<h3>Poziom infrastruktury<\/h3>\n<p>\nMonitorowanie infrastruktury \u2013 to, co od dawna uwa\u017cane jest za samo monitorowanie. <\/p>\n<ul>\n<li>Monitorowanie infrastruktury mo\u017cna i trzeba uruchomi\u0107 jako osobny proces.<\/li>\n<li>Nie nale\u017cy zaczyna\u0107 od monitorowania infrastruktury w dzia\u0142aj\u0105cym projekcie, nawet je\u015bli bardzo tego chcecie. To bol\u0105czka wszystkich devops\u00f3w. \u201eNajpierw zamonituj\u0119 klaster, zamonituj\u0119 infrastruktur\u0119\u201d \u2013 to znaczy, \u017ce najpierw monitoruje to, co le\u017cy na dole, a do aplikacji nie si\u0119gnie. Poniewa\u017c aplikacja to niejasna sprawa dla devopsa. Zosta\u0142a mu przekazana, i nie rozumie, jak to dzia\u0142a. Natomiast infrastruktur\u0119 rozumie i zaczyna od niej. Ale nie \u2013 zawsze na pocz\u0105tku nale\u017cy monitorowa\u0107 aplikacj\u0119. <\/li>\n<li>Nie przesadzajcie z ilo\u015bci\u0105 powiadomie\u0144. Bior\u0105c pod uwag\u0119 z\u0142o\u017cono\u015b\u0107 nowoczesnych system\u00f3w, alerty przychodz\u0105 nieustannie, a z t\u0105 mas\u0105 alert\u00f3w trzeba jako\u015b \u017cy\u0107. A osoba on-call, patrz\u0105c na setki kolejnych alert\u00f3w, pomy\u015bli \u201enie chc\u0119 o tym my\u015ble\u0107\u201d. Alerty powinny informowa\u0107 tylko o krytycznych kwestiach. <\/li>\n<\/ul>\n<p><\/p>\n<h3>Poziom aplikacji jako jednostki biznesowej<\/h3>\n<p>\nKluczowe punkty:<\/p>\n<ul>\n<li>ELK. To standard przemys\u0142owy. Je\u015bli z jakiego\u015b powodu nie agregujecie log\u00f3w, jak najszybciej zacznijcie to robi\u0107.<\/li>\n<li>APM. Zewn\u0119trzne APM jako spos\u00f3b na szybkie zamkni\u0119cie monitorowania aplikacji (NewRelic, BlackFire, Datadog). Mo\u017cecie tymczasowo zainstalowa\u0107 to, aby cho\u0107 w jaki\u015b spos\u00f3b zrozumie\u0107, co si\u0119 u Was dzieje. <\/li>\n<li>Tracing. W dziesi\u0105tkach mikrous\u0142ug musicie wszystko \u015bledzi\u0107, poniewa\u017c zapytanie ju\u017c nie istnieje samo w sobie. Bardzo trudno jest doda\u0107 to p\u00f3\u017aniej, dlatego lepiej zaplanowa\u0107 tracing w procesie rozwoju \u2013 to praca i narz\u0119dzie dla programist\u00f3w. Je\u015bli jeszcze nie wdro\u017cyli\u015bcie \u2013 wdra\u017cajcie! Zobaczcie Jaeger\/Zipkin.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Alerting<\/h3>\n<p><\/p>\n<ul>\n<li>Organizacja systemu powiadomie\u0144: w warunkach monitorowania wielu rzeczy powinna istnie\u0107 jednolita system powiadomie\u0144. Mo\u017cna to zrobi\u0107 w Grafana. Na Zachodzie wszyscy u\u017cywaj\u0105 PagerDuty. Powiadomienia powinny by\u0107 jasne (na przyk\u0142ad, sk\u0105d pochodz\u0105\u2026). Dobrze by by\u0142o r\u00f3wnie\u017c kontrolowa\u0107, czy powiadomienia w og\u00f3le docieraj\u0105. <\/li>\n<li>Organizacja systemu dy\u017cur\u00f3w: alerty nie powinny przychodzi\u0107 do wszystkich (albo wszyscy b\u0119d\u0105 w t\u0142umie reagowa\u0107, albo nikt nie zareaguje). Oncall powinien by\u0107 r\u00f3wnie\u017c dla programist\u00f3w: koniecznie okre\u015blcie obszary odpowiedzialno\u015bci, stw\u00f3rzcie jasn\u0105 instrukcj\u0119 i zapiszcie w niej, do kogo konkretnie dzwoni\u0107 w poniedzia\u0142ek i \u015brod\u0119, a do kogo \u2014 we wtorek i pi\u0105tek (w przeciwnym razie nikt nie zadzwoni nawet w przypadku powa\u017cnych problem\u00f3w \u2014 b\u0119d\u0105 si\u0119 ba\u0107 obudzi\u0107 innych, bo ludzie generalnie nie lubi\u0105 dzwoni\u0107 i budzi\u0107 innych, zw\u0142aszcza w nocy). Wyja\u015bnijcie, \u017ce proszenie o pomoc nie jest oznak\u0105 niekompetencji (\u201eprosz\u0119 o pomoc \u2014 wi\u0119c jestem z\u0142ym pracownikiem\u201d), zach\u0119cajcie do pro\u015bby o pomoc.<\/li>\n<li>Organizacja \u201ebazy wiedzy\u201d i workflow przetwarzania incydent\u00f3w: dla ka\u017cdego powa\u017cnego incydentu powinien by\u0107 zaplanowany postmortem, jako tymczasowy \u015brodek powinny by\u0107 zapisane dzia\u0142ania, kt\u00f3re rozwi\u0105\u017c\u0105 incydent. Wprowad\u017acie praktyk\u0119, \u017ce powtarzaj\u0105ce si\u0119 alerty to grzech; nale\u017cy je naprawi\u0107 w kodzie lub pracach infrastrukturalnych. <\/li>\n<\/ul>\n<p><\/p>\n<h3>Stos technologiczny<\/h3>\n<p>\nZa\u0142\u00f3\u017cmy, \u017ce nasz stos technologiczny wygl\u0105da nast\u0119puj\u0105co: <\/p>\n<ul>\n<li>zbieranie danych \u2014 Prometheus + Grafana;<\/li>\n<li>analiza log\u00f3w \u2014 ELK;<\/li>\n<li>dla APM lub Tracing \u2014 Jaeger (Zipkin).<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Monitoring martwy? \u2014 Niech \u017cyje monitoring\" src=\"\/wp-content\/uploads\/2019\/04\/af26d3c0ba781cd856d220515788b5eb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWyb\u00f3r opcji nie jest krytyczny. Poniewa\u017c, je\u015bli na pocz\u0105tku rozumiesz, jak monitorowa\u0107 system i opracowujesz plan, to potem zaczynasz wybiera\u0107 narz\u0119dzia zgodnie z w\u0142asnymi wymaganiami. Chodzi o to, co zdecydowa\u0142e\u015b si\u0119 monitorowa\u0107 na pocz\u0105tku. Poniewa\u017c by\u0107 mo\u017ce narz\u0119dzie, kt\u00f3re wybra\u0142e\u015b na pocz\u0105tku \u2014 w og\u00f3le nie spe\u0142nia twoich wymaga\u0144. <\/p>\n<p>Kilka technicznych punkt\u00f3w, kt\u00f3re widz\u0119 ostatnio wsz\u0119dzie:<\/p>\n<p><i>Prometheus wpychaj\u0105 do Kubernetes \u2014 kto to wymy\u015bli\u0142?!<\/i> Co zrobisz, je\u015bli tw\u00f3j klaster si\u0119 zawali? Je\u015bli masz z\u0142o\u017cony klaster wewn\u0105trz, to powinna dzia\u0142a\u0107 pewna system monitorowania wewn\u0105trz klastra, a pewna \u2014 na zewn\u0105trz, kt\u00f3ra b\u0119dzie zbiera\u0107 dane z wn\u0119trza klastra. <\/p>\n<p><i>Wewn\u0105trz klastra zbieramy logi i wszystko inne.<\/i> Systemy monitorowania powinny by\u0107 umieszczone na zewn\u0105trz. Bardzo cz\u0119sto w klastrze, w kt\u00f3rym zainstalowano Promtheus, znajduj\u0105 si\u0119 systemy przeprowadzaj\u0105ce zewn\u0119trzne kontrole dzia\u0142ania strony. A co je\u015bli po\u0142\u0105czenia zewn\u0119trzne pad\u0142y i aplikacja nie dzia\u0142a? W \u015brodku wszystko mo\u017ce by\u0107 w porz\u0105dku, ale u\u017cytkownicy tego nie odczuj\u0105.<\/p>\n<h3>Wnioski<\/h3>\n<p><\/p>\n<ul>\n<li>Rozw\u00f3j monitoringu to nie instalacja narz\u0119dzi, lecz tworzenie produktu programistycznego. 98% dzisiejszego monitoringu to kodowanie. Kodowanie w us\u0142ugach, kodowanie zewn\u0119trznych kontroli, sprawdzanie zewn\u0119trznych serwis\u00f3w i tak dalej. <\/li>\n<li>Nie \u017ca\u0142ujcie czasu deweloper\u00f3w na monitoring: to mo\u017ce zaj\u0105\u0107 do 30% ich pracy, ale warto.<\/li>\n<li>DevOpsy, nie martwcie si\u0119, je\u015bli nie jeste\u015bcie w stanie czego\u015b monitorowa\u0107, bo niekt\u00f3re rzeczy to zupe\u0142nie inny spos\u00f3b my\u015blenia. Nie byli\u015bcie programistami, a praca monitoringu to w\u0142a\u015bnie ich zadanie.<\/li>\n<li>Je\u017celi projekt ju\u017c dzia\u0142a i nie jest monitorowany (a ty jeste\u015b mened\u017cerem) \u2014 przeznacz zasoby na monitoring.<\/li>\n<li>Je\u017celi produkt ju\u017c jest w produkcji, a ty jeste\u015b devopsem, kt\u00f3remu powiedziano \u201eskonfiguruj monitoring\u201d \u2014 spr\u00f3buj wyt\u0142umaczy\u0107 kierownictwu to, o czym napisa\u0142em.<\/li>\n<\/ul>\n<p>\n<i>To rozszerzona wersja prezentacji na konferencji Saint Highload++.<\/i><\/p>\n<p>Je\u015bli interesuj\u0105 ci\u0119 moje pomys\u0142y i refleksje na temat IT i pokrewnych zagadnie\u0144, to mo\u017cesz <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/eapotapov_channel\">przeczyta\u0107 kana\u0142 <\/a><\/noindex>\ud83d\ude42<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/itsumma\/blog\/448602\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0441 2008 \u0433\u043e\u0434\u0430 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438 \u0438 \u043a\u0440\u0443\u0433\u043b\u043e\u0441\u0443\u0442\u043e\u0447\u043d\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0432\u0435\u0431-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432: \u0443 \u043d\u0430\u0441 \u0431\u043e\u043b\u0435\u0435 400 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432, \u044d\u0442\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 15% \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043a\u043e\u043c\u043c\u0435\u0440\u0446\u0438\u0438 \u0420\u043e\u0441\u0441\u0438\u0438. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435 \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0437\u043d\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u0430\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e-\u0442\u043e \u043f\u0430\u0434\u0430\u0435\u0442, \u043c\u044b \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 15 \u043c\u0438\u043d\u0443\u0442 \u044d\u0442\u043e \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c. \u041d\u043e \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0430\u0432\u0430\u0440\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430, \u043d\u0443\u0436\u043d\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u044b. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23731,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31864","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\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\/pl\/blog\/administrirovanie\/monitoring-myortv-da-zdravstvuet-monitoring\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\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 \u043c\u0451\u0440\u0442\u0432? \u2014 \u0414\u0430 \u0437\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 | ProHoster\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/monitoring-myortv-da-zdravstvuet-monitoring\" \/>\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-31T18:43:33+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:43:33+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\udd47Monitoring martwy? \u2014 Niech \u017cyje monitoring | ProHoster","description":"","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/monitoring-myortv-da-zdravstvuet-monitoring","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","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 \u043c\u0451\u0440\u0442\u0432? \u2014 \u0414\u0430 \u0437\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 | ProHoster","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/monitoring-myortv-da-zdravstvuet-monitoring","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-31T18:43:33+00:00","article:modified_time":"2019-10-31T18:43:33+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31864","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-02-09 17:01:09","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:09:27","updated":"2026-02-09 17:01:09","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/31864","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=31864"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/31864\/revisions"}],"predecessor-version":[{"id":158558,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/31864\/revisions\/158558"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/23731"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=31864"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=31864"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=31864"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}