{"id":56049,"date":"2020-02-04T00:00:00","date_gmt":"2020-02-03T21:00:00","guid":{"rendered":"https:\/\/prohoster.info\/blog\/blog_prohoster\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere"},"modified":"2020-02-18T14:04:13","modified_gmt":"2020-02-18T11:04:13","slug":"highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","title":{"rendered":"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Nast\u0119pna konferencja HighLoad++ odb\u0119dzie si\u0119 6 i 7 kwietnia 2020 roku w Sankt Petersburgu. Szczeg\u00f3\u0142y i bilety <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2sSxgBx\">pod tym linkiem<\/a><\/noindex>. HighLoad++ Moskwa 2018. Sala \u201eMoskwa\u201d. 9 listopada, 15:00. Streszczenia i <noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/moscow\/2018\/abstracts\/4141\">prezentacja<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/5c3e11c8449de7375d30b2cd75b5927e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n* Monitoring \u2014 online i analityka.<br \/>\n* G\u0142\u00f3wne ograniczenia platformy ZABBIX.<br \/>\n* Rozwi\u0105zanie do skalowania magazynu analityki.<br \/>\n* Optymalizacja serwera ZABBIX.<br \/>\n* Optymalizacja UI.<br \/>\n* Do\u015bwiadczenie w eksploatacji systemu przy obci\u0105\u017ceniach powy\u017cej 40k NVPS.<br \/>\n* Kr\u00f3tkie wnioski.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>Michai\u0142 Makurow (dalej \u2013 MM):<\/b> \u2013 Witajcie wszyscy!<\/p>\n<p><b>Maksym Czerniecow (dalej \u2013 MC):<\/b> \u2013 Dzie\u0144 dobry!<\/p>\n<p><b>MM:<\/b> \u2013 Pozw\u00f3lcie, \u017ce przedstawi\u0119 Maksymilianowi. Maksymilian to utalentowany in\u017cynier, najlepszy specjalista od sieci, jakiego znam. Maksymilian zajmuje si\u0119 sieciami i us\u0142ugami, ich rozwojem oraz eksploatacj\u0105.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/a7fc62a03c0aede46f4a4695845daa22.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> \u2013 A ja chcia\u0142bym opowiedzie\u0107 o Michale. Micha\u0142 to programista w C. Napisa\u0142 kilka wysokoobci\u0105\u017conych rozwi\u0105za\u0144 do przetwarzania ruchu dla naszej firmy. \u017byjemy i pracujemy w Uralu, w mie\u015bcie surowych m\u0119\u017cczyzn, Czelabi\u0144sku, w firmie \u201eIntersviaz\u201d. Nasza firma to dostawca us\u0142ug internetowych i telewizji kablowej dla miliona os\u00f3b w 16 miastach.<\/p>\n<p><b>MM:<\/b> \u2013 I warto powiedzie\u0107, \u017ce \u201eIntersviaz\u201d to znacznie wi\u0119cej ni\u017c tylko dostawca, to firma IT. Wi\u0119kszo\u015b\u0107 naszych rozwi\u0105za\u0144 zosta\u0142a stworzona przez nasz dzia\u0142 IT.<\/p>\n<p><b>A:<\/b> Od serwer\u00f3w przetwarzaj\u0105cych ruch, po call center i aplikacj\u0119 mobiln\u0105. W dziale IT pracuje obecnie oko\u0142o 80 os\u00f3b o bardzo zr\u00f3\u017cnicowanych kompetencjach.<\/p>\n<h3>O Zabbixie i jego architekturze<\/h3>\n<p>\n<b>MC:<\/b> \u2013 A teraz spr\u00f3buj\u0119 ustanowi\u0107 osobisty rekord i w ci\u0105gu jednej minuty powiedzie\u0107, czym jest Zabbix (dalej \u2013 \u201eZabbix\u201d).<\/p>\n<p>\u201eZabbix\u201d pozycjonuje si\u0119 jako system monitorowania \u201ew pude\u0142ku\u201d klasy przedsi\u0119biorstw. Oferuje wiele funkcji u\u0142atwiaj\u0105cych \u017cycie: rozwini\u0119te zasady eskalacji, API do integracji, grupowanie i automatyczne wykrywanie host\u00f3w i metryk. W \u201eZabbixie\u201d znajduj\u0105 si\u0119 tzw. \u015brodki skalowania \u2013 proxy. \u201eZabbix\u201d to system o otwartym kodzie \u017ar\u00f3d\u0142owym.<\/p>\n<p>Kr\u00f3tkie o architekturze. Mo\u017cna powiedzie\u0107, \u017ce sk\u0142ada si\u0119 z trzech komponent\u00f3w:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/0d2ae3ee04d00885d65e17b8cf44182b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Serwer. Napisany w C. Z do\u015b\u0107 skomplikowanym przetwarzaniem i przesy\u0142aniem informacji mi\u0119dzy w\u0105tkami. Ca\u0142e przetwarzanie odbywa si\u0119 na nim: od odbioru po zapis do bazy.<\/li>\n<li>Wszystkie dane s\u0105 przechowywane w bazie. \u201eZabbix\u201d wspiera MySQL, PostgreSQL i Oracle.<\/li>\n<li>Interfejs webowy jest napisany w PHP. W wi\u0119kszo\u015bci system\u00f3w jest dostarczany z serwerem Apache, ale dzia\u0142a znacznie efektywniej w po\u0142\u0105czeniu nginx + php.<\/li>\n<\/ul>\n<p>\nDzi\u015b chcieliby\u015bmy opowiedzie\u0107 histori\u0119 z \u017cycia naszej firmy, zwi\u0105zan\u0105 z 'Zabbix'...<\/p>\n<h3>Historia z \u017cycia firmy 'Inters\u0432\u044f\u0437' - co mamy i czego potrzebujemy?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/407c35b81995ddca6444fa418941063f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>5 lub 6 miesi\u0119cy temu. Pewnego dnia po pracy...<\/i><\/p>\n<p><b>MC:<\/b> \u2013 Misza, cze\u015b\u0107! Ciesz\u0119 si\u0119, \u017ce zd\u0105\u017cy\u0142em ci\u0119 z\u0142apa\u0107 \u2013 musz\u0119 porozmawia\u0107. Znowu mieli\u015bmy problemy z monitoringiem. W czasie du\u017cej awarii wszystko si\u0119 zatrzymywa\u0142o, a informacji o stanie sieci nie by\u0142o. Niestety, to si\u0119 powtarza po raz kolejny. Potrzebuj\u0119 twojej pomocy. Zr\u00f3bmy tak, aby nasz monitoring dzia\u0142a\u0142 w ka\u017cdych okoliczno\u015bciach!<\/p>\n<p><b>MM:<\/b> \u2013 Ale najpierw zr\u00f3bmy synchronizacj\u0119. Nie zagl\u0105da\u0142em tam od dw\u00f3ch lat. O ile dobrze pami\u0119tam, zrezygnowali\u015bmy z Nagiosa i przeszli\u015bmy na 'Zabbix' jakie\u015b 8 lat temu. A teraz mamy, zdaje si\u0119, 6 pot\u0119\u017cnych serwer\u00f3w i oko\u0142o dziesi\u0119ciu proxy. Niczego nie myl\u0119?<\/p>\n<p><b>MC:<\/b> \u2013 Prawie. 15 serwer\u00f3w, cz\u0119\u015b\u0107 z nich to wirtualne maszyny. Najwa\u017cniejsze, \u017ce to nie ratuje nas w momencie, gdy jest to najbardziej potrzebne. Kiedy wyst\u0119puje awaria \u2013 serwery zwalniaj\u0105 i nic nie wida\u0107. Pr\u00f3bowali\u015bmy optymalizowa\u0107 konfiguracj\u0119, ale to nie daje optymalnego wzrostu wydajno\u015bci.<\/p>\n<p><b>MM:<\/b> \u2013 Rozumiem. Czy co\u015b sprawdzali\u015bcie, co\u015b ju\u017c znale\u017ali\u015bcie w diagnozie?<\/p>\n<p><b>MC:<\/b> \u2013 Pierwsze, z czym mamy do czynienia \u2013 to w\u0142a\u015bnie baza danych. MySQL ci\u0105gle jest obci\u0105\u017cony, zapisuj\u0105c nowe metryki, a gdy 'Zabbix' zaczyna generowa\u0107 mas\u0119 wydarze\u0144 \u2013 baza zamyka si\u0119 dos\u0142ownie na kilka godzin. O optymalizacji konfiguracji ju\u017c ci m\u00f3wi\u0142em, a w tym roku zaktualizowali\u015bmy sprz\u0119t: na serwerach jest wi\u0119cej ni\u017c sto gigabajt\u00f3w pami\u0119ci, a macierze dyskowe dzia\u0142aj\u0105 na RAID SSD \u2013 dalsze liniowe zwi\u0119kszanie nie ma sensu. Co zamierzamy zrobi\u0107?<\/p>\n<p><b>MM:<\/b> \u2013 Rozumiem. W og\u00f3le, MySQL to baza LTP. Wygl\u0105da na to, \u017ce ju\u017c nie nadaje si\u0119 do przechowywania archiwum metryk naszego rozmiaru. Zajmijmy si\u0119 tym.<\/p>\n<p><b>MC:<\/b> \u2013 Zr\u00f3bmy to!<\/p>\n<h3>Integracja Zabbix i Clickhouse jako rezultat hackathonu<\/h3>\n<p>\nPo pewnym czasie otrzymali\u015bmy interesuj\u0105ce dane:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/46899e843b1e89524c6d762c1c167a6c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWi\u0119kszo\u015b\u0107 miejsca w naszej bazie by\u0142a zaj\u0119ta archiwum metryk, a mniej ni\u017c 1% wykorzystywane by\u0142o na konfiguracj\u0119, szablony i ustawienia. W tym czasie eksploatowali\u015bmy rozwi\u0105zanie Big Data oparte na Clickhouse przez ponad rok. Kierunek dzia\u0142ania by\u0142 dla nas oczywisty. Na naszym wiosennym 'Hackathonie' napisa\u0142em integracj\u0119 Zabbixa z Clickhouse dla serwera i frontendu. W tamtym momencie Zabbix ju\u017c wspiera\u0142 ElasticSearch, wi\u0119c postanowili\u015bmy je por\u00f3wna\u0107.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/92fa3da527de48102cbdcf6959d46814.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Por\u00f3wnanie Clickhouse i Elasticsearch<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Dla por\u00f3wnania generowali\u015bmy obci\u0105\u017cenie takie samo, jakie dostarcza serwer Zabbixa i obserwowali\u015bmy, jak zachowuj\u0105 si\u0119 systemy. Zapisali\u015bmy dane partiami po 1000 wierszy, u\u017cywaj\u0105c CURL. Z g\u00f3ry zak\u0142adali\u015bmy, \u017ce Clickhouse b\u0119dzie bardziej efektywny dla profilu obci\u0105\u017cenia generowanego przez Zabbixa. Wyniki nawet przewy\u017cszy\u0142y nasze oczekiwania:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/354be7147b23a0bcb9ada3af93f59fac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW identycznych warunkach testowych Clickhouse zapisa\u0142 trzy razy wi\u0119cej danych. Przy tym oba systemy bardzo efektywnie konsumowa\u0142y zasoby (ma\u0142a ilo\u015b\u0107 u\u017cywanych zasob\u00f3w) podczas odczytu danych. Jednak ElasticSearch podczas zapisu wymaga\u0142 du\u017cej ilo\u015bci procesora:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/fea7f7f7801024cee0f9367c49d81d5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u0141\u0105cznie Clickhouse znacznie przewy\u017csza\u0142 ElasticSearch pod wzgl\u0119dem zu\u017cycia procesora oraz pr\u0119dko\u015bci. Dzi\u0119ki kompresji danych Clickhouse zajmuje 11 razy mniej miejsca na dysku twardym i wykonuje oko\u0142o 30 razy mniej operacji dyskowych:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/50c24c4615ed350d7d78ec8655423409.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> \u2013 Tak, praca z podsystemem dyskowym w Clickhouse zosta\u0142a zrealizowana bardzo efektywnie. Pod bazy mo\u017cna wykorzysta\u0107 ogromne dyski SATA i uzyska\u0107 pr\u0119dko\u015b\u0107 zapisu si\u0119gaj\u0105c\u0105 setek tysi\u0119cy wierszy na sekund\u0119. System 'z pude\u0142ka' wspiera sharding, replikacj\u0119, jest bardzo \u0142atwy w konfiguracji. Jeste\u015bmy bardziej ni\u017c zadowoleni z jego eksploatacji przez rok.<\/p>\n<p>Aby zoptymalizowa\u0107 zasoby, mo\u017cna zainstalowa\u0107 Clickhouse obok istniej\u0105cej g\u0142\u00f3wnej bazy, tym samym oszcz\u0119dzaj\u0105c ogromne ilo\u015bci czasu procesora i operacji dyskowych. Przenie\u015bli\u015bmy archiwum metryk na istniej\u0105ce klastry Clickhouse:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/4cf44eae47a13f2fc50377fec884ecc8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTak bardzo odci\u0105\u017cylili\u015bmy g\u0142\u00f3wn\u0105 baz\u0119 MySQL, \u017ce mogli\u015bmy po\u0142\u0105czy\u0107 j\u0105 na jednej maszynie z serwerem Zabbixa i zrezygnowa\u0107 z wydzielonego serwera dla MySQL.<\/p>\n<h3>Jak dzia\u0142a polling w Zabbix?<\/h3>\n<p>\n<i>4 miesi\u0105ce temu<\/i><\/p>\n<p><b>MM:<\/b> \u2013 C\u00f3\u017c, o problemach z baz\u0105 mo\u017cna zapomnie\u0107?<\/p>\n<p><b>MC:<\/b> \u2013 To prawda! Innym problemem, kt\u00f3ry musimy rozwi\u0105za\u0107, jest wolne zbieranie danych. Teraz nasze 15 serwer\u00f3w proxy jest przeci\u0105\u017conych procesami SNMP i pollingiem. Nie ma innego wyj\u015bcia, jak tylko instalowa\u0107 nowe serwery.<\/p>\n<p><b>MM:<\/b> \u2013 \u015awietnie. Ale najpierw powiedz mi, jak dzia\u0142a polling w \u201eZabbix\u201d?<\/p>\n<p><b>MC:<\/b> \u2013 M\u00f3wi\u0105c kr\u00f3tko, istnieje 20 typ\u00f3w metryk i kilka sposob\u00f3w ich pozyskiwania. \u201eZabbix\u201d mo\u017ce zbiera\u0107 dane w trybie \u201e\u017c\u0105danie \u2013 odpowied\u017a\u201d lub oczekiwa\u0107 na nowe dane przez \u201eInterfejs Trapera\u201d.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/cb2d974ee113b4147a4a588c1f35c730.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWarto zauwa\u017cy\u0107, \u017ce w oryginalnym \u201eZabbixie\u201d ten spos\u00f3b (Trapper) jest najszybszy. <\/p>\n<p>Istniej\u0105 serwery proxy do rozk\u0142adu obci\u0105\u017cenia:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/7b5c94a82b7e06aff6df6ea5549babdf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProxy mog\u0105 wykonywa\u0107 te same funkcje zbierania, co serwer \u201eZabbix\u201d, otrzymuj\u0105c od niego zadania i wysy\u0142aj\u0105c zebrane metryki w\u0142a\u015bnie przez interfejs Trapera. To oficjalnie zalecany spos\u00f3b rozk\u0142adu obci\u0105\u017cenia. Proxy s\u0105 r\u00f3wnie\u017c przydatne do monitorowania zdalnej infrastruktury, dzia\u0142aj\u0105cej przez NAT lub wolne \u0142\u0105cze:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/dbfb2777f9dd9b4adb81f1fa89f3bdd5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Z architektur\u0105 wszystko jasne. Musz\u0119 sprawdzi\u0107 \u017ar\u00f3d\u0142a...<\/p>\n<p><i>Kilka dni p\u00f3\u017aniej<\/i><\/p>\n<h3>Opowie\u015b\u0107 o tym, jak nmap i fping zwyci\u0119\u017cy\u0142y<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Wydaje mi si\u0119, \u017ce co\u015b znalaz\u0142em.<\/p>\n<p><b>MC:<\/b> \u2013 Opowiadaj!<\/p>\n<p><b>MM:<\/b> \u2013 Odkry\u0142em, \u017ce przy sprawdzaniu dost\u0119pno\u015bci \u201eZabbix\u201d wykonuje kontrol\u0119 maksymalnie do 128 host\u00f3w jednocze\u015bnie. Spr\u00f3bowa\u0142em zwi\u0119kszy\u0107 t\u0119 liczb\u0119 do 500 i usun\u0105\u0142em interwa\u0142 mi\u0119dzy pakietami w ich pingach \u2013 to zwi\u0119kszy\u0142o wydajno\u015b\u0107 o dwukrotnie. Ale chcia\u0142bym jeszcze wi\u0119kszych liczb.<\/p>\n<p><b>MC:<\/b> \u2013 W mojej praktyce czasami musz\u0119 sprawdza\u0107 dost\u0119pno\u015b\u0107 tysi\u0119cy host\u00f3w i nic szybszego ni\u017c nmap nie spotka\u0142em. Jestem pewny, \u017ce to najszybszy spos\u00f3b. Spr\u00f3bujmy go! Musimy znacz\u0105co zwi\u0119kszy\u0107 liczb\u0119 host\u00f3w w jednej iteracji.<\/p>\n<p><b>MM:<\/b> \u2013 Sprawdza\u0107 wi\u0119cej ni\u017c pi\u0119\u0107set? 600?<\/p>\n<p><b>MC:<\/b> \u2013 Co najmniej kilka tysi\u0119cy.<\/p>\n<p><b>MM:<\/b> \u2013 Okej. Najwa\u017cniejsze, co chcia\u0142em powiedzie\u0107: odkry\u0142em, \u017ce wi\u0119kszo\u015b\u0107 pollingu w \u201eZabbixie\u201d jest realizowana synchronicznie. Musimy koniecznie przerobi\u0107 to na tryb asynchroniczny. Wtedy b\u0119dziemy mogli radykalnie zwi\u0119kszy\u0107 liczb\u0119 metryk zbieranych przez pollery, zw\u0142aszcza je\u015bli zwi\u0119kszymy liczb\u0119 metryk w jednej iteracji.<\/p>\n<p><b>MC:<\/b> \u2013 Super! A kiedy?<\/p>\n<p><b>MM:<\/b> \u2013 Jak zwykle, wczoraj.<\/p>\n<p><b>MC:<\/b> \u2013 Por\u00f3wnali\u015bmy obie wersje fping i nmap:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/4be4cfe019b6b318ae2fbdbf82577111.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa du\u017cej liczbie host\u00f3w nmap by\u0142 przewidywalnie do pi\u0119ciu razy skuteczniejszy. Poniewa\u017c nmap sprawdza jedynie dost\u0119pno\u015b\u0107 i czas reakcji, obliczanie strat przenie\u015bli\u015bmy do wyzwalaczy i znacznie skr\u00f3cili\u015bmy interwa\u0142y sprawdzania dost\u0119pno\u015bci. Optymalne dla nmap liczba host\u00f3w wynosi oko\u0142o 4000 w jednej iteracji. Nmap pozwoli\u0142 nam trzykrotnie zmniejszy\u0107 zu\u017cycie CPU podczas sprawdzania dost\u0119pno\u015bci i skr\u00f3ci\u0107 interwa\u0142 z 120 sekund do 10.<\/p>\n<h3>Optymalizacja polling<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Nast\u0119pnie zaj\u0119li\u015bmy si\u0119 pollerami. G\u0142\u00f3wnie interesowa\u0142 nas zrzut SNMP i agenci. W \"Zabbixie\" polling jest realizowany synchronnie i podj\u0119to specjalne dzia\u0142ania, aby zwi\u0119kszy\u0107 wydajno\u015b\u0107 systemu. W trybie synchronnym niedost\u0119pno\u015b\u0107 host\u00f3w powoduje znaczn\u0105 degradacj\u0119 pollingu. Istnieje ca\u0142a system stan\u00f3w, s\u0105 specjalne procesy \u2013 tak zwane unreachable-pollery, kt\u00f3re pracuj\u0105 tylko z niedost\u0119pnymi hostami:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/6a001eff121f2392fffda69d719ebad6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo jest komentarz, kt\u00f3ry demonstruje macierz stan\u00f3w, ca\u0142\u0105 z\u0142o\u017cono\u015b\u0107 systemu przej\u015b\u0107, kt\u00f3re s\u0105 wymagane, aby system pozosta\u0142 wydajny. Ponadto sam synchronny polling jest do\u015b\u0107 wolny:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/3579a4a3de85c37f812ba2ca71cf4b3d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOto dlaczego tysi\u0105ce w\u0105tk\u00f3w poller\u00f3w na dziesi\u0119ciu proxy nie mog\u0142y zebra\u0107 dla nas potrzebnej ilo\u015bci danych. Asynchroniczna realizacja rozwi\u0105za\u0142a nie tylko problemy z liczb\u0105 w\u0105tk\u00f3w, ale r\u00f3wnie\u017c znacz\u0105co upro\u015bci\u0142a system stan\u00f3w niedost\u0119pnych host\u00f3w, poniewa\u017c przy ka\u017cdej liczbie sprawdzanej w jednej iteracji pollingu maksymalny czas oczekiwania wynosi\u0142 1 timeout:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/c5f2d9bb3e558f8bba6bd8a96d8ed6a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDodatkowo zmodyfikowali\u015bmy, dopracowali\u015bmy system pollingu dla zapyta\u0144 SNMP. Faktem jest, \u017ce wi\u0119kszo\u015b\u0107 nie mo\u017ce odpowiada\u0107 na kilka zapyta\u0144 SNMP jednocze\u015bnie. Dlatego stworzyli\u015bmy tryb hybrydowy, w kt\u00f3rym polling SNMP tego samego hosta odbywa si\u0119 asynchronicznie:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/eb61766e8afce9bf72d6e9757492559e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDzieje si\u0119 to dla ca\u0142ej paczki host\u00f3w. Taki tryb w ko\u0144cu nie jest wolniejszy ni\u017c ca\u0142kowicie asynchroniczny, poniewa\u017c zapytanie p\u00f3\u0142tora setki warto\u015bci SNMP wci\u0105\u017c jest znacznie szybsze ni\u017c 1 timeout.<\/p>\n<p>Nasze eksperymenty pokaza\u0142y, \u017ce optymalna liczba zapyta\u0144 w jednej iteracji wynosi oko\u0142o 8000 przy polling SNMP. \u0141\u0105cznie przej\u015bcie na tryb asynchroniczny pozwoli\u0142o przyspieszy\u0107 wydajno\u015b\u0107 pollingu 200 razy, w kilka set razy.<\/p>\n<p><b>MC:<\/b> Optymalizacje pollingowe wykaza\u0142y, \u017ce mo\u017cemy nie tylko pozby\u0107 si\u0119 wszystkich proxy, ale r\u00f3wnie\u017c skr\u00f3ci\u0107 interwa\u0142y dla wielu sprawdze\u0144, a proxy przestan\u0105 by\u0107 konieczne jako metoda rozdzielania obci\u0105\u017cenia.<\/p>\n<p><i>Oko\u0142o trzech miesi\u0119cy temu<\/i><\/p>\n<h3>Zmie\u0144 architektur\u0119 \u2013 zwi\u0119ksz obci\u0105\u017cenie!<\/h3>\n<p>\n<b>MM:<\/b> C\u00f3\u017c, Max, czas na produkcj\u0119? Potrzebuj\u0119 mocnego serwera i dobrego in\u017cyniera.<\/p>\n<p><b>MC:<\/b> Dobrze, zaplanujmy to. Wysoka pora, \u017ceby ruszy\u0107 z miejsca z 5000 metryk na sekund\u0119.<\/p>\n<p><i>Poranek po upgrade'cie<\/i><\/p>\n<p><b>MC:<\/b> Miko\u0142aj, zaktualizowali\u015bmy, ale do rana wr\u00f3cili\u015bmy z powrotem\u2026 Zgadnij, jak\u0105 pr\u0119dko\u015b\u0107 uda\u0142o si\u0119 osi\u0105gn\u0105\u0107?<\/p>\n<p><b>MM:<\/b> Maksymalnie 20 tysi\u0119cy.<\/p>\n<p><b>MC:<\/b> Aha, 25! Niestety, jeste\u015bmy tam, gdzie zaczynali\u015bmy.<\/p>\n<p><b>MM:<\/b> A co si\u0119 sta\u0142o? Czy zrobili\u015bcie jak\u0105\u015b diagnostyk\u0119?<\/p>\n<p><b>MC:<\/b> Tak, oczywi\u015bcie! Oto, na przyk\u0142ad, ciekawy top:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/09ac3336a820977b643ee5328ad2a851.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> Zobaczmy. Widz\u0119, \u017ce pr\u00f3bowali\u015bmy ogromnej liczby w\u0105tk\u00f3w pollingowych:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/346e8047f1f6f2bb1b1dd91a728e437b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAle nie uda\u0142o si\u0119 nawet w po\u0142owie wykorzysta\u0107 systemu:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/be1843dbec0fb10d8da59e8c570adc5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nA og\u00f3lna wydajno\u015b\u0107 jest wystarczaj\u0105co ma\u0142a, oko\u0142o 4000 metryk na sekund\u0119:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/02eaf0b56629ebc6d3d5c132374a91b8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCzy jest co\u015b jeszcze?<\/p>\n<p><b>MC:<\/b> Tak, strace jednego z poler\u00f3w:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/73fc58bd2925859f6fbbcd118a0483c0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> Wyra\u017anie wida\u0107, \u017ce proces pollingowy czeka na \u2018semafory\u2019. To blokady:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/d0bec44a9677ec111066dccc1dd8c5dc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> Nie rozumiem.<\/p>\n<p><b>MM:<\/b> Zobacz, to przypomina sytuacj\u0119, kiedy wiele w\u0105tk\u00f3w pr\u00f3buje pracowa\u0107 z zasobem, z kt\u00f3rym jednocze\u015bnie mo\u017cna pracowa\u0107 tylko w jednym w\u0105tku. Wtedy wszystko, co mog\u0105 robi\u0107, to dzieli\u0107 ten zas\u00f3b w czasie:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/7dbb9e8941b01b666dd48f6301151ec9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI \u0142\u0105czna wydajno\u015b\u0107 pracy z takim zasobem ogranicza si\u0119 do pr\u0119dko\u015bci jednego rdzenia:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/e00b197577f4ea7350fe56665dbae299.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMo\u017cna rozwi\u0105za\u0107 ten problem na dwa sposoby.<\/p>\n<p>Zaktualizowa\u0107 sprz\u0119t maszyny, przej\u015b\u0107 na szybsze rdzenie:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/296d84b434ed7277fb558a8a4dd5ac47.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLub zmieni\u0107 architektur\u0119 i r\u00f3wnocze\u015bnie \u2013 obci\u0105\u017cenie:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/efea73106440db4e5eda5aa475dd088b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> A propos, na maszynie testowej uruchomimy mniejsz\u0105 liczb\u0119 rdzeni, ni\u017c na produkcyjnej, ale b\u0119d\u0105 one o 1,5 razy szybsze pod wzgl\u0119dem cz\u0119stotliwo\u015bci rdzenia!<\/p>\n<p><b>MM:<\/b> Jasne? Trzeba spojrze\u0107 na kod serwera.<\/p>\n<h3>\u015acie\u017cka danych w serwerze Zabbix<\/h3>\n<p>\n<b>MC:<\/b> Aby zrozumie\u0107, zacz\u0119li\u015bmy analizowa\u0107, jak dane s\u0105 przesy\u0142ane wewn\u0105trz serwera \u2018Zabbix\u2019:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/b3d84e3fcb12e7afe3c974bdeacc357a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u015awietny obrazek, prawda? Przejd\u017amy przez niego krok po kroku, aby troch\u0119 wyja\u015bni\u0107. S\u0105 w\u0105tki i us\u0142ugi odpowiedzialne za zbieranie danych:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/966db6fa84723d4d3bde8a23736294d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZebrane metryki przesy\u0142aj\u0105 przez socket do mened\u017cera preprocesora, gdzie s\u0105 przechowywane w kolejce:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/1e34fe2c4194f7bd71ec409d6169fb94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMened\u017cer preprocesora przesy\u0142a dane do swoich pracownik\u00f3w, kt\u00f3rzy wykonuj\u0105 instrukcje preprasy i zwracaj\u0105 je z powrotem przez ten sam socket:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/d647caf3886f0c9378a32314e812edc1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPo tym mened\u017cer preprocesora zapisuje je w pami\u0119ci podr\u0119cznej historii:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/ff0e29b0d974d76bd3a3b71d36a1cc68.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nStamt\u0105d pobieraj\u0105 je synchronizatory historii, kt\u00f3re wykonuj\u0105 wiele funkcji: na przyk\u0142ad obliczanie wyzwalaczy, wype\u0142nianie pami\u0119ci podr\u0119cznej warto\u015bci i, co najwa\u017cniejsze, zapisywanie metryk w magazynie historii. Proces jest skomplikowany i do\u015b\u0107 zawi\u0142y.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/c418a17edeb9153a03dff233aa8f715e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Pierwsze, co zauwa\u017cyli\u015bmy, to fakt, \u017ce wi\u0119kszo\u015b\u0107 w\u0105tk\u00f3w konkuruje o tzw. 'pami\u0119\u0107 podr\u0119czn\u0105 konfiguracji' (obszar pami\u0119ci, w kt\u00f3rym przechowywane s\u0105 wszystkie konfiguracje serwera). Szczeg\u00f3lnie wiele blokad powoduj\u0105 w\u0105tki odpowiedzialne za pobieranie danych:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/589d8f564ece6e63457450e9c5081b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026poniewa\u017c w konfiguracji przechowywane s\u0105 nie tylko metryki z ich parametrami, ale tak\u017ce kolejki, z kt\u00f3rych pollery pobieraj\u0105 informacje o tym, co maj\u0105 robi\u0107 dalej. Kiedy jest du\u017co poller\u00f3w, a jeden z nich blokuje konfiguracj\u0119, pozosta\u0142e czekaj\u0105 na zapytania:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/8026cdfcd7def84cb3708b7255b08c66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Pollery nie powinny wchodzi\u0107 w konflikt<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/d436cd3415a6f58e1db5a609689c12b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDlatego pierwsze, co zrobili\u015bmy, to podzielili\u015bmy kolejk\u0119 na 4 cz\u0119\u015bci i umo\u017cliwili\u015bmy pollerom w bezpiecznych warunkach blokowanie tych kolejek, tych cz\u0119\u015bci jednocze\u015bnie:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/9466e5f0053dff583e76713f10e30a89.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTo wyeliminowa\u0142o konkurencj\u0119 o pami\u0119\u0107 podr\u0119czn\u0105 konfiguracji, a szybko\u015b\u0107 dzia\u0142ania poller\u00f3w znacz\u0105co wzros\u0142a. Ale potem napotkali\u015bmy problem, \u017ce mened\u017cer preprocesora zacz\u0105\u0142 gromadzi\u0107 kolejk\u0119 zada\u0144:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/dd58e625823310fb0a818ed81abdceac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Mened\u017cer preprocesora musi umie\u0107 ustala\u0107 priorytety<\/h3>\n<p>\nDzia\u0142o si\u0119 tak w przypadkach, gdy brakowa\u0142o mu wydajno\u015bci. Wtedy wszystko, co m\u00f3g\u0142 zrobi\u0107, to gromadzi\u0107 zapytania od proces\u00f3w zbieraj\u0105cych dane i zapisywa\u0107 je w buforze, a\u017c poch\u0142on\u0105\u0142 ca\u0142\u0105 pami\u0119\u0107 i si\u0119 zawiesi\u0142:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/b215d880863d470ea6ca960c6338b8ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAby rozwi\u0105za\u0107 ten problem, dodali\u015bmy drugi gniazdo, kt\u00f3re by\u0142o wydzielone specjalnie dla worker\u00f3w:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/09d1bb92a009f9d29ba68d966de54210.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nW ten spos\u00f3b mened\u017cer preprocesora zyska\u0142 mo\u017cliwo\u015b\u0107 nadawania priorytet\u00f3w swojej pracy i w przypadku rozrostu bufora m\u00f3g\u0142 op\u00f3\u017ani\u0107 pobieranie danych, daj\u0105c workerom mo\u017cliwo\u015b\u0107 odebrania tego bufora:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/8f4db3661c428e6e6dcfe4cc0c44c016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNast\u0119pnie odkryli\u015bmy, \u017ce jedn\u0105 z przyczyn op\u00f3\u017anie\u0144 by\u0142y same workery, poniewa\u017c konkurowa\u0142y o zupe\u0142nie nieistotny dla ich pracy zas\u00f3b. Problem ten rozwi\u0105zali\u015bmy w aktualizacji, a w nowych wersjach 'Zabbix' zosta\u0142 ju\u017c rozwi\u0105zany:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/eedb359823dd23d369339e3735e341fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Zwi\u0119kszamy liczb\u0119 gniazd \u2013 osi\u0105gamy wynik<\/h3>\n<p>\nNast\u0119pnie sam mened\u017cer preprocesora sta\u0142 si\u0119 w\u0105skim gard\u0142em, poniewa\u017c to jeden w\u0105tek. Napotyka\u0142 na pr\u0119dko\u015b\u0107 j\u0105dra, osi\u0105gaj\u0105c maksymaln\u0105 pr\u0119dko\u015b\u0107 oko\u0142o 70 000 metryk na sekund\u0119:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/f93ccbc656c0f9e103873d99a9397495.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDlatego stworzyli\u015bmy cztery, z czterema zestawami procesor\u00f3w, pracownik\u00f3w:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/81a3dea3aa0f8807add8d045cf64a609.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI to pozwoli\u0142o zwi\u0119kszy\u0107 pr\u0119dko\u015b\u0107 do oko\u0142o 130 tysi\u0119cy metryk:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/016ff07cd021a7221caef19e6ce36a9b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNieliniowo\u015b\u0107 wzrostu wynika z pojawienia si\u0119 konkurencji o pami\u0119\u0107 podr\u0119czn\u0105 historii. O jej pozyskanie rywalizowa\u0142o czterech mened\u017cer\u00f3w wst\u0119pnych i synchronizatorzy historii. W tym momencie na maszynie testowej uzyskiwali\u015bmy oko\u0142o 130 tysi\u0119cy metryk na sekund\u0119, wykorzystuj\u0105c j\u0105 w oko\u0142o 95% pod wzgl\u0119dem CPU:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/62162254cd8bc66c1cef697158691588.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Oko\u0142o 2,5 miesi\u0105ca temu<\/i><\/p>\n<h3>Rezygnacja z snmp-community zwi\u0119kszy\u0142a NVPs o p\u00f3\u0142tora razy<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Max, potrzebuj\u0119 nowej maszyny testowej! W tej ju\u017c si\u0119 nie mieszczymy.<\/p>\n<p><b>MC:<\/b> \u2013 A co jest teraz dost\u0119pne?<\/p>\n<p><b>MM:<\/b> \u2013 Teraz \u2013 130k NVPs i CPU \"w zasi\u0119gu\".<\/p>\n<p><b>MC:<\/b> \u2013 Wow! Fajnie! Czeka, mam dwa pytania. Wed\u0142ug moich oblicze\u0144, nasze potrzeby wynosz\u0105 oko\u0142o 15-20 tysi\u0119cy metryk na sekund\u0119. Po co nam wi\u0119cej?<\/p>\n<p><b>MM:<\/b> \u2013 Chcia\u0142bym zako\u0144czy\u0107 t\u0119 spraw\u0119 do ko\u0144ca. Chc\u0119 zobaczy\u0107, ile mo\u017cemy wycisn\u0105\u0107 z tego systemu.<\/p>\n<p><b>MC:<\/b> \u2013 Ale\u2026<\/p>\n<p><b>MM:<\/b> \u2013 Ale dla biznesu to bez sensu.<\/p>\n<p><b>MC:<\/b> \u2013 Rozumiem. I drugie pytanie: to, co jest obecnie, b\u0119dziemy mogli utrzyma\u0107 samodzielnie, bez pomocy programisty?<\/p>\n<p><b>MM:<\/b> \u2013 W\u0105tpi\u0119. Zmiana w obs\u0142udze pami\u0119ci podr\u0119cznej konfiguracji to problem. Dotyczy to zmian w wi\u0119kszo\u015bci w\u0105tk\u00f3w i jest do\u015b\u0107 skomplikowane w utrzymaniu. Prawdopodobnie b\u0119dzie to bardzo trudne do wsparcia.<\/p>\n<p><b>MC:<\/b> \u2013 W takim razie potrzebna jest jaka\u015b alternatywa.<\/p>\n<p><b>MM:<\/b> \u2013 Jest taka opcja. Mo\u017cemy przej\u015b\u0107 na szybkie rdzenie, rezygnuj\u0105c przy tym z nowego systemu blokowania. I tak uzyskamy wydajno\u015b\u0107 na poziomie 60-80 tysi\u0119cy metryk. Ponadto pozostawimy ca\u0142y reszt\u0119 kodu. \u00abClickHouse\u00bb, asynchroniczne polling b\u0119d\u0105 dzia\u0142a\u0107. I to b\u0119dzie \u0142atwe do utrzymania.<\/p>\n<p><b>MC:<\/b> \u2013 \u015awietnie! Proponuj\u0119 na tym zako\u0144czy\u0107.<\/p>\n<p>Po optymalizacji cz\u0119\u015bci serwera, w ko\u0144cu uda\u0142o nam si\u0119 uruchomi\u0107 nowy kod w produkcji. Zrezygnowali\u015bmy z cz\u0119\u015bci zmian na rzecz przej\u015bcia na maszyn\u0119 z szybkimi rdzeniami i minimalizacji liczby zmian w kodzie. Upro\u015bcili\u015bmy r\u00f3wnie\u017c konfiguracj\u0119 i tam, gdzie to mo\u017cliwe, zrezygnowali\u015bmy z makr w elementach danych, poniewa\u017c s\u0105 one \u017ar\u00f3d\u0142em dodatkowych blokad.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/2b1ed396b09bd815fba973ebb5f73d76.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNa przyk\u0142ad, rezygnacja z cz\u0119sto spotykanego w dokumentacji i przyk\u0142adach makra snmp-community w naszym przypadku pozwoli\u0142a dodatkowo przyspieszy\u0107 NVPs o oko\u0142o 1,5 razy.<\/p>\n<p><i>Po dw\u00f3ch dniach w produkcji<\/i><\/p>\n<h3>Usuwamy okna pop-up historii incydent\u00f3w<\/h3>\n<p>\n<b>MC:<\/b> \u2013 Misha, korzystamy z systemu od dw\u00f3ch dni i wszystko dzia\u0142a. Ale tylko wtedy, gdy wszystko dzia\u0142a! Mieli\u015bmy zaplanowane prace zwi\u0105zane z przeniesieniem do\u015b\u0107 du\u017cego segmentu sieci i ponownie sprawdzali\u015bmy r\u0119cznie, co si\u0119 podnios\u0142o, a co nie.<\/p>\n<p><b>MM:<\/b> \u2013 Nie mo\u017ce by\u0107! Sprawdzili\u015bmy wszystko 10 razy. Serwer przetwarza nawet ca\u0142kowit\u0105 niedost\u0119pno\u015b\u0107 sieci natychmiast.<\/p>\n<p><b>MC:<\/b> \u2013 Rozumiem wszystko: serwer, baza, top, austat, logi \u2013 wszystko szybko\u2026 Ale patrzymy na interfejs webowy, a tam \u2013 procesor \u00abw polu\u00bb na serwerze i to:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/828a44d71f67ac585055bffcc01ab46e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Zrozumia\u0142e. Sp\u00f3jrzmy na stron\u0119. Odkryli\u015bmy, \u017ce w sytuacji z du\u017c\u0105 liczb\u0105 aktywnych incydent\u00f3w, wi\u0119kszo\u015b\u0107 gad\u017cet\u00f3w operacyjnych zaczyna\u0142a dzia\u0142a\u0107 bardzo wolno:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/22fdb735aa6136cd9967b40341d2a5cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPowodem tego by\u0142a generacja okienek popup z histori\u0105 incydent\u00f3w, kt\u00f3re s\u0105 generowane dla ka\u017cdego elementu na li\u015bcie. Dlatego zrezygnowali\u015bmy z generacji tych okienek (skomentowali\u015bmy 5 linii w kodzie) i to rozwi\u0105za\u0142o nasze problemy.<\/p>\n<p>Czas \u0142adowania wid\u017cet\u00f3w nawet przy ca\u0142kowitej niedost\u0119pno\u015bci skr\u00f3ci\u0142 si\u0119 z kilku minut do akceptowalnych dla nas 10-15 sekund, a histori\u0119 mo\u017cna nadal przegl\u0105da\u0107 klikaj\u0105c na czas:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/d15341ce76578880a23651a7a68dd802.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Po pracy. 2 miesi\u0105ce temu<\/i><\/p>\n<p><b>MC:<\/b> \u2013 Misha, wychodzisz? Musimy porozmawia\u0107.<\/p>\n<p><b>MM:<\/b> \u2013 Nie planowa\u0142em. Znowu co\u015b z \u00abZabbixem\u00bb?<\/p>\n<p><b>MC:<\/b> \u2013 Nie, zrelaksuj si\u0119! Chcia\u0142em tylko powiedzie\u0107: wszystko dzia\u0142a, dzi\u0119kuj\u0119! Ja stawiam piwo.<\/p>\n<h3>Zabbix jest efektywny<\/h3>\n<p>\n\u00abZabbix\u00bb to do\u015b\u0107 uniwersalny i bogaty system oraz funkcjonalno\u015b\u0107. Mo\u017cna go z powodzeniem u\u017cywa\u0107 do ma\u0142ych instalacji \u00abz pude\u0142ka\u00bb, ale wraz z rosn\u0105cymi potrzebami trzeba go optymalizowa\u0107. Do przechowywania du\u017cego archiwum metryk u\u017cyj odpowiedniego magazynu:<\/p>\n<ul>\n<li>mo\u017cna wykorzysta\u0107 wbudowane \u015brodki w postaci integracji z \u00abElasticSearch\u00bb lub eksportu historii do plik\u00f3w tekstowych (dost\u0119pne od czwartej wersji);<\/li>\n<li>mo\u017cna skorzysta\u0107 z naszego do\u015bwiadczenia i integracji z \u00abClickHouse\u00bb.<\/li>\n<\/ul>\n<p>\nAby drastycznie zwi\u0119kszy\u0107 pr\u0119dko\u015b\u0107 zbierania metryk, zbieraj je asynchronicznymi metodami i przesy\u0142aj przez interfejs trappera do serwera \u00abZabbix\u00bb; lub mo\u017cna skorzysta\u0107 z \u0142atki do asynchroniczno\u015bci poller\u00f3w samego \u00abZabbix\u00bb.<\/p>\n<p>Zabbix jest napisany w C i jest wystarczaj\u0105co efektywny. Niekt\u00f3re w\u0105skie miejsca w architekturze pozwalaj\u0105 dodatkowo zwi\u0119kszy\u0107 jego wydajno\u015b\u0107 i, zgodnie z naszym do\u015bwiadczeniem, uzyskiwa\u0107 ponad 100 tysi\u0119cy metryk na jednoprokesorowej maszynie.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/46559b481b5e53dc3cc3d2562a94531d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Ten konkretny patch Zabbix<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Chc\u0119 doda\u0107 kilka uwag. Ca\u0142a obecna prezentacja, wszystkie testy, liczby s\u0105 przedstawione dla tej konfiguracji, kt\u00f3ra jest u\u017cywana u nas. Z niej zbieramy teraz oko\u0142o 20 tysi\u0119cy metryk na sekund\u0119. Je\u015bli pr\u00f3bujesz zrozumie\u0107, czy to u Ciebie zadzia\u0142a \u2013 mo\u017cesz por\u00f3wna\u0107. To, o czym dzisiaj m\u00f3wili\u015bmy, zosta\u0142o opublikowane na GitHubie w formie patcha: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/miklert\/zabbix\">github.com\/miklert\/zabbix<\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/e5880b2f01cb03809057db08306b23c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPatch zawiera:<\/p>\n<ul>\n<li>pe\u0142n\u0105 integracj\u0119 z ClickHouse (zar\u00f3wno z serwerem Zabbix, jak i frontendem);<\/li>\n<li>rozwi\u0105zanie problem\u00f3w z mened\u017cerem preprocesora;<\/li>\n<li>asynchroniczne polling.<\/li>\n<\/ul>\n<p>\nPatch jest kompatybilny ze wszystkimi wersjami 4, w tym z LTS. Prawdopodobnie, przy minimalnych zmianach, b\u0119dzie dzia\u0142a\u0142 na wersji 3.4.<\/p>\n<p>Dzi\u0119kujemy za uwag\u0119.<\/p>\n<h3>Pytania<\/h3>\n<p>\nPytanie z publiczno\u015bci (dalej A): \u2013 Dzie\u0144 dobry! Czy macie plany intensywnej wsp\u00f3\u0142pracy z zespo\u0142em Zabbix, aby to nie by\u0142 patch, a normalne zachowanie Zabbixa?<\/p>\n<p><b>MM:<\/b> \u2013 Tak, cz\u0119\u015b\u0107 zmian na pewno dodamy do repozytorium. Co\u015b jednak zostanie w patchu.<\/p>\n<p><b>A:<\/b> \u2013 Dzi\u0119kuj\u0119 bardzo za \u015bwietn\u0105 prezentacj\u0119! Czy po zastosowaniu patcha wsparcie ze strony Zabbix pozostanie i jak dalej aktualizowa\u0107 do wy\u017cszych wersji? Czy b\u0119dzie mo\u017cliwo\u015b\u0107 aktualizacji Zabbixa po waszym patchu do 4.2, 5.0?<\/p>\n<p><b>MM:<\/b> \u2013 O wsparciu nie mog\u0119 nic powiedzie\u0107. Gdybym by\u0142 wsparciem technicznym Zabbixa, powiedzia\u0142bym raczej nie, poniewa\u017c to cudzy kod. Je\u015bli chodzi o kod bazy 4.2, to nasza pozycja jest taka: \"B\u0119dziemy i\u015b\u0107 z czasem i zaktualizujemy si\u0119 do nast\u0119pnej wersji\". Dlatego przez jaki\u015b czas b\u0119dziemy publikowa\u0107 patch do zaktualizowanych wersji. Ju\u017c m\u00f3wi\u0142em w prezentacji: liczba zmian z wersjami jest na razie stosunkowo niewielka. My\u015bl\u0119, \u017ce przej\u015bcie z 3.4 na 4 zaj\u0119\u0142o nam, wydaje si\u0119, oko\u0142o 15 minut. Co\u015b si\u0119 zmieni\u0142o, ale niezbyt wa\u017cnego.<\/p>\n<p><b>A:<\/b> \u2013 Czyli planujecie utrzymywa\u0107 sw\u00f3j patch i mo\u017cna go bezpiecznie wdro\u017cy\u0107 na produkcj\u0119, a potem w jaki\u015b spos\u00f3b otrzyma\u0107 aktualizacje?<\/p>\n<p><b>MM:<\/b> \u2013 Zdecydowanie to rekomendujemy. Rozwi\u0105zuje to dla nas wiele problem\u00f3w.<\/p>\n<p><b>MC:<\/b> \u2013 Jeszcze raz chcia\u0142bym zwr\u00f3ci\u0107 uwag\u0119, \u017ce zmiany, kt\u00f3re nie dotycz\u0105 architektury ani blokad, kolejek \u2013 s\u0105 modu\u0142owe, w osobnych modu\u0142ach. Nawet przy niewielkich zmianach mo\u017cna je utrzymywa\u0107 stosunkowo \u0142atwo.<\/p>\n<p><b>MM:<\/b> \u2013 Je\u015bli interesuj\u0105 szczeg\u00f3\u0142y, to \u201eClickHouse\u201d korzysta z tzw. biblioteki historii. Jest ona odseparowana \u2013 to kopia wsparcia \u201eElastics\u201d, czyli mo\u017cna j\u0105 konfigurowa\u0107. Polling zmienia tylko pollery. Uwa\u017camy, \u017ce to b\u0119dzie dzia\u0142a\u0107 d\u0142ugo.<\/p>\n<p><b>A:<\/b> \u2013 Dzi\u0119kuj\u0119 bardzo. A czy s\u0105 jakie\u015b dokumentacje wprowadzonych zmian?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Micha\u0142 Makurov, Maksym Czerniec (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze\" src=\"\/wp-content\/uploads\/2020\/02\/f3842ba578f736721c96794941b8f071.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Dokumentacja to patch. Oczywi\u015bcie, w miar\u0119 wprowadzania \u201eClickHouse\u201d, wraz z nowymi rodzajami poller\u00f3w pojawiaj\u0105 si\u0119 nowe opcje konfiguracyjne. Pod linkiem z ostatniego slajdu znajduje si\u0119 kr\u00f3tkiego opisu, jak tego u\u017cywa\u0107.<\/p>\n<h3>O wymianie fping na nmap<\/h3>\n<p>\n<b>A:<\/b> \u2013 Jak to w ko\u0144cu zrealizowali\u015bcie? Mo\u017cecie na konkretnych przyk\u0142adach: macie strappery i zewn\u0119trzny skrypt? Co w ko\u0144cu tak szybko sprawdza ogromn\u0105 liczb\u0119 host\u00f3w? Jak zdobywacie te hosty? Czy trzeba jako\u015b poda\u0107 je nmap, sk\u0105d\u015b wyci\u0105gn\u0105\u0107, umie\u015bci\u0107, co\u015b uruchomi\u0107?<\/p>\n<p><b>MM:<\/b> \u2013 Super. Bardzo trafne pytanie! Istota sprawy jest taka. Zmodyfikowali\u015bmy bibliotek\u0119 (ICMP ping, cz\u0119\u015b\u0107 \u201eZabbix\u201d) do ICMP sprawdze\u0144, w kt\u00f3rych ustalone zosta\u0142o liczba pakiet\u00f3w \u2013 jeden (1), a kod pr\u00f3buje u\u017cywa\u0107 nmap. To znaczy, \u017ce to wewn\u0119trzna praca \u201eZabbixa\u201d, sta\u0142a si\u0119 wewn\u0119trzn\u0105 prac\u0105 pingera. W zwi\u0105zku z tym nie jest potrzebna synchronizacja ani u\u017cycie trapera. Zrobiono to \u015bwiadomie, aby zachowa\u0107 system w ca\u0142o\u015bci i nie zajmowa\u0107 si\u0119 synchronizacj\u0105 dw\u00f3ch baz: co sprawdza\u0107, wczyta\u0107 przez poller, a czy nam wczytanie nie pad\u0142o\u2026 To jest znacznie prostsze.<\/p>\n<p><b>A:<\/b> \u2013 Czy to te\u017c dzia\u0142a dla proxy?<\/p>\n<p><b>MM:<\/b> \u2013 Tak, ale nie sprawdzali\u015bmy. Kod pollingu i w \u201eZabbixie\u201d, i na serwerze jest jedyny. Powinno dzia\u0142a\u0107. Jeszcze raz podkre\u015blam: wydajno\u015b\u0107 systemu jest taka, \u017ce proxy nie jest potrzebne.<\/p>\n<p><b>MC:<\/b> \u2013 Prawid\u0142owa odpowied\u017a na pytanie brzmi: \u201eA po co Wam przy takim systemie proxy?\u201d Tylko przez NAT czy monitorowa\u0107 jakim\u015b wolnym kana\u0142em\u2026<\/p>\n<p><b>A:<\/b> \u2013 A u\u017cywacie \u201eZabbix\u201d jako alertor, je\u015bli dobrze rozumiem. Czy wykresy (gdzie jest warstwa archiwalna) trafi\u0142y do innego systemu, typu Grafana? Czy nie korzystacie z tej funkcjonalno\u015bci?<\/p>\n<p><b>MM:<\/b> \u2013 Podkre\u015bl\u0119 jeszcze raz: dokonali\u015bmy pe\u0142nej integracji. Przesy\u0142amy histori\u0119 do \u201eClickHouse\u201d, ale zmienili\u015bmy php-frontend. Php-frontend korzysta z \u201eClickHouse\u201d i wszystkie wykresy generuje stamt\u0105d. Przy okazji, je\u015bli mam by\u0107 szczery, mamy cz\u0119\u015b\u0107, kt\u00f3ra buduje dane z tego samego \u201eClickHouse\u201d, z tych samych danych \u201eZabbiksa\u201d w innych systemach wizualizacji.<\/p>\n<p><b>MC:<\/b> \u2013 W \u201eGrafanie\u201d r\u00f3wnie\u017c.<\/p>\n<h3>Jak podejmowano decyzj\u0119 o przydzieleniu zasob\u00f3w?<\/h3>\n<p>\n<b>A:<\/b> \u2013 Podzielcie si\u0119 troch\u0119 wewn\u0119trzn\u0105 kuchni\u0105. Jak podejmowano decyzj\u0119 o tym, \u017ce trzeba przeznaczy\u0107 zasoby na powa\u017cn\u0105 przebudow\u0119 produktu? To w ko\u0144cu s\u0105 okre\u015blone ryzyka. I powiedzcie prosz\u0119, w kontek\u015bcie tego, \u017ce zamierzacie wspiera\u0107 nowe wersje: jak to decyzja uzasadnia si\u0119 z punktu widzenia zarz\u0105dzania?<\/p>\n<p><b>MM:<\/b> \u2013 Wygl\u0105da na to, \u017ce dram\u0119 tej historii opowiedzieli\u015bmy do\u015b\u0107 \u017ale. Znale\u017ali\u015bmy si\u0119 w sytuacji, w kt\u00f3rej co\u015b trzeba by\u0142o zrobi\u0107, i poszli\u015bmy w zasadzie dwiema r\u00f3wnoleg\u0142ymi \u015bcie\u017ckami:<\/p>\n<ul>\n<li>Jedna zajmowa\u0142a si\u0119 uruchomieniem systemu monitorowania w nowych metodach: monitoring jako us\u0142uga, standardowy zestaw rozwi\u0105za\u0144 open source, kt\u00f3re \u0142\u0105czymy, a nast\u0119pnie staramy si\u0119 zmieni\u0107 proces biznesowy, aby m\u00f3c pracowa\u0107 z nowym systemem monitorowania.<\/li>\n<li>R\u00f3wnolegle mieli\u015bmy entuzjast\u0119-programist\u0119, kt\u00f3ry tym si\u0119 zajmowa\u0142 (o sobie). Tak si\u0119 z\u0142o\u017cy\u0142o, \u017ce on wygra\u0142.<\/li>\n<\/ul>\n<p>\n<b>A:<\/b> \u2013 Jaki jest rozmiar zespo\u0142u?<\/p>\n<p><b>MC:<\/b> \u2013 Jeste\u015bcie przed nami.<\/p>\n<p><b>A:<\/b> \u2013 Czyli jak zwykle potrzebny jest pasjonat?<\/p>\n<p><b>MM:<\/b> \u2013 Nie wiem, co to jest pasjonat.<\/p>\n<p><b>A:<\/b> \u2013 W tym przypadku, najwyra\u017aniej, to wy. Dzi\u0119kuj\u0119 bardzo, jeste\u015bcie wspaniali.<\/p>\n<p><b>MM:<\/b> \u2013 Dzi\u0119kuj\u0119.<\/p>\n<h3>O \u0142atach dla Zabbiksa<\/h3>\n<p>\n<b>A:<\/b> \u2013 Dla systemu, kt\u00f3ry u\u017cywa proxy (na przyk\u0142ad w jakich\u015b rozproszonych systemach), czy mo\u017cna dostosowa\u0107 i za\u0142atkowa\u0107 wasze rozwi\u0105zanie, m\u00f3wi\u0105c, prosiak\u00f3w, proxy, a cz\u0119\u015bciowo tak\u017ce preprocesor samego \u201eZabbiksa\u201d; i ich interakcj\u0119? Czy mo\u017cna optymalizowa\u0107 istniej\u0105ce rozwi\u0105zania pod system z wieloma proxy?<\/p>\n<p><b>MM:<\/b> \u2013 Wiem, \u017ce serwer \u201eZabbiksa\u201d jest kompilowany przy u\u017cyciu proxy (kompilowany i powstaje kod). Nie sprawdzali\u015bmy tego w produkcji. Nie jestem tego pewny, ale wed\u0142ug mnie mened\u017cer preprocesora nie jest u\u017cywany w proxy. Zadaniem proxy jest pobranie zestawu metryk z \u201eZabbiksa\u201d, ich spolszczenie (on te\u017c zapisuje konfiguracj\u0119, lokaln\u0105 baz\u0119) i oddanie z powrotem serwerowi \u201eZabbiksa\u201d. Preprocesing b\u0119dzie p\u00f3\u017aniej realizowany przez sam serwer, gdy go otrzyma.<\/p>\n<p>Zainteresowanie proxy jest zrozumia\u0142e. Sprawdzimy to. To interesuj\u0105cy temat.<\/p>\n<p><b>A:<\/b> \u2013 Taki by\u0142 pomys\u0142: je\u015bli mo\u017cna patchowa\u0107 pollery, mo\u017cna je patchowa\u0107 na proxy i patchowa\u0107 interakcj\u0119 z serwerem, a preprocesor dostosowa\u0107 do tych cel\u00f3w tylko na serwerze.<\/p>\n<p><b>MM:<\/b> \u2013 My\u015bl\u0119, \u017ce wszystko jest nawet prostsze. Bierzecie kod, nak\u0142adacie patch, potem konfigurujecie tak, jak trzeba \u2013 budujecie serwery proxy (na przyk\u0142ad z ODBC) i rozprowadzacie patchowany kod po systemach. Gdzie trzeba \u2013 budujecie proxy, gdzie trzeba \u2013 serwer.<\/p>\n<p><b>A:<\/b> \u2013 Czy dodatkowo nie trzeba b\u0119dzie patchowa\u0107 przesy\u0142ania proxy do serwera, prawda?<\/p>\n<p><b>MC:<\/b> \u2013 Nie, jest standardowe.<\/p>\n<p><b>MM:<\/b> \u2013 Tak naprawd\u0119 nie wybrzmia\u0142a jedna z idei. Zawsze starali\u015bmy si\u0119 utrzyma\u0107 r\u00f3wnowag\u0119 mi\u0119dzy eksplozj\u0105 pomys\u0142\u00f3w a ilo\u015bci\u0105 zmian, \u0142atwo\u015bci\u0105 w utrzymaniu.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"3yRt9jSwrlg\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/3yRt9jSwrlg\/hqdefault.jpg\" alt=\"Odtwarzaj wideo\" loading=\"lazy\" width=\"480\" height=\"360\" style=\"width:100%;height:auto;\">\r\n        <div class=\"play-button\"><\/div>\r\n    <\/div><\/center><\/p>\n<h3>Troch\u0119 reklamy \ud83d\ude42<\/h3>\n<p>\nDzi\u0119kujemy, \u017ce jeste\u015b z nami. Podobaj\u0105 Ci si\u0119 nasze artyku\u0142y? Chcesz zobaczy\u0107 wi\u0119cej interesuj\u0105cych materia\u0142\u00f3w? Wspieraj nas sk\u0142adaj\u0105c zam\u00f3wienie lub polecaj\u0105c nas znajomym, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">chmurowe VPS dla programist\u00f3w od 4,99 $<\/a><\/noindex>, <b>unikatowy odpowiednik serwer\u00f3w entry-level, kt\u00f3ry zosta\u0142 stworzony przez nas dla Ciebie:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Ca\u0142a prawda o VPS (KVM) E5-2697 v3 (6 rdzeni) 10GB DDR4 480GB SSD 1Gbps od 19 $ lub jak prawid\u0142owo podzieli\u0107 serwer?<\/a><\/noindex> (dost\u0119pne opcje z RAID1 i RAID10, do 24 rdzeni i do 40GB DDR4).<\/p>\n<p><b>Dell R730xd dwa razy ta\u0144szy w centrum danych Equinix Tier IV w Amsterdamie?<\/b> Tylko u nas <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100TB od 199 dolar\u00f3w<\/a><\/noindex> w Holandii! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 od 99 dolar\u00f3w!<\/b><\/b> Czytaj o tym <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Jak zbudowa\u0107 infrastruktur\u0119 klasy korporacyjnej z zastosowaniem serwer\u00f3w Dell R730xd E5-2650 v4 kosztuj\u0105cych 9000 euro za grosze?<\/a><\/noindex><br \/>\n<br \/>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/ua-hosting\/blog\/486540\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435. HighLoad++ Moscow 2018. \u0417\u0430\u043b \u00ab\u041c\u043e\u0441\u043a\u0432\u0430\u00bb. 9 \u043d\u043e\u044f\u0431\u0440\u044f, 15:00. \u0422\u0435\u0437\u0438\u0441\u044b \u0438 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044f. * \u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u2014 \u043e\u043d\u043b\u0430\u0439\u043d \u0438 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430. * \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b ZABBIX. * \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0430 \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0438. * \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0435\u0440\u0432\u0435\u0440\u0430 ZABBIX. * \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f UI. * \u041e\u043f\u044b\u0442 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438 [&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-56049","post","type-post","status-publish","format-standard","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435.\" \/>\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\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere\" \/>\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\udd47HighLoad++, \u041c\u0438\u0445\u0430\u0438\u043b \u041c\u0430\u043a\u0443\u0440\u043e\u0432, \u041c\u0430\u043a\u0441\u0438\u043c \u0427\u0435\u0440\u043d\u0435\u0446\u043e\u0432 (\u0418\u043d\u0442\u0435\u0440\u0441\u0432\u044f\u0437\u044c): Zabbix, 100kNVPS \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere\" \/>\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=\"2020-02-03T21:00:00+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-02-18T11:04:13+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\udd47HighLoad++, Michai\u0142 Makurow, Maksym Czerniecow (Interzwi\u0105zek): Zabbix, 100kNVPS na jednym serwerze | ProHoster","description":"Nast\u0119pna konferencja HighLoad++ odb\u0119dzie si\u0119 6 i 7 kwietnia 2020 roku w Petersburgu. Szczeg\u00f3\u0142y i bilety w linku.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","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\udd47HighLoad++, \u041c\u0438\u0445\u0430\u0438\u043b \u041c\u0430\u043a\u0443\u0440\u043e\u0432, \u041c\u0430\u043a\u0441\u0438\u043c \u0427\u0435\u0440\u043d\u0435\u0446\u043e\u0432 (\u0418\u043d\u0442\u0435\u0440\u0441\u0432\u044f\u0437\u044c): Zabbix, 100kNVPS \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435 | ProHoster","og:description":"\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","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":"2020-02-03T21:00:00+00:00","article:modified_time":"2020-02-18T11:04:13+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"56049","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":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 19:31:44","updated":"2022-09-30 17:33:39","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\/56049","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=56049"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/56049\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=56049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=56049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=56049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}