{"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\/nl\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","title":{"rendered":"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>De volgende HighLoad++ conferentie vindt plaats op 6 en 7 april 2020 in Sint-Petersburg. Details en Tickets <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2sSxgBx\">via de link<\/a><\/noindex>. HighLoad++ Moskou 2018. Zaal 'Moskou'. 9 november, 15:00. Samenvattingen en <noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/moscow\/2018\/abstracts\/4141\">presentatie<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/5c3e11c8449de7375d30b2cd75b5927e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n* Monitoring - online en analytics.<br \/>\n* Belangrijkste beperkingen van het ZABBIX-platform.<br \/>\n* Oplossing voor het schalen van analytics opslag.<br \/>\n* Optimalisatie van de ZABBIX-server.<br \/>\n* Optimalisatie van de UI.<br \/>\n* Ervaring met het gebruik van het systeem bij belastingen van meer dan 40k NVPS.<br \/>\n* Kort de conclusies.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>Mikhail Makurov (hierna - MM):<\/b> - Hallo allemaal!<\/p>\n<p><b>Maxim Chernetcov (hierna - MC):<\/b> - Goedendag!<\/p>\n<p><b>MM:<\/b> - Laat me Maxim voorstellen. Max is een getalenteerde ingenieur, de beste netwerkspecialist die ik ken. Maxim houdt zich bezig met netwerken en diensten, hun ontwikkeling en exploitatie.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/a7fc62a03c0aede46f4a4695845daa22.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> - En ik wil graag over Mikhail vertellen. Mikhail is een C-ontwikkelaar. Hij heeft verschillende krachtige oplossingen voor verkeerverwerking voor ons bedrijf geschreven. Wij wonen en werken in de Oeral, in de stad van de stevige mannen, Tsjeljabinsk, in het bedrijf 'Intersvyaz'. Ons bedrijf is een internet- en kabeltelevisieaanbieder voor een miljoen mensen in 16 steden.<\/p>\n<p><b>MM:<\/b> - En het moet gezegd worden dat 'Intersvyaz' veel meer is dan alleen een provider. Dit is een IT-bedrijf. De meeste van onze oplossingen zijn gemaakt door onze IT-afdeling.<\/p>\n<p><b>A:<\/b> van servers die verkeer verwerken, tot het callcenter en de mobiele applicatie. De IT-afdeling heeft momenteel ongeveer 80 mensen met zeer diverse competenties.<\/p>\n<h3>Over Zabbix en zijn architectuur<\/h3>\n<p>\n<b>MC:<\/b> - En nu zal ik proberen mijn persoonlijke record te vestigen en in \u00e9\u00e9n minuut uit te leggen wat Zabbix (hierna - 'Zabbix') is.<\/p>\n<p>'Zabbix' positioneert zichzelf als een enterprise-montitoringsysteem 'out of the box'. Het heeft veel functies die het leven vereenvoudigen: geavanceerde escalatieregels, API voor integratie, groepering en autodetectie van hosts en metrische waarden. In 'Zabbix' zijn er zogenaamde schaalmiddelen - proxy's. 'Zabbix' is een open-source systeem.<\/p>\n<p>Kort over de architectuur. Je kunt zeggen dat het bestaat uit drie componenten:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/0d2ae3ee04d00885d65e17b8cf44182b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Server. Geschreven in C. Met een vrij complexe verwerking en overdracht van informatie tussen threads. Alle verwerking gebeurt daarin: van ontvangst tot opslag in de database.<\/li>\n<li>Alle gegevens worden in de database opgeslagen. 'Zabbix' ondersteunt MySQL, PostgreSQL en Oracle.<\/li>\n<li>De webinterface is geschreven in PHP. In de meeste systemen wordt het geleverd met de Apache-server, maar het werkt effectiever in combinatie met nginx + php.<\/li>\n<\/ul>\n<p>\nVandaag willen we een verhaal uit het leven van ons bedrijf delen dat verband houdt met 'Zabbix'...<\/p>\n<h3>Een verhaal uit het leven van het bedrijf 'Intersvyaz'. Wat hebben we en wat hebben we nodig?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/407c35b81995ddca6444fa418941063f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vijf of zes maanden geleden. Op een dag na het werk...<\/i><\/p>\n<p><b>MC:<\/b> \u2013 Misha, hallo! Fijn dat ik je te pakken krijg \u2013 ik heb iets te bespreken. We hadden opnieuw problemen met de monitoring. Tijdens een grote storing vertraagde alles en er was geen informatie over de staat van het netwerk. Helaas gebeurt dit al voor de tweede keer. Ik heb je hulp nodig. Laten we ervoor zorgen dat onze monitoring onder alle omstandigheden werkt!<\/p>\n<p><b>MM:<\/b> \u2013 Maar laten we eerst synchroniseren. Ik heb er al een paar jaar niet naar gekeken. Voor zover ik me herinner, hebben we Nagios afgewezen en zijn we ongeveer 8 jaar geleden overgestapt naar 'Zabbix'. En nu hebben we, denk ik, 6 krachtige servers en een tiental proxy's. Klopt dat?<\/p>\n<p><b>MC:<\/b> \u2013 Bijna. We hebben 15 servers, waarvan een deel virtuele machines zijn. Het belangrijkste is dat dit ons niet helpt op het moment dat we het het meest nodig hebben. Zodra er een storing is, vertragen de servers en is er niks zichtbaar. We hebben geprobeerd de configuratie te optimaliseren, maar dat levert niet de gewenste prestatieverbetering op.<\/p>\n<p><b>MM:<\/b> \u2013 Begrijpelijk. Hebben jullie al iets onderzocht, wat hebben jullie al gevonden tijdens de diagnose?<\/p>\n<p><b>MC:<\/b> \u2013 Het eerste waar we mee te maken hebben, is de database. MySQL is al constant belast door het opslaan van nieuwe metrics, en wanneer 'Zabbix' begint met het genereren van veel gebeurtenissen, gaat de database letterlijk op slot voor een paar uur. Ik heb je al verteld over de optimalisatie van de configuratie, en dit jaar hebben we ook de hardware vernieuwd: de servers hebben meer dan honderd gigabyte geheugen en schijfsystemen op SSD RAID's \u2013 het heeft geen zin om het verder lineair uit te breiden. Wat gaan we doen?<\/p>\n<p><b>MM:<\/b> \u2013 Begrijpelijk. Over het algemeen is MySQL een LTP-database. Blijkbaar is deze niet meer geschikt voor het opslaan van archieven van metrics van onze omvang. Laten we het uitzoeken.<\/p>\n<p><b>MC:<\/b> \u2013 Laten we dat doen!<\/p>\n<h3>Integratie van Zabbix en Clickhouse als resultaat van de hackathon<\/h3>\n<p>\nNa een tijdje hebben we interessante gegevens ontvangen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/46899e843b1e89524c6d762c1c167a6c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHet grootste deel van de ruimte in onze database was in gebruik door de archieven van metrics en minder dan 1% werd gebruikt voor configuraties, sjablonen en instellingen. Op dat moment hadden we al meer dan een jaar een Big Data-oplossing gebaseerd op Clickhouse in gebruik. De richting die we op moesten, was voor ons duidelijk. Tijdens onze lent Hackathon heb ik een integratie van Zabbix met Clickhouse geschreven voor de server en de frontend. Op dat moment ondersteunde Zabbix al ElasticSearch, en we besloten om ze te vergelijken.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/92fa3da527de48102cbdcf6959d46814.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Vergelijking van Clickhouse en Elasticsearch<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Voor de vergelijking genereerden we een belasting die gelijk was aan die van de Zabbix-server en keken we hoe de systemen zich zouden gedragen. We schreven gegevens in batches van 1000 regels, gebruikten CURL. We verwachtten vooraf dat Clickhouse effectiever zou zijn voor het belastingprofiel dat Zabbix genereert. De resultaten overtroffen zelfs onze verwachtingen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/354be7147b23a0bcb9ada3af93f59fac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOnder gelijke voorwaarden schreef Clickhouse drie keer zoveel gegevens tijdens de tests. Beide systemen verbruikten echter zeer effici\u00ebnt (weinig bronnen) bij het lezen van gegevens. Maar ElasticSearch had een groot aantal CPU-cycli nodig bij het schrijven:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/fea7f7f7801024cee0f9367c49d81d5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn totaal overtrof Clickhouse ElasticSearch aanzienlijk in CPU-verbruik en snelheid. Dankzij de gegevenscompressie gebruikt Clickhouse 11 keer minder schijfruimte en onderneemt ongeveer 30 keer minder schijfoperaties:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/50c24c4615ed350d7d78ec8655423409.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> \u2013 Ja, de schijfsysteemwerking van Clickhouse is zeer effici\u00ebnt gerealiseerd. Voor databases kunnen enorme SATA-schijven worden gebruikt, waardoor schrijfsnelheden van honderdduizenden regels per seconde mogelijk zijn. Het systeem ondersteunt 'out of the box' sharding en replicatie en is zeer eenvoudig in te stellen. We zijn meer dan tevreden over de exploitatie gedurende een jaar.<\/p>\n<p>Om resources te optimaliseren kan Clickhouse naast de bestaande hoofd database worden ge\u00efnstalleerd, waardoor een enorme hoeveelheid CPU-tijd en schijfoperaties kan worden bespaard. We hebben het archief van metrics naar de reeds bestaande Clickhouse-clusters verplaatst:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/4cf44eae47a13f2fc50377fec884ecc8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWe hebben de hoofd MySQL-database zo ontlast dat we deze konden combineren op \u00e9\u00e9n machine met de Zabbix-server en konden afzien van een aparte server voor MySQL.<\/p>\n<h3>Hoe werkt polling in Zabbix?<\/h3>\n<p>\n<i>4 maanden geleden<\/i><\/p>\n<p><b>MM:<\/b> \u2013 Nou, kunnen we de problemen met de database vergeten?<\/p>\n<p><b>MC:<\/b> \u00e2\u20ac\u201c Dat klopt! Een andere taak die we moeten aanpakken, is de trage gegevensverzameling. Nu zijn al onze 15 proxyservers overbelast met SNMP- en pollingprocessen. En er is niets anders dan steeds meer servers aan te schaffen.<\/p>\n<p><b>MM:<\/b> \u00e2\u20ac\u201c Geweldig. Maar vertel eerst, hoe is de polling in 'Zabbix' georganiseerd?<\/p>\n<p><b>MC:<\/b> \u00e2\u20ac\u201c In het kort, er zijn 20 soorten metrics en een tiental manieren om deze te verkrijgen. 'Zabbix' kan gegevens verzamelen in de modus 'verzoek - antwoord', of wacht op nieuwe gegevens via de 'Trapper Interface'.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/cb2d974ee113b4147a4a588c1f35c730.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHet is het vermelden waard dat deze manier (Trapper) in het originele 'Zabbix' de snelste is. <\/p>\n<p>Er zijn proxyservers voor belastingverdeling:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/7b5c94a82b7e06aff6df6ea5549babdf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProxies kunnen dezelfde verzamelfunctionaliteiten uitvoeren als de 'Zabbix'-server, door taken van hem te ontvangen en de verzamelde metrics via de Trapper-interface te verzenden. Dit is de officieel aanbevolen manier van belastingverdeling. Ook zijn proxies nuttig voor het monitoren van externe infrastructuur die via NAT of een trage verbinding werkt:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/dbfb2777f9dd9b4adb81f1fa89f3bdd5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u00e2\u20ac\u201c De architectuur is duidelijk. We moeten naar de broncode kijken...<\/p>\n<p><i>Een paar dagen later<\/i><\/p>\n<h3>Het verhaal van hoe nmap fping overwon<\/h3>\n<p>\n<b>MM:<\/b> \u00e2\u20ac\u201c Het lijkt erop dat ik iets heb ontdekt.<\/p>\n<p><b>MC:<\/b> \u00e2\u20ac\u201c Vertel het!<\/p>\n<p><b>MM:<\/b> \u00e2\u20ac\u201c Ik ontdekte dat 'Zabbix' bij beschikbaarheidschecks tot maximaal 128 hosts gelijktijdig controleert. Ik heb geprobeerd dit aantal te verhogen tot 500 en de interpacket vertraging in hun ping te verwijderen \u2013 dit verdubbelde de prestaties. Maar ik zou graag hogere cijfers willen zien.<\/p>\n<p><b>MC:<\/b> \u00e2\u20ac\u201c In mijn praktijk moet ik soms de beschikbaarheid van duizenden hosts controleren, en ik heb niets sneller dan nmap gevonden. Ik ben er zeker van dat dit de snelste manier is. Laten we het proberen! We moeten het aantal hosts per iteratie aanzienlijk verhogen.<\/p>\n<p><b>MM:<\/b> \u00e2\u20ac\u201c Meer dan vijfhonderd controleren? 600?<\/p>\n<p><b>MC:<\/b> \u00e2\u20ac\u201c Minimaal een paar duizend.<\/p>\n<p><b>MM:<\/b> \u00e2\u20ac\u201c Ok\u00e9. Het belangrijkste dat ik wilde zeggen: ik heb ontdekt dat de meeste polling in 'Zabbix' synchroon is gemaakt. We moeten het absoluut omzetten naar een asynchroon systeem. Dan kunnen we het aantal metrics dat door de pollers wordt verzameld, radicaal verhogen, vooral als we het aantal metrics per iteratie verhogen.<\/p>\n<p><b>MC:<\/b> \u00e2\u20ac\u201c Geweldig! En wanneer?<\/p>\n<p><b>MM:<\/b> \u00e2\u20ac\u201c Zoals gebruikelijk, gisteren.<\/p>\n<p><b>MC:<\/b> \u00e2\u20ac\u201c We hebben beide versies van fping en nmap vergeleken:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/4be4cfe019b6b318ae2fbdbf82577111.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOp een groot aantal hosts was nmap naar verwachting tot vijf keer effici\u00ebnter. Aangezien nmap alleen de beschikbaarheid en responstijd controleert, hebben we het verlies in triggers verplaatst en de controle-intervallen voor beschikbaarheid aanzienlijk verkort. We hebben het optimale aantal hosts voor nmap gevonden rond de 4000 per iteratie. Nmap heeft ons in staat gesteld om de CPU-kosten voor beschikbaarheid controles met drie keer te verlagen en het interval van 120 seconden tot 10 seconden te verkorten.<\/p>\n<h3>Optimalisatie van polling<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Vervolgens hebben we ons beziggehouden met pollers. We waren voornamelijk ge\u00efnteresseerd in het ophalen van SNMP en agents. In 'Zabbix' wordt polling synchronisch uitgevoerd en zijn er speciale maatregelen genomen om de effici\u00ebntie van het systeem te verhogen. In de synchronische modus leidt onbeschikbaarheid van hosts tot aanzienlijke degradatie van polling. Er is een geheel systeem van toestanden en er zijn speciale processen \u2013 de zogenaamde unreachable-pollers, die alleen met onbeschikbare hosts werken:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/6a001eff121f2392fffda69d719ebad6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDit is een opmerking die de matrix van toestanden toont, de complexiteit van het systeem van overgangen die vereist zijn om het systeem effici\u00ebnt te houden. Bovendien is de synchronische polling zelf behoorlijk traag:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/3579a4a3de85c37f812ba2ca71cf4b3d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDat is precies waarom duizenden poller-draden op een tiental proxies niet de benodigde hoeveelheid gegevens voor ons konden verzamelen. De asynchrone implementatie loste niet alleen de problemen met het aantal threads op, maar vereenvoudigde ook het systeem van onbeschikbare hosts-toestanden aanzienlijk, omdat de maximale wachttijd bij elke iteratie van polling 1 timeout was:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/c5f2d9bb3e558f8bba6bd8a96d8ed6a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDaarnaast hebben we het polling-systeem voor SNMP-aanvragen aangepast en verbeterd. Het probleem is dat de meeste hosts niet meerdere SNMP-aanvragen tegelijkertijd kunnen beantwoorden. Daarom hebben we een hybride modus gemaakt, waarbij SNMP-polling van dezelfde host asynchroon gebeurt:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/eb61766e8afce9bf72d6e9757492559e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDit wordt gedaan voor een hele batch hosts. Deze modus is uiteindelijk niet langzamer dan volledig asynchroon, aangezien het ophalen van anderhalve honderd SNMP-waarden nog steeds veel sneller is dan 1 timeout.<\/p>\n<p>Onze experimenten hebben aangetoond dat het optimale aantal aanvragen in \u00e9\u00e9n iteratie ongeveer 8000 is bij SNMP-polling. Totaal heeft de overstap naar de asynchrone modus de polling-prestaties met 200 keer versneld, met enkele honderden keren.<\/p>\n<p><b>MC:<\/b> De ontvangen pollingoptimalisaties hebben aangetoond dat we niet alleen alle proxy's kunnen afschaffen, maar ook de intervallen voor veel controles kunnen verkorten, terwijl proxy's niet meer nodig zijn als een manier om de belasting te verdelen.<\/p>\n<p><i>Ongeveer drie maanden geleden<\/i><\/p>\n<h3>Verander de architectuur \u2013 verhoog de belasting!<\/h3>\n<p>\n<b>MM:<\/b> Nou Max, is het tijd om naar productie te gaan? Ik heb een krachtige server en een goede engineer nodig.<\/p>\n<p><b>MC:<\/b> Dat klopt, laten we het plannen. Het is hoog tijd om vooruit te komen uit de stagnatie van 5000 metrische waarden per seconde.<\/p>\n<p><i>De ochtend na de upgrade<\/i><\/p>\n<p><b>MC:<\/b> Misha, we hebben een update uitgevoerd, maar tegen de ochtend zijn we teruggevallen\u2026 Raad eens welke snelheid we hebben bereikt?<\/p>\n<p><b>MM:<\/b> Maximaal ongeveer 20.000.<\/p>\n<p><b>MC:<\/b> Aha, 25! Helaas zitten we nog steeds op hetzelfde punt als waar we begonnen.<\/p>\n<p><b>MM:<\/b> Waarom is dat? Heb je enige diagnostiek verzameld?<\/p>\n<p><b>MC:<\/b> Ja, natuurlijk! Hier, bijvoorbeeld, een interessante top:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/09ac3336a820977b643ee5328ad2a851.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> Laten we eens kijken. Ik zie dat we een enorme hoeveelheid pollingthreads hebben geprobeerd:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/346e8047f1f6f2bb1b1dd91a728e437b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMaar we hebben het systeem zelfs niet voor de helft kunnen benutten:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/be1843dbec0fb10d8da59e8c570adc5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe totale prestaties zijn vrij laag, ongeveer 4000 metrische waarden per seconde:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/02eaf0b56629ebc6d3d5c132374a91b8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIs er nog iets?<\/p>\n<p><b>MC:<\/b> Ja, een strace van een van de pollers:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/73fc58bd2925859f6fbbcd118a0483c0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> Hier is duidelijk te zien dat het pollingproces wacht op 'semaforen'. Dit zijn blokkades:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/d0bec44a9677ec111066dccc1dd8c5dc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> Dat is niet duidelijk.<\/p>\n<p><b>MM:<\/b> Kijk, dit lijkt op een situatie waarin een heleboel threads proberen te werken met een bron, waar maar \u00e9\u00e9n tegelijk mee kan werken. Dan kunnen ze alleen deze bron in de tijd delen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/7dbb9e8941b01b666dd48f6301151ec9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn de totale prestatie bij het werken met zo'n bron is beperkt door de snelheid van \u00e9\u00e9n kern:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/e00b197577f4ea7350fe56665dbae299.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDit probleem kan op twee manieren worden opgelost.<\/p>\n<p>De hardware van de machine upgraden, overschakelen naar snellere kernen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/296d84b434ed7277fb558a8a4dd5ac47.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOf de architectuur veranderen en tegelijkertijd de belasting:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/efea73106440db4e5eda5aa475dd088b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> Trouwens, op de testmachine gebruiken we minder kernen dan op de productieomgeving, maar ze zijn 1,5 keer sneller qua kloksnelheid per kern!<\/p>\n<p><b>MM:<\/b> Duidelijk? We moeten naar de servercode kijken.<\/p>\n<h3>Dataflow in de Zabbix-server<\/h3>\n<p>\n<b>MC:<\/b> Om erachter te komen, zijn we gaan analyseren hoe de gegevens binnen de 'Zabbix'-server worden verzonden:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/b3d84e3fcb12e7afe3c974bdeacc357a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLeuke afbeelding, toch? Laten we stap voor stap doorlopen om het een beetje op te helderen. Er zijn threads en services verantwoordelijk voor het verzamelen van gegevens:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/966db6fa84723d4d3bde8a23736294d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe verzamelde metrics worden via een socket doorgegeven aan de Preprocessor manager, waar ze in een wachtrij worden opgeslagen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/1e34fe2c4194f7bd71ec409d6169fb94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe Preprocessor manager geeft de gegevens door aan zijn workers, die de instructies voor preprocessing uitvoeren en ze via dezelfde socket terugsturen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/d647caf3886f0c9378a32314e812edc1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDaarna slaat de preprocessor-manager ze op in de geschiedeniscache:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/ff0e29b0d974d76bd3a3b71d36a1cc68.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVan daaruit worden ze opgehaald door geschiedenis-synchronizers, die verschillende functies vervullen: bijvoorbeeld, het berekenen van triggers, het vullen van de waarde-cache en, bovenal, het opslaan van metrics in de geschiedenisopslag. Over het algemeen is het proces complex en behoorlijk verwarrend.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/c418a17edeb9153a03dff233aa8f715e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Het eerste wat we zagen, was dat de meeste threads concurreerden om de zogenaamde 'configuratie-cache' (geheugenruimte waarin alle serverconfiguraties worden opgeslagen). Vooral veel blokkades worden veroorzaakt door threads die verantwoordelijk zijn voor het ophalen van gegevens:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/589d8f564ece6e63457450e9c5081b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026aangezien in de configuratie niet alleen metrics met hun parameters worden opgeslagen, maar ook de wachtrijen waaruit de pollers informatie halen over wat ze vervolgens moeten doen. Wanneer er veel pollers zijn en \u00e9\u00e9n blokkeert de configuratie, wachten de anderen op verzoeken:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/8026cdfcd7def84cb3708b7255b08c66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Pollers mogen niet conflicteren<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/d436cd3415a6f58e1db5a609689c12b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDaarom is het eerste wat we deden, de wachtrij in 4 delen te splitsen en pollers onder veilige voorwaarden toe te staan om deze delen tegelijkertijd te blokkeren:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/9466e5f0053dff583e76713f10e30a89.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDit haalde de concurrentie om de configuratiecache weg en de snelheid van de pollers nam aanzienlijk toe. Maar toen stuiten we op het probleem dat de preprocessor-manager begon met het stapelen van taken in de wachtrij:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/dd58e625823310fb0a818ed81abdceac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>De preprocessor-manager moet prioriteiten kunnen stellen<\/h3>\n<p>\nDit gebeurde wanneer hij niet genoeg prestaties had. Toen kon hij alleen maar verzoeken van de gegevensverzamelprocessen stapelen en ze in een buffer plaatsen totdat hij al het geheugen opmaakte en crashte:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/b215d880863d470ea6ca960c6338b8ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOm dit probleem op te lossen, hebben we een tweede socket toegevoegd die speciaal voor de workers was toegewezen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/09d1bb92a009f9d29ba68d966de54210.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOp deze manier kreeg de preprocessor-manager de mogelijkheid om zijn werk te prioriteren en in geval van bufferuitbreiding de taak te pauzeren, waardoor de workers de kans kregen om deze buffer op te halen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/8f4db3661c428e6e6dcfe4cc0c44c016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVervolgens ontdekten we dat een van de redenen voor de vertraging de workers zelf waren, omdat ze concurreerden om een volledig onbelangrijke hulpbron voor hun werk. Dit probleem hebben we opgelost met een bug-fix, en in de nieuwe versies van 'Zabbix' is dit al verholpen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/eedb359823dd23d369339e3735e341fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Het aantal sockets verhogen \u2013 we krijgen resultaat<\/h3>\n<p>\nDaarna werd de preprocessor-manager de bottleneck, omdat dit \u00e9\u00e9n thread is. Hij stuitte op de snelheid van de core, wat een maximale snelheid gaf van ongeveer 70 duizend metrics per seconde:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/f93ccbc656c0f9e103873d99a9397495.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDaarom hebben we er vier gemaakt, met vier sets van sockets en workers:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/81a3dea3aa0f8807add8d045cf64a609.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEn dit heeft de snelheid verhoogd tot ongeveer 130.000 metrics:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/016ff07cd021a7221caef19e6ce36a9b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe niet-lineariteit van de groei wordt verklaard doordat er concurrentie ontstond voor de cache van de geschiedenis. Vier preprocessor-managers en history-syncers vochten om dit. Op dat moment haalden we ongeveer 130.000 metrics per seconde op de testmachine, waarbij we deze ongeveer voor 95% gebruikten qua CPU:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/62162254cd8bc66c1cef697158691588.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Ongeveer 2,5 maanden geleden<\/i><\/p>\n<h3>Het afzien van de snmp-community heeft het aantal NVP's met 1,5 keer verhoogd<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Max, ik heb een nieuwe testmachine nodig! We passen niet meer in de huidige.<\/p>\n<p><b>MC:<\/b> \u2013 Wat hebben we nu?<\/p>\n<p><b>MM:<\/b> \u2013 Op dit moment \u2013 130k NVP's en de processor 'in de kast'.<\/p>\n<p><b>MC:<\/b> \u2013 Wow! Geweldig! Wacht even, ik heb twee vragen. Volgens mijn berekeningen hebben we ongeveer 15-20.000 metrics per seconde nodig. Waarom hebben we meer nodig?<\/p>\n<p><b>MM:<\/b> \u2013 Ik wil het werk graag afmaken. Ik wil zien hoeveel we uit dit systeem kunnen halen.<\/p>\n<p><b>MC:<\/b> \u2013 Maar\u2026<\/p>\n<p><b>MM:<\/b> \u2013 Maar voor het bedrijf is het nutteloos.<\/p>\n<p><b>MC:<\/b> \u2013 Begrijpelijk. En de tweede vraag: kunnen we wat we nu hebben zelf ondersteunen, zonder hulp van een ontwikkelaar?<\/p>\n<p><b>MM:<\/b> \u2013 Ik denk het niet. De wijziging van het werken met de configuratiecache is een probleem. Dit betreft wijzigingen in de meeste threads en is vrij complex om te onderhouden. Waarschijnlijk zal het heel moeilijk zijn om dit te ondersteunen.<\/p>\n<p><b>MC:<\/b> \u2013 Dan moeten we een alternatief hebben.<\/p>\n<p><b>MM:<\/b> \u2013 Er is zo'n optie. We kunnen overstappen op snelle cores, terwijl we de nieuwe locksysteem afschaffen. We halen nog steeds een prestaties van 60-80 duizend metrics. Hierbij kunnen we al de andere code behouden. 'ClickHouse', asynchrone polling zullen blijven werken. En dit zal gemakkelijk te onderhouden zijn.<\/p>\n<p><b>MC:<\/b> \u2013 Geweldig! Laten we hier stoppen.<\/p>\n<p>Na de optimalisatie van de serverkant zijn we eindelijk in staat geweest om de nieuwe code in productie te zetten. We hebben sommige wijzigingen laten vallen ten gunste van de overstap naar een machine met snelle cores en het minimaliseren van de hoeveelheid wijzigingen in de code. We hebben ook de configuratie vereenvoudigd en waar mogelijk afzien van macro\u2019s in data-elementen, omdat deze extra locks veroorzaken.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/2b1ed396b09bd815fba973ebb5f73d76.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBijvoorbeeld, het afzien van de vaak voorkomende macro snmp-community in onze documentatie en voorbeelden heeft ons in staat gesteld om NVP's met ongeveer 1,5 keer te versnellen.<\/p>\n<p><i>Na twee dagen in productie<\/i><\/p>\n<h3>We verwijderen de pop-upvensters van incidentgeschiedenis<\/h3>\n<p>\n<b>MC:<\/b> Misha, we have been using the system for two days, and everything works. But only when everything is functioning! We had scheduled maintenance involving the transfer of a fairly large segment of the network, and we manually checked again what was up and what was not.<\/p>\n<p><b>MM:<\/b> It can't be! We checked everything 10 times. The server handles even complete network outages instantly.<\/p>\n<p><b>MC:<\/b> I get it: the server, database, top, austat, logs \u2013 everything is fast\u2026 But we look at the web interface, and there it is \u2013 the CPU 'in the rack' on the server and this:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/828a44d71f67ac585055bffcc01ab46e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> Got it. Let's check the web. We found that in situations with a large number of active incidents, most operational widgets started to work very slowly.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/22fdb735aa6136cd9967b40341d2a5cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe reason for this was the generation of pop-up windows with incident history, which are generated for each item in the list. Therefore, we gave up on generating these windows (commented out 5 lines of code), and that solved our problems.<\/p>\n<p>The loading time of the widgets, even during a complete outage, decreased from several minutes to an acceptable 10-15 seconds for us, and the history can still be viewed by clicking on the time:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/d15341ce76578880a23651a7a68dd802.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>After work. 2 months ago.<\/i><\/p>\n<p><b>MC:<\/b> Misha, are you leaving? We need to talk.<\/p>\n<p><b>MM:<\/b> I wasn't planning to. Is there again something with 'Zabbix'?<\/p>\n<p><b>MC:<\/b> No, relax! I just wanted to say: everything works, thank you! I'll buy you a beer.<\/p>\n<h3>Zabbix is effective.<\/h3>\n<p>\n'Zabbix' is a fairly versatile and rich system and functionality. It can be used for small installations 'out of the box', but as needs grow, it needs optimization. For storing a large archive of metrics, use appropriate storage:<\/p>\n<ul>\n<li>you can use the built-in tools in the form of integration with 'Elasticsearch' or export history to text files (available from the fourth version);<\/li>\n<li>you can use our experience and integration with 'ClickHouse'.<\/li>\n<\/ul>\n<p>\nTo drastically increase the speed of metric collection, collect them using asynchronous methods and pass them through the trapper interface to the 'Zabbix' server; or you can use a patch for the asynchronous polling of 'Zabbix' itself.<\/p>\n<p>Zabbix is written in C and is quite efficient. The solution's narrow architectural points allow us to further increase its performance and, based on our experience, to gather over 100,000 metrics on a single-processor machine.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/46559b481b5e53dc3cc3d2562a94531d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>The very same Zabbix patch<\/h3>\n<p>\n<b>MM:<\/b> \u2013 I want to add a couple of points. The current report, all tests, and figures are given for the configuration we are using. We are currently collecting about 20,000 metrics per second from it. If you are trying to understand whether this will work for you, you can compare. What has been discussed today is available on GitHub as a patch: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/miklert\/zabbix\">github.com\/miklert\/zabbix<\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/e5880b2f01cb03809057db08306b23c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nThe patch includes:<\/p>\n<ul>\n<li>full integration with ClickHouse (both for Zabbix servers and frontends);<\/li>\n<li>solution of issues with the preprocessor manager;<\/li>\n<li>asynchronous polling.<\/li>\n<\/ul>\n<p>\nThe patch is compatible with the entire version 4, including lts. Most likely, with minimal changes, it will work on version 3.4.<\/p>\n<p>Bedankt voor uw aandacht.<\/p>\n<h3>Vragen<\/h3>\n<p>\nQuestion from the audience (hereinafter \u2013 A): \u2013 Good afternoon! Please tell me, do you have plans for intensive interaction with the Zabbix team or them with you, so that it is not a patch, but a normal behavior of Zabbix?<\/p>\n<p><b>MM:<\/b> \u2013 Yes, we will definitely commit some of the changes. Some things will stay in the patch.<\/p>\n<p><b>A:<\/b> \u2013 Thank you very much for the great report! Please tell me, after applying the patch, will the support from Zabbix remain and how can one further upgrade to higher versions? Will it be possible to upgrade Zabbix after your patch to 4.2, 5.0?<\/p>\n<p><b>MM:<\/b> \u2013 I cannot say anything about support. If I were Zabbix support, I would probably say no, because this is someone else's code. As for the code base 4.2, our position is this: \"We will keep up with the times and will upgrade ourselves to the next version.\" Therefore, for some time, we will be releasing patches for updated versions. I already mentioned in the report: the number of changes with versions is still quite small. I think the transition from 3.4 to 4 took us about 15 minutes. Something changed, but not very significantly.<\/p>\n<p><b>A:<\/b> \u2013 So you plan to support your patch and it can be safely deployed in production while receiving updates in some way?<\/p>\n<p><b>MM:<\/b> \u2013 We categorically recommend it. It solves a lot of problems for us.<\/p>\n<p><b>MC:<\/b> \u2013 Nogmaals wil ik benadrukken dat de wijzigingen die niet betrekking hebben op de architectuur en die niet gaan over blokkades of wachtrijen modulair zijn; ze bevinden zich in afzonderlijke modules. Zelfs zelfstandig bij kleine wijzigingen kunnen deze vrij gemakkelijk worden onderhouden.<\/p>\n<p><b>MM:<\/b> \u2013 Als u ge\u00efnteresseerd bent in de details, dan gebruikt \u2018Clickhouse\u2019 de zogenaamde geschiedenisbibliotheek. Deze is losgekoppeld; het is een kopie van de ondersteuning voor \u2018Elasticsearch\u2019, wat betekent dat deze configureerbaar is. Polling verandert alleen de pollers. Wij denken dat dit lang zal blijven werken.<\/p>\n<p><b>A:<\/b> \u2013 Hartelijk bedankt. Kunt u me vertellen of er documentatie is over de aangebrachte veranderingen?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersoft): Zabbix, 100kNVPS op \u00e9\u00e9n server\" src=\"\/wp-content\/uploads\/2020\/02\/f3842ba578f736721c96794941b8f071.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 De documentatie is de patch. Voor de duidelijkheid, met de introductie van \u2018Clickhouse\u2019 en de nieuwe soorten pollers ontstaan nieuwe configuratie-opties. Via de link in de laatste dia is er een korte beschrijving hoe hiermee om te gaan.<\/p>\n<h3>Over de vervanging van fping door nmap<\/h3>\n<p>\n<b>A:<\/b> \u2013 Hoe heeft u dat uiteindelijk gerealiseerd? Kunt u met concrete voorbeelden komen: heeft u strappers en een extern script? Wat controleert uiteindelijk zo snel zo\u2019n groot aantal hosts? Hoe haalt u deze hosts binnen? Moet nmap ze op een of andere manier krijgen, ergens vandaan halen, opslaan, iets starten\u2026?<\/p>\n<p><b>MM:<\/b> \u2013 Cool. Erg goede vraag! De essentie is als volgt. We hebben de bibliotheek (ICMP-ping, een onderdeel van \u2018Zabbix\u2019) gemodificeerd voor ICMP-controles, waarin het aantal pakketten is opgegeven \u2013 \u00e9\u00e9n (1), en de code probeert nmap te gebruiken. Dit betekent dat het een interne functie van \u2018Zabbix\u2019 is, en dat is nu de interne functie van de pinger geworden. Dienovereenkomstig zijn er geen synchronisatie of gebruik van traps vereist. Dit was bewust gedaan om het systeem heel te houden en niet te hoeven synchroniseren tussen de twee databases: wat te controleren, te laden via de poller, en of onze upload niet is stuk gegaan... Dit is veel eenvoudiger.<\/p>\n<p><b>A:<\/b> \u2013 Werkt het ook voor proxy?<\/p>\n<p><b>MM:<\/b> \u2013 Ja, maar we hebben het niet getest. De pollingcode is zowel in \u2018Zabbix\u2019 als op de server identiek. Het zou moeten werken. Nogmaals, ik benadruk: de systeemprestaties zijn zo dat we geen proxy nodig hebben.<\/p>\n<p><b>MC:<\/b> \u2013 Het juiste antwoord op de vraag zou zijn: \u2018Waarom heeft u een proxy nodig bij zo\u2019n systeem?\u2019 Alleen vanwege NAT of omdat u door een langzame verbinding wilt monitoren of zo\u2026<\/p>\n<p><b>A:<\/b> \u2013 En u gebruikt \u2018Zabbix\u2019 als alerting-tool, als ik het goed heb begrepen. Of zijn de grafieken (waar de archieflaag is) verhuisd naar een ander systeem, zoals Grafana? Of gebruikt u deze functionaliteit niet?<\/p>\n<p><b>MM:<\/b> \u2013 Ik benadruk het nogmaals: we hebben een volledige integratie gemaakt. We zetten de geschiedenis naar 'ClickHouse', maar tegelijkertijd hebben we de PHP-frontend aangepast. De PHP-frontend maakt verbinding met 'ClickHouse' en genereert alle grafieken daarvandaan. Eerlijk gezegd hebben we ook een deel dat gegevens uit dezelfde 'ClickHouse', vanuit dezelfde 'Zabbix'-data, in andere grafische weergavesystemen bouwt.<\/p>\n<p><b>MC:<\/b> \u2013 Ook in 'Grafana'.<\/p>\n<h3>Hoe is de beslissing genomen over de toewijzing van middelen?<\/h3>\n<p>\n<b>A:<\/b> \u2013 Deel wat interne details. Hoe is de beslissing genomen om middelen toe te wijzen voor een serieuze herziening van het product? Dat brengt immers bepaalde risico's met zich mee. En vertel, alstublieft, in de context van uw intenties om nieuwe versies te ondersteunen: hoe rechtvaardigt u deze beslissing vanuit het managementperspectief?<\/p>\n<p><b>MM:<\/b> \u2013 Blijkbaar hebben we het dramaverhaal niet zo goed verteld. We bevonden ons in een situatie waarin we iets moesten doen en zijn in feite met twee parallelle teams gegaan:<\/p>\n<ul>\n<li>Het ene team was bezig met het opzetten van monitoring systemen met nieuwe methoden: monitoring als service, een standaardset van open-source oplossingen die we combineren en vervolgens proberen de bedrijfsprocessen aan te passen om met het nieuwe monitorsysteem te werken.<\/li>\n<li>Tegelijkertijd hadden we een enthousiaste programmeur die hiermee bezig was (over zichzelf). Het toeval wilde dat hij het uiteindelijk won.<\/li>\n<\/ul>\n<p>\n<b>A:<\/b> \u2013 En wat is de grootte van het team?<\/p>\n<p><b>MC:<\/b> \u2013 Het team staat voor je.<\/p>\n<p><b>A:<\/b> \u2013 Dus zoals altijd is er een passioneer nodig?<\/p>\n<p><b>MM:<\/b> \u2013 Ik weet niet wat een passioneer is.<\/p>\n<p><b>A:<\/b> \u2013 In dit geval, blijkbaar, bent u dat. Heel erg bedankt, jullie zijn geweldig.<\/p>\n<p><b>MM:<\/b> \u2013 Dank je wel.<\/p>\n<h3>Over patches voor Zabbix<\/h3>\n<p>\n<b>A:<\/b> \u2013 Voor een systeem dat proxy's gebruikt (bijvoorbeeld in gedistribueerde systemen), is het mogelijk om jullie oplossing aan te passen en patches te maken voor de pollers, proxies en gedeeltelijk de preprocessor van 'Zabbix'; en hun interactie? Is het mogelijk om bestaande ontwikkelingen te optimaliseren voor een systeem met meerdere proxy's?<\/p>\n<p><b>MM:<\/b> \u2013 Ik weet dat de 'Zabbix'-server wordt opgebouwd met behulp van proxy's (gecompileerd en er komt code uit). We hebben dit niet in productie getest. Ik ben daar niet zeker van, maar volgens mij wordt de preprocessor-manager niet gebruikt in de proxy. De taak van de proxy is om een set metrics van 'Zabbix' te nemen, deze op te halen (hij slaat ook de configuratie, lokale database op) en deze terug te geven aan de 'Zabbix'-server. De preprocessing zal later door de server zelf worden gedaan, wanneer hij deze ontvangt.<\/p>\n<p>De interesse in proxies is begrijpelijk. We zullen dit onderzoeken. Het is een interessant onderwerp.<\/p>\n<p><b>A:<\/b> \u2013 Het idee was als volgt: als je pollers kunt patchen, kun je ze patchen voor proxies en de interactie met de server patchen, en de preprocessor alleen voor deze doeleinden op de server aanpassen.<\/p>\n<p><b>MM:<\/b> \u2013 Ik denk dat het zelfs eenvoudiger is. Je neemt de code, past de patch toe, configureert het zoals je wilt \u2013 verzamelt proxyservers (bijvoorbeeld met ODBC) en verspreidt de gepatchte code over de systemen. Waar nodig verzamel je proxies, waar nodig servers.<\/p>\n<p><b>A:<\/b> \u2013 Het zal hoogstwaarschijnlijk niet nodig zijn om de overdracht van proxies naar de server extra te patchen?<\/p>\n<p><b>MC:<\/b> \u2013 Nee, dat is standaard.<\/p>\n<p><b>MM:<\/b> \u2013 Eigenlijk is een van de idee\u00ebn nooit genoemd. We hebben altijd geprobeerd een balans te vinden tussen een overdaad aan idee\u00ebn en het aantal wijzigingen, en de eenvoud van onderhoud.<\/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=\"Video afspelen\" 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>Een beetje reclame \ud83d\ude42<\/h3>\n<p>\nBedankt dat je bij ons blijft. Houd je van onze artikelen? Wil je meer interessante inhoud zien? Ondersteun ons door een bestelling te plaatsen of ons aan vrienden aan te bevelen, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">cloud VPS voor ontwikkelaars vanaf $4,99<\/a><\/noindex>, <b>een unieke variant van entry-level servers, die we voor jou hebben bedacht:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">De waarheid over VPS (KVM) E5-2697 v3 (6 Kernen) 10GB DDR4 480GB SSD 1Gbps vanaf $19 of hoe deel je een server correct?<\/a><\/noindex> (opties beschikbaar met RAID1 en RAID10, tot 24 cores en tot 40GB DDR4).<\/p>\n<p><b>Dell R730xd is 2 keer goedkoper in datacenter Equinix Tier IV in Amsterdam?<\/b> Alleen bij ons <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 vanaf $199<\/a><\/noindex> in Nederland! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 vanaf $99!<\/b><\/b> Lees over hoe <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">je een infrastructuur van bedrijfsniveau kunt opbouwen met Dell R730xd E5-2650 v4 servers die wel \u20ac9000 kosten voor een prikkie?<\/a><\/noindex><br \/>\n<br \/>Bron: <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.3 - 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\/nl\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"nl_NL\" \/>\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\/nl\/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++, Michail Makurov, Maxim Tchernetsov (Intersvyaz): Zabbix, 100kNVPS op \u00e9\u00e9n server | ProHoster","description":"De volgende HighLoad++ conferentie vindt plaats op 6 en 7 april 2020 in St. Petersburg. Details en tickets via de link.","canonical_url":"https:\/\/prohoster.info\/nl\/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":"nl_NL","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\/nl\/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\/nl\/wp-json\/wp\/v2\/posts\/56049","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/comments?post=56049"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/posts\/56049\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/media?parent=56049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/categories?post=56049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/nl\/wp-json\/wp\/v2\/tags?post=56049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}