{"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\/it\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","title":{"rendered":"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>La prossima conferenza HighLoad++ si terr\u00e0 il 6 e 7 aprile 2020 a San Pietroburgo. Maggiori dettagli e biglietti <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2sSxgBx\">al link<\/a><\/noindex>. HighLoad++ Mosca 2018. Sala \u00abMosca\u00bb. 9 novembre, 15:00. Riassunti e <noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/moscow\/2018\/abstracts\/4141\">presentazione<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/5c3e11c8449de7375d30b2cd75b5927e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n* Monitoraggio \u2014 online e analisi.<br \/>\n* Principali limitazioni della piattaforma ZABBIX.<br \/>\n* Soluzione per la scalabilit\u00e0 dello storage analitico.<br \/>\n* Ottimizzazione del server ZABBIX.<br \/>\n* Ottimizzazione dell'interfaccia utente.<br \/>\n* Esperienza nell'operare il sistema con carichi superiori a 40k NVPS.<br \/>\n* Brevi conclusioni.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>Mikhail Makurov (d'ora in poi \u2013 MM):<\/b> \u2013 Ciao a tutti!<\/p>\n<p><b>Maxim Chernetsov (d'ora in poi \u2013 MC):<\/b> \u2013 Buongiorno!<\/p>\n<p><b>MM:<\/b> \u2013 Permettetemi di presentarvi Maxim. Max \u00e8 un ingegnere di talento, il miglior esperto di rete che conosca. Maxim si occupa di reti e servizi, del loro sviluppo e del loro funzionamento.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/a7fc62a03c0aede46f4a4695845daa22.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> \u2013 E io vorrei parlare di Mikhail. Mikhail \u00e8 uno sviluppatore in C. Ha scritto diverse soluzioni ad alta richiesta per l'elaborazione del traffico per la nostra azienda. Viviamo e lavoriamo negli Urali, nella citt\u00e0 di uomini duri, Chelyabinsk, nella compagnia \u00abIntersvyaz\u00bb. La nostra azienda \u00e8 un fornitore di servizi internet e televisione via cavo per un milione di persone in 16 citt\u00e0.<\/p>\n<p><b>MM:<\/b> \u2013 E bisogna dire che \u00abIntersvyaz\u00bb \u00e8 molto pi\u00f9 di un semplice provider, \u00e8 una compagnia IT. La maggior parte delle nostre soluzioni \u00e8 realizzata dal nostro reparto IT.<\/p>\n<p><b>A:<\/b> dai server che elaborano il traffico, al call center e all'app mobile. Nel reparto IT ci sono attualmente circa 80 persone con competenze molto diverse.<\/p>\n<h3>Su Zabbix e la sua architettura<\/h3>\n<p>\n<b>MC:<\/b> \u2013 E ora cercher\u00f2 di stabilire un record personale e descrivere cos'\u00e8 Zabbix (d'ora in poi \u2013 \u00abZabbix\u00bb) in un minuto.<\/p>\n<p>\u00abZabbix\u00bb si posiziona come un sistema di monitoraggio \u00abpronto all'uso\u00bb a livello enterprise. Ha molte funzionalit\u00e0 che semplificano la vita: regole di escalation avanzate, API per integrazione, raggruppamento e auto-scoperta di host e metriche. In \u00abZabbix\u00bb ci sono i cosiddetti strumenti di scalabilit\u00e0 - proxy. \u00abZabbix\u00bb \u00e8 un sistema open source.<\/p>\n<p>Breve panoramica dell'architettura. Si pu\u00f2 dire che \u00e8 composta da tre componenti:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/0d2ae3ee04d00885d65e17b8cf44182b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Server. Scritto in C. Con una gestione piuttosto complessa e trasferimento di informazioni tra i thread. Tutta l'elaborazione avviene in esso: dalla ricezione alla conservazione nel database.<\/li>\n<li>Tutti i dati sono memorizzati nel database. \u00abZabbix\u00bb supporta MySQL, PostgreSQL e Oracle.<\/li>\n<li>L'interfaccia web \u00e8 scritta in PHP. Nella maggior parte dei sistemi \u00e8 fornita con il server Apache, ma funziona in modo pi\u00f9 efficace in combinazione con nginx + php.<\/li>\n<\/ul>\n<p>\nOggi vorremmo raccontare una storia dalla vita della nostra azienda, legata a \u00abZabbix\u00bb\u2026<\/p>\n<h3>Storia dalla vita dell'azienda \u00abIntersvyaz\u00bb. Cosa abbiamo e di cosa abbiamo bisogno?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/407c35b81995ddca6444fa418941063f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>5 o 6 mesi fa. Un giorno dopo il lavoro\u2026<\/i><\/p>\n<p><b>MC:<\/b> \u2013 Misha, ciao! Sono contento di averti raggiunto \u2013 devo parlarti. Abbiamo di nuovo avuto problemi con il monitoraggio. Durante un grande guasto tutto si bloccava e non c'era alcuna informazione sullo stato della rete. Purtroppo, questo succede non \u00e8 la prima volta. Ho bisogno del tuo aiuto. Facciamo in modo che il nostro monitoraggio funzioni in ogni situazione!<\/p>\n<p><b>MM:<\/b> \u2013 Ma iniziamo sincronicamente. Non ci sono andato da un paio d'anni. Se non ricordo male, abbiamo abbandonato Nagios e siamo passati a \u00abZabbix\u00bb circa 8 anni fa. E ora abbiamo, sembra, 6 server potenti e circa una dozzina di proxy. Non mi sbaglio?<\/p>\n<p><b>MC:<\/b> \u2013 Quasi. 15 server, alcuni dei quali sono macchine virtuali. La cosa pi\u00f9 importante \u00e8 che questo non ci salva nel momento in cui ne abbiamo pi\u00f9 bisogno. Quando si verifica un guasto, i server si bloccano e non si vede nulla. Abbiamo provato a ottimizzare la configurazione, ma non ha dato un incremento di prestazioni ottimale.<\/p>\n<p><b>MM:<\/b> \u2013 Capito. Hai guardato qualcosa, hai gi\u00e0 raccolto qualche dato dalla diagnostica?<\/p>\n<p><b>MC:<\/b> \u2013 La prima cosa con cui dobbiamo fare i conti \u00e8 proprio il DB. MySQL \u00e8 gi\u00e0 costantemente carico, memorizzando nuove metriche, e quando \u00abZabbix\u00bb inizia a generare un sacco di eventi, il database va in crisi letteralmente per diverse ore. Ti ho gi\u00e0 parlato dell\u2019ottimizzazione della configurazione, ma quest'anno abbiamo aggiornato l'hardware: sui server ci sono pi\u00f9 di cento giga di RAM e array di dischi su RAID SSD \u2013 continuare a farlo crescere in modo lineare non ha senso. Cosa facciamo?<\/p>\n<p><b>MM:<\/b> \u2013 Capito. In realt\u00e0, MySQL \u00e8 una base LTP. A quanto pare non \u00e8 pi\u00f9 adatta per memorizzare l'archivio di metriche delle nostre dimensioni. Cominciamo a risolvere il problema.<\/p>\n<p><b>MC:<\/b> \u2013 Facciamo!<\/p>\n<h3>Integrazione di Zabbix e Clickhouse come risultato del hackathon<\/h3>\n<p>\nDopo un po' di tempo, abbiamo ottenuto dati interessanti:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/46899e843b1e89524c6d762c1c167a6c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa maggior parte dello spazio nel nostro database era occupata dall'archivio delle metriche e meno dell'1% era utilizzato per la configurazione, i modelli e le impostazioni. A quel punto avevamo gi\u00e0 utilizzato la soluzione Big Data basata su Clickhouse per oltre un anno. La direzione da prendere era chiara. Durante il nostro \"Hackathon\" primaverile, ho scritto un'integrazione tra Zabbix e Clickhouse per il server e il frontend. A quel tempo, Zabbix supportava gi\u00e0 ElasticSearch, e abbiamo deciso di confrontarli.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/92fa3da527de48102cbdcf6959d46814.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Confronto tra Clickhouse ed Elasticsearch<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Per il confronto generavamo un carico pari a quello fornito dal server Zabbix e osservavamo come si comportavano i sistemi. Scrivevamo dati in batch di 1000 righe, utilizzando CURL. Presupponevamo in anticipo che Clickhouse sarebbe stato pi\u00f9 efficiente per quel profilo di carico generato da Zabbix. I risultati hanno sorpreso le nostre aspettative:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/354be7147b23a0bcb9ada3af93f59fac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn condizioni identiche nei test, Clickhouse scriveva tre volte pi\u00f9 dati. Entrambi i sistemi consumavano risorse in modo molto efficiente nella lettura dei dati. Tuttavia, per ElasticSearch la scrittura richiedeva un alto utilizzo della CPU:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/fea7f7f7801024cee0f9367c49d81d5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn sintesi, Clickhouse superava significativamente ElasticSearch in termini di utilizzo della CPU e velocit\u00e0. Grazie alla compressione dei dati, Clickhouse utilizza 11 volte meno spazio su disco e compie circa 30 volte meno operazioni su disco:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/50c24c4615ed350d7d78ec8655423409.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> \u2013 S\u00ec, la gestione del sistema di archiviazione in Clickhouse \u00e8 realizzata molto efficacemente. \u00c8 possibile utilizzare enormi dischi SATA per i database e ottenere velocit\u00e0 di scrittura di centinaia di migliaia di righe al secondo. Il sistema supporta out-of-the-box sharding, replica ed \u00e8 abbastanza semplice da configurare. Siamo molto soddisfatti del suo utilizzo durante l'anno.<\/p>\n<p>Per ottimizzare le risorse, \u00e8 possibile installare Clickhouse accanto al database principale esistente, risparmiando cos\u00ec una grande quantit\u00e0 di tempo di CPU e operazioni su disco. Abbiamo trasferito l'archivio delle metriche sui cluster Clickhouse esistenti:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/4cf44eae47a13f2fc50377fec884ecc8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAbbiamo alleggerito cos\u00ec tanto il database MySQL principale, da poterlo unire sulla stessa macchina con il server Zabbix e rinunciare a un server dedicato per MySQL.<\/p>\n<h3>Come funziona il polling in Zabbix?<\/h3>\n<p>\n<i>4 mesi fa<\/i><\/p>\n<p><b>MM:<\/b> \u2013 Beh, possiamo dimenticare i problemi con il database?<\/p>\n<p><b>MC:<\/b> \u2013 Esatto! Un'altra questione che dobbiamo affrontare \u00e8 la raccolta dati lenta. Ora tutti i nostri 15 proxy sono sovraccarichi con i processi SNMP e polling. E non ci sono alternative, se non installare nuovi server.<\/p>\n<p><b>MM:<\/b> \u2013 Ottimo. Ma prima dimmi come funziona il polling in Zabbix?<\/p>\n<p><b>MC:<\/b> \u2013 In breve, ci sono 20 tipi di metriche e dozzine di modi per ottenerle. Zabbix pu\u00f2 raccogliere dati sia in modalit\u00e0 \"richiesta - risposta\", sia attendere nuovi dati tramite l'Interfaccia Trapper.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/cb2d974ee113b4147a4a588c1f35c730.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c8 importante notare che nel Zabbix originale questo metodo (Trapper) \u00e8 il pi\u00f9 veloce. <\/p>\n<p>Esistono proxy per distribuire il carico:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/7b5c94a82b7e06aff6df6ea5549babdf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nI proxy possono eseguire le stesse funzioni di raccolta del server Zabbix, ricevendo compiti da esso e inviando le metriche raccolte tramite l'interfaccia Trapper. Questo \u00e8 il metodo ufficialmente raccomandato per la distribuzione del carico. Inoltre, i proxy sono utili per il monitoraggio di infrastrutture remote che operano attraverso NAT o canali lenti:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/dbfb2777f9dd9b4adb81f1fa89f3bdd5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Con l'architettura \u00e8 tutto chiaro. Dobbiamo guardare il codice sorgente...<\/p>\n<p><i>Qualche giorno dopo<\/i><\/p>\n<h3>La storia di come nmap ha sconfitto fping<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Sembra che abbia trovato qualcosa.<\/p>\n<p><b>MC:<\/b> \u2013 Racconta!<\/p>\n<p><b>MM:<\/b> \u2013 Ho scoperto che durante i controlli di disponibilit\u00e0 Zabbix verifica al massimo 128 host contemporaneamente. Ho provato a aumentare questo numero fino a 500 e ho rimosso l'intervallo tra i pacchetti nel loro ping \u2013 questo ha raddoppiato le prestazioni. Ma vorrei numeri pi\u00f9 grandi.<\/p>\n<p><b>MC:<\/b> \u2013 Nella mia pratica, a volte devo controllare la disponibilit\u00e0 di migliaia di host e non ho trovato niente di pi\u00f9 veloce di nmap. Sono sicuro che sia il metodo pi\u00f9 rapido. Proviamolo! Dobbiamo aumentare significativamente il numero di host per iterazione.<\/p>\n<p><b>MM:<\/b> \u2013 Controllare pi\u00f9 di cinquecento? 600?<\/p>\n<p><b>MC:<\/b> \u2013 Almeno un paio di migliaia.<\/p>\n<p><b>MM:<\/b> \u2013 Ok. La cosa pi\u00f9 importante che volevo dire: ho scoperto che la maggior parte del polling in Zabbix \u00e8 fatto in modo sincrono. Dobbiamo assolutamente cambiarlo in modalit\u00e0 asincrona. Allora potremo aumentare drasticamente il numero di metriche raccolte dai poller, specialmente se aumentiamo il numero di metriche per iterazione.<\/p>\n<p><b>MC:<\/b> \u2013 Fantastico! E quando?<\/p>\n<p><b>MM:<\/b> \u2013 Come al solito, ieri.<\/p>\n<p><b>MC:<\/b> \u2013 Abbiamo confrontato entrambe le versioni di fping e nmap:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/4be4cfe019b6b318ae2fbdbf82577111.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSu un gran numero di host, nmap \u00e8 stato prevedibilmente fino a cinque volte pi\u00f9 efficace. Poich\u00e9 nmap verifica solo la disponibilit\u00e0 e il tempo di risposta, abbiamo trasferito il conteggio delle perdite nei trigger e notevolmente ridotto gli intervalli di verifica della disponibilit\u00e0. Abbiamo identificato un numero ottimale di host per nmap intorno ai 4.000 per singola iterazione. Nmap ci ha permesso di ridurre di tre volte il carico della CPU per le verifiche di disponibilit\u00e0 e di accorciare l'intervallo da 120 secondi a 10.<\/p>\n<h3>Ottimizzazione del polling<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Dopodich\u00e9 ci siamo occupati dei poller. Eravamo principalmente interessati al prelievo SNMP e agli agenti. In \u00abZabbix\u00bb, il polling \u00e8 stato eseguito in modo sincrono e sono state adottate misure speciali per aumentare l'efficienza del sistema. In modalit\u00e0 sincrona, la non disponibilit\u00e0 degli host provoca una significativa degradazione del polling. Esiste un'intera rete di stati e processi speciali \u2013 i cosiddetti poller unreachable, che lavorano solo con host non disponibili:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/6a001eff121f2392fffda69d719ebad6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuesto \u00e8 un commento che dimostra la matrice degli stati, tutta la complessit\u00e0 del sistema di transizioni necessarie per mantenere il sistema efficace. Inoltre, il polling sincrono stesso \u00e8 piuttosto lento:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/3579a4a3de85c37f812ba2ca71cf4b3d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c8 per questo che migliaia di thread di poller su una decina di proxy non sono riusciti a raccogliere la quantit\u00e0 di dati necessaria. L'implementazione asincrona ha risolto non solo i problemi con il numero di thread, ma ha anche semplificato notevolmente il sistema di stati degli host non disponibili, poich\u00e9 con qualsiasi numero di elementi verificati in una singola iterazione di polling, il tempo massimo di attesa era di 1 timeout:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/c5f2d9bb3e558f8bba6bd8a96d8ed6a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn aggiunta, abbiamo modificato e migliorato il sistema di polling per le richieste SNMP. Il fatto \u00e8 che la maggior parte non pu\u00f2 rispondere a pi\u00f9 richieste SNMP simultaneamente. Pertanto, abbiamo creato una modalit\u00e0 ibrida, in cui il polling SNMP dello stesso host viene eseguito in modo asincrono:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/eb61766e8afce9bf72d6e9757492559e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuesto viene fatto per l'intero gruppo di host. Tale modalit\u00e0 non \u00e8 pi\u00f9 lenta di quella completamente asincrona, poich\u00e9 il sondaggio di un centinaio e mezzo di valori SNMP \u00e8 comunque molto pi\u00f9 veloce di 1 timeout.<\/p>\n<p>I nostri esperimenti hanno dimostrato che il numero ottimale di richieste in una singola iterazione \u00e8 di circa 8.000 durante il polling SNMP. Complessivamente, il passaggio alla modalit\u00e0 asincrona ha permesso di accelerare le prestazioni del polling di 200 volte, e di alcune centinaia di volte.<\/p>\n<p><b>MC:<\/b> Le ottimizzazioni del polling hanno mostrato che non solo possiamo eliminare tutti i proxy, ma anche ridurre gli intervalli per molti controlli, e i proxy non saranno pi\u00f9 necessari come metodo di bilanciamento del carico.<\/p>\n<p><i>Circa tre mesi fa<\/i><\/p>\n<h3>Cambia l'architettura \u2013 aumenta il carico!<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Allora, Max, \u00e8 ora di passare alla produzione? Ho bisogno di un server potente e di un buon ingegnere.<\/p>\n<p><b>MC:<\/b> \u2013 Bene, pianifichiamo. \u00c8 ora di muoverci da quel punto morto delle 5.000 metriche al secondo.<\/p>\n<p><i>Mattina dopo l'aggiornamento<\/i><\/p>\n<p><b>MC:<\/b> \u2013 Misha, ci siamo aggiornati, ma per stamattina siamo tornati indietro... Indovina a quale velocit\u00e0 siamo riusciti ad arrivare?<\/p>\n<p><b>MM:<\/b> \u2013 Massimo 20.000.<\/p>\n<p><b>MC:<\/b> \u2013 Ah, 25! Sfortunatamente, siamo l\u00ec dove eravamo all'inizio.<\/p>\n<p><b>MM:<\/b> \u2013 Perch\u00e9 \u00e8 successo? Abbiamo effettuato qualche diagnosi?<\/p>\n<p><b>MC:<\/b> \u2013 Certo! Ecco, ad esempio, un interessante top:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/09ac3336a820977b643ee5328ad2a851.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Vediamo. Vedo che abbiamo provato un'enorme quantit\u00e0 di thread di polling:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/346e8047f1f6f2bb1b1dd91a728e437b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMa non siamo riusciti nemmeno a utilizzare il sistema per met\u00e0:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/be1843dbec0fb10d8da59e8c570adc5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nE la produzione totale \u00e8 abbastanza bassa, circa 4.000 metriche al secondo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/02eaf0b56629ebc6d3d5c132374a91b8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC'\u00e8 qualcos'altro?<\/p>\n<p><b>MC:<\/b> \u2013 S\u00ec, strace di uno dei poller:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/73fc58bd2925859f6fbbcd118a0483c0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Qui \u00e8 chiaramente visibile che il processo di polling sta aspettando i \"semafori\". Queste sono le blocchi:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/d0bec44a9677ec111066dccc1dd8c5dc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> \u2013 Non chiaro.<\/p>\n<p><b>MM:<\/b> \u2013 Guarda, sembra una situazione in cui molti thread stanno cercando di lavorare con una risorsa che pu\u00f2 essere utilizzata solo da uno alla volta. Allora tutto ci\u00f2 che possono fare \u00e8 condividere questa risorsa nel tempo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/7dbb9e8941b01b666dd48f6301151ec9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nE la produttivit\u00e0 totale con tale risorsa \u00e8 limitata dalla velocit\u00e0 di un singolo core:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/e00b197577f4ea7350fe56665dbae299.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u00c8 possibile risolvere questo problema in due modi.<\/p>\n<p>Potenziare l'hardware della macchina, optando per core pi\u00f9 veloci:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/296d84b434ed7277fb558a8a4dd5ac47.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOppure cambiare architettura e, parallelamente, il carico:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/efea73106440db4e5eda5aa475dd088b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MC:<\/b> \u2013 A proposito, sulla macchina di test useremo un numero minore di core rispetto a quella di produzione, ma saranno 1,5 volte pi\u00f9 veloci in termini di frequenza per core!<\/p>\n<p><b>MM:<\/b> \u2013 Chiaro? Dobbiamo controllare il codice del server.<\/p>\n<h3>Il percorso dei dati nel server Zabbix<\/h3>\n<p>\n<b>MC:<\/b> \u2013 Per capire, abbiamo iniziato ad analizzare come i dati vengono trasferiti all'interno del server \"Zabbix\":<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/b3d84e3fcb12e7afe3c974bdeacc357a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBella immagine, vero? Facciamo un passo alla volta per chiarire un po'. Ci sono thread e servizi responsabili della raccolta dei dati:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/966db6fa84723d4d3bde8a23736294d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe metriche raccolte vengono inviate tramite un socket al gestore del preprocessore, dove vengono salvate in coda:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/1e34fe2c4194f7bd71ec409d6169fb94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl \"gestore del preprocessore\" invia i dati ai suoi lavoratori, che eseguono le istruzioni di preelaborazione e li restituiscono tramite lo stesso socket:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/d647caf3886f0c9378a32314e812edc1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDopo di ci\u00f2, il gestore del preprocessore salva nella cache della cronologia:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/ff0e29b0d974d76bd3a3b71d36a1cc68.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDa l\u00ec, vengono recuperati dagli storici-sync, che svolgono molte funzioni: ad esempio, il calcolo dei trigger, il riempimento della cache dei valori e, soprattutto, la conservazione delle metriche nel database della cronologia. In generale, il processo \u00e8 complesso e piuttosto confuso.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/c418a17edeb9153a03dff233aa8f715e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 La prima cosa che abbiamo notato \u00e8 che la maggior parte dei thread compete per quella che viene definita \"cache di configurazione\" (un'area di memoria in cui sono memorizzate tutte le configurazioni del server). Ci sono particolarmente molte lock generate dai thread responsabili dell'estrazione dei dati:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/589d8f564ece6e63457450e9c5081b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026poich\u00e9 nella configurazione non sono memorizzate solo metriche con i loro parametri, ma anche le code da cui i poller ottengono informazioni su cosa fare successivamente. Quando ci sono molti poller e uno blocca la configurazione, gli altri aspettano le richieste:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/8026cdfcd7def84cb3708b7255b08c66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>I poller non devono entrare in conflitto<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/d436cd3415a6f58e1db5a609689c12b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuindi, la prima cosa che abbiamo fatto \u00e8 stata dividere la coda in 4 parti e consentire ai poller di bloccare queste code in condizioni sicure, queste parti contemporaneamente:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/9466e5f0053dff583e76713f10e30a89.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQuesto ha eliminato la competizione per la cache di configurazione e la velocit\u00e0 di lavoro dei poller \u00e8 aumentata significativamente. Ma poi ci siamo trovati di fronte al fatto che il gestore del preprocessore ha iniziato ad accumulare una coda di compiti:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/dd58e625823310fb0a818ed81abdceac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Il gestore del preprocessore deve essere in grado di dare priorit\u00e0<\/h3>\n<p>\nQuesto accadeva nei casi in cui mancava di prestazioni. Allora, tutto ci\u00f2 che poteva fare era accumulare richieste dai processi di raccolta dei dati e accumularle nel buffer fino a quando non esauriva tutta la memoria e andava in crash:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/b215d880863d470ea6ca960c6338b8ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPer risolvere questo problema, abbiamo aggiunto una seconda socket, dedicata esclusivamente ai lavoratori:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/09d1bb92a009f9d29ba68d966de54210.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn questo modo, il gestore del preprocessore ha avuto la possibilit\u00e0 di dare priorit\u00e0 al proprio lavoro e, in caso di crescita del buffer, di rallentare l\u2019estrazione, dando ai lavoratori la possibilit\u00e0 di recuperare quel buffer:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/8f4db3661c428e6e6dcfe4cc0c44c016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPoi abbiamo scoperto che una delle cause del rallentamento erano gli stessi lavoratori, poich\u00e9 competevano per una risorsa che era completamente irrilevante per il loro lavoro. Abbiamo formalizzato questo problema con un bug-fix, ed \u00e8 gi\u00e0 stato risolto nelle nuove versioni di \"Zabbix\":<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/eedb359823dd23d369339e3735e341fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Aumentiamo il numero di socket \u2013 otteniamo il risultato<\/h3>\n<p>\nSuccessivamente, il gestore del preprocessore \u00e8 diventato il collo di bottiglia, poich\u00e9 \u00e8 un solo thread. Raggiungeva un limite di velocit\u00e0 del kernel, offrendo una velocit\u00e0 massima di circa 70.000 metriche al secondo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/f93ccbc656c0f9e103873d99a9397495.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPer questo abbiamo creato quattro set di socket, lavoratori:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/81a3dea3aa0f8807add8d045cf64a609.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nE questo ha permesso di aumentare la velocit\u00e0 fino a circa 130.000 metriche:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/016ff07cd021a7221caef19e6ce36a9b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa non linearit\u00e0 della crescita \u00e8 spiegata dal fatto che \u00e8 emersa la concorrenza per la cache della storia. Quattro gestori di pre-processori e sincronizzatori di storia hanno gareggiato per essa. A questo punto, ricevevamo sulla macchina di test circa 130.000 metriche al secondo, utilizzando circa il 95% della CPU:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/62162254cd8bc66c1cef697158691588.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Circa 2,5 mesi fa<\/i><\/p>\n<h3>L'abbandono della snmp-community ha aumentato gli NVP di un netto 50%<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Max, ho bisogno di una nuova macchina di test! Non possiamo pi\u00f9 adattarci a quella attuale.<\/p>\n<p><b>MC:<\/b> \u2013 E cosa abbiamo adesso?<\/p>\n<p><b>MM:<\/b> \u2013 Attualmente \u2013 130k NVP e la CPU \u00e8 al limite.<\/p>\n<p><b>MC:<\/b> \u2013 Wow! Fantastico! Aspetta, ho due domande. Secondo i miei calcoli, abbiamo bisogno di circa 15-20.000 metriche al secondo. Perch\u00e9 abbiamo bisogno di di pi\u00f9?<\/p>\n<p><b>MM:<\/b> \u2013 Vogliamo completare il lavoro. Vogliamo vedere quanto possiamo spremere da questo sistema.<\/p>\n<p><b>MC:<\/b> \u2013 Ma\u2026<\/p>\n<p><b>MM:<\/b> \u2013 Ma per il business non ha senso.<\/p>\n<p><b>MC:<\/b> \u2013 Chiaro. E la seconda domanda: possiamo mantenere quello che abbiamo attualmente da soli, senza aiuto degli sviluppatori?<\/p>\n<p><b>MM:<\/b> \u2013 Non penso. Modificare il modo in cui gestiamo la cache della configurazione \u00e8 un problema. Riguarda cambiamenti nella maggior parte dei flussi ed \u00e8 piuttosto complicato da mantenere. Probabilmente sar\u00e0 molto difficile mantenerla.<\/p>\n<p><b>MC:<\/b> \u2013 Allora abbiamo bisogno di un'alternativa.<\/p>\n<p><b>MM:<\/b> \u2013 C'\u00e8 una possibilit\u00e0. Possiamo passare a core veloci, rinunciando al nuovo sistema di blocco. Otterremo comunque prestazioni di 60-80.000 metriche. Inoltre, potremo mantenere tutto il resto del codice. ClickHouse e il polling asincrono funzioneranno. E sar\u00e0 facile da mantenere.<\/p>\n<p><b>MC:<\/b> \u2013 Meraviglioso! Propongo di fermarci qui.<\/p>\n<p>Dopo l'ottimizzazione della parte server, siamo finalmente riusciti a lanciare il nuovo codice in produzione. Abbiamo rinunciato a parte delle modifiche a favore del passaggio a una macchina con core veloci e della minimizzazione delle modifiche nel codice. Abbiamo anche semplificato la configurazione e, per quanto possibile, abbiamo rinunciato ai macro negli elementi dei dati, poich\u00e9 sono la fonte di ulteriori blocchi.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/2b1ed396b09bd815fba973ebb5f73d76.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAd esempio, l'abbandono del macro snmp-community, che si trova spesso nella documentazione e negli esempi, ha permesso di accelerare ulteriormente gli NVP di circa 1,5 volte.<\/p>\n<p><i>Dopo due giorni in produzione<\/i><\/p>\n<h3>Rimuoviamo le finestre pop-up della storia degli incidenti<\/h3>\n<p>\n<b>MC:<\/b> \u2013 Misha, stiamo usando il sistema da due giorni e tutto funziona. Ma solo quando tutto funziona! Avevamo lavori programmati per trasferire un segmento abbastanza grande della rete e abbiamo di nuovo controllato manualmente cosa era attivo e cosa no.<\/p>\n<p><b>MM:<\/b> \u2013 Non \u00e8 possibile! Abbiamo controllato tutto dieci volte. Il server gestisce anche la completa inattivit\u00e0 della rete in modo immediato.<\/p>\n<p><b>MC:<\/b> \u2013 Capisco: server, database, top, austat, registri \u2013 tutto veloce... Ma stiamo guardando l'interfaccia web, e l\u00ec \u2013 la CPU \u00e8 \u00abin pausa\u00bb sul server e c'\u00e8 questo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/828a44d71f67ac585055bffcc01ab46e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Chiaro. Dai un'occhiata al web. Abbiamo scoperto che in situazioni con un gran numero di incidenti attivi, la maggior parte dei widget di sistema cominciava a funzionare molto lentamente:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/22fdb735aa6136cd9967b40341d2a5cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa causa era la generazione di finestre pop-up con la cronologia degli incidenti, che vengono generate per ogni elemento nell'elenco. Quindi abbiamo rinunciato alla generazione di queste finestre (commentando 5 righe nel codice) e questo ha risolto i nostri problemi.<\/p>\n<p>Il tempo di caricamento dei widget, anche in caso di completa inattivit\u00e0, \u00e8 diminueto da diversi minuti a un accettabile 10-15 secondi, e la cronologia pu\u00f2 comunque essere visualizzata con un clic sul tempo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/d15341ce76578880a23651a7a68dd802.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Dopo il lavoro. 2 mesi fa<\/i><\/p>\n<p><b>MC:<\/b> \u2013 Misha, stai per andare? Ho bisogno di parlare.<\/p>\n<p><b>MM:<\/b> \u2013 Non avevo intenzione. Di nuovo qualcosa con \u00abZabbix\u00bb?<\/p>\n<p><b>MC:<\/b> \u2013 No, rilassati! Volevo solo dire: tutto funziona, grazie! A me la birra.<\/p>\n<h3>Zabbix \u00e8 efficace<\/h3>\n<p>\n\u00abZabbix\u00bb \u00e8 un sistema e una funzione abbastanza universali e ricchi. Pu\u00f2 essere utilizzato per piccole installazioni \u00about of the box\u00bb, ma man mano che le esigenze crescono deve essere ottimizzato. Per conservare un grande archivio di metriche, usa un'archiviazione adeguata:<\/p>\n<ul>\n<li>puoi utilizzare gli strumenti integrati come l'integrazione con \u00abElasticsearch\u00bb o l'esportazione della cronologia in file di testo (disponibile dalla quarta versione);<\/li>\n<li>puoi sfruttare la nostra esperienza e l'integrazione con \u00abClickHouse\u00bb.<\/li>\n<\/ul>\n<p>\nPer un netto incremento della velocit\u00e0 di raccolta delle metriche, raccoglile in modo asincrono e trasmettile tramite interfaccia trapper al server \u00abZabbix\u00bb; oppure puoi utilizzare una patch per l'asincronicit\u00e0 dei poller di \u00abZabbix\u00bb.<\/p>\n<p>\u00abZabbix\u00bb \u00e8 scritto in C ed \u00e8 piuttosto efficiente. Alcuni limiti architettonici consentono di aumentare ulteriormente le sue prestazioni e, secondo la nostra esperienza, riesce a raccogliere oltre 100.000 metriche su una macchina monoprocessore.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/46559b481b5e53dc3cc3d2562a94531d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Quella sono il patch Zabbix<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Vorrei aggiungere un paio di punti. Tutto l'attuale rapporto, tutti i test, i numeri sono stati forniti per quella configurazione che utilizziamo. Da essa stiamo attualmente estrapolando circa 20.000 metriche al secondo. Se state cercando di capire se funzioner\u00e0 anche per voi, potete confrontare. Le informazioni presentate oggi sono state caricate su GitHub come 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++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/e5880b2f01cb03809057db08306b23c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa patch include:<\/p>\n<ul>\n<li>integrazione completa con \u00abClickHouse\u00bb (sia per i server \u00abZabbix\u00bb che per il frontend);<\/li>\n<li>soluzione dei problemi con il preprocessore-gestore;<\/li>\n<li>polling asincrono.<\/li>\n<\/ul>\n<p>\nLa patch \u00e8 compatibile con tutta la versione 4, inclusa la lts. Probabilmente, con modifiche minime funzioner\u00e0 anche sulla versione 3.4.<\/p>\n<p>Grazie per l'attenzione.<\/p>\n<h3>Domande<\/h3>\n<p>\nDomanda dal pubblico (di seguito \u2013 D): \u2013 Buongiorno! Vorrei sapere se avete piani per un'interazione intensa con il team di Zabbix o viceversa, in modo che non sia solo una patch, ma un comportamento normale di \u00abZabbix\u00bb?<\/p>\n<p><b>MM:<\/b> \u2013 S\u00ec, parte delle modifiche verr\u00e0 sicuramente committata. Alcuni aspetti resteranno nella patch.<\/p>\n<p><b>A:<\/b> \u2013 Grazie mille per l'ottima presentazione! Vorrei chiedere, dopo aver applicato la patch, se il supporto da parte di \u00abZabbix\u00bb continuer\u00e0 e come sar\u00e0 possibile aggiornarsi a versioni superiori? Sar\u00e0 possibile aggiornare \u00abZabbix\u00bb dopo la vostra patch a 4.2, 5.0?<\/p>\n<p><b>MM:<\/b> \u2013 Sulla questione del supporto non posso dire. Se fossi il supporto tecnico di \u00abZabbix\u00bb, probabilmente direi di no, perch\u00e9 questo \u00e8 codice di terzi. Per quanto riguarda il codice base 4.2, la nostra posizione \u00e8: \u00abAndremo avanti e ci aggiorneremo alla prossima versione\u00bb. Pertanto, per un certo periodo pubblicheremo patch per le versioni aggiornate. Ho gi\u00e0 detto nella relazione: il numero di cambiamenti tra le versioni \u00e8 attualmente piuttosto ridotto. Penso che il passaggio da 3.4 a 4 ci abbia impegnato, sembra, circa 15 minuti. Ci sono state alcune modifiche, ma non di grande importanza.<\/p>\n<p><b>A:<\/b> \u2013 Quindi, intendete mantenere la vostra patch e si pu\u00f2 tranquillamente installarla in produzione, ricevendo aggiornamenti in qualche modo in futuro?<\/p>\n<p><b>MM:<\/b> \u2013 Raccomandiamo categoricamente. Questo risolve molti problemi per noi.<\/p>\n<p><b>MC:<\/b> Vorrei sottolineare ancora una volta che le modifiche che non riguardano l'architettura e non riguardano blocchi o code sono modulari, si trovano in moduli separati. Anche da soli, per piccole modifiche, \u00e8 possibile mantenere tutto abbastanza facilmente.<\/p>\n<p><b>MM:<\/b> Se ti interessano i dettagli, ClickHouse utilizza una cosiddetta libreria storica. \u00c8 scollegata, una copia del supporto di Elasticsearch, il che significa che \u00e8 configurabile. Il polling cambia solo i poller. Riteniamo che funzioni a lungo.<\/p>\n<p><b>A:<\/b> Grazie mille. Puoi dirmi se c'\u00e8 qualche documentazione sui cambiamenti effettuati?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maksim Cernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server\" src=\"\/wp-content\/uploads\/2020\/02\/f3842ba578f736721c96794941b8f071.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> La documentazione \u00e8 un patch. Ovviamente, con l'introduzione di ClickHouse, con l'arrivo di nuovi tipi di poller, sorgono nuove opzioni di configurazione. C'\u00e8 una breve descrizione su come utilizzarla nel link nell'ultima slide.<\/p>\n<h3>Sulla sostituzione di fping con nmap<\/h3>\n<p>\n<b>A:<\/b> Come l'avete realizzato? Puoi fare degli esempi concreti: avete strapper e uno script esterno? Cosa controlla cos\u00ec rapidamente un numero cos\u00ec elevato di host? Come li ottenete? Bisogna dare un input a nmap, ottenerli da qualche parte, metterli, eseguire qualcosa?<\/p>\n<p><b>MM:<\/b> Ottimo. \u00c8 una domanda molto giusta! La questione \u00e8 questa. Abbiamo modificato la libreria (ping ICMP, parte di Zabbix) per i controlli ICMP, dove \u00e8 indicato il numero di pacchetti \u2013 uno (1), e il codice cerca di usare nmap. Quindi, \u00e8 un lavoro interno di Zabbix, \u00e8 diventato il lavoro interno del ping. Pertanto, non \u00e8 necessaria alcuna sincronizzazione o utilizzo di trapper. Questo \u00e8 stato fatto consapevolmente, per mantenere il sistema integro e non dover gestire la sincronizzazione di due basi di dati: cosa controllare, gestire tramite il poller, e verificare che il caricamento non si sia rotto... \u00c8 molto pi\u00f9 semplice.<\/p>\n<p><b>A:<\/b> Funziona anche per i proxy?<\/p>\n<p><b>MM:<\/b> S\u00ec, ma non abbiamo controllato. Il codice di polling in Zabbix e sul server \u00e8 unificato. Dovrebbe funzionare. Ripeto: le prestazioni del sistema sono tali che non abbiamo bisogno di proxy.<\/p>\n<p><b>MC:<\/b> La risposta giusta a questa domanda \u00e8: \"Perch\u00e9 avete bisogno di un proxy con questo sistema?\" Solo a causa del NAT o per monitorare tramite un canale lento, vero?<\/p>\n<p><b>A:<\/b> Utilizzate Zabbix come allerta, se ho capito bene. O i grafici (dove il layer di archiviazione) sono finiti in un altro sistema, come Grafana? O non utilizzate questa funzionalit\u00e0?<\/p>\n<p><b>MM:<\/b> \u2013 Sottolineo ancora una volta: abbiamo effettuato una completa integrazione. Stiamo inviando la cronologia a \u00abClickHouse\u00bb, ma abbiamo anche modificato il frontend PHP. Il frontend PHP interroga \u00abClickHouse\u00bb e tutte le cronologie vengono generate da l\u00ec. Inoltre, onestamente, abbiamo una parte che costruisce da \u00abClickHouse\u00bb, utilizzando gli stessi dati di \u00abZabbix\u00bb per rappresentare informazioni in altri sistemi di visualizzazione grafica.<\/p>\n<p><b>MC:<\/b> \u2013 Inclusa \u00abGrafana\u00bb.<\/p>\n<h3>Come \u00e8 stata presa la decisione riguardo l'assegnazione delle risorse?<\/h3>\n<p>\n<b>A:<\/b> \u2013 Condividete un po' la vostra esperienza interna. Come \u00e8 stata presa la decisione di allocare risorse per un'importante revisione del prodotto? Si tratta, in sostanza, di rischi concreti. E vorrei sapere, nel contesto di chi sta pianificando di supportare nuove versioni: come viene giustificata questa decisione dal punto di vista della gestione?<\/p>\n<p><b>MM:<\/b> \u2013 Evidentemente, non abbiamo raccontato molto bene il dramma della nostra storia. Ci siamo trovati in una situazione in cui dovevamo fare qualcosa e siamo andati avanti, in sostanza, con due team paralleli:<\/p>\n<ul>\n<li>Uno si \u00e8 occupato del lancio di un sistema di monitoraggio con nuovi metodi: monitoraggio come servizio, un insieme standard di soluzioni open source che combiniamo e cerchiamo di modificare il processo aziendale per lavorare con il nuovo sistema di monitoraggio.<\/li>\n<li>Parallelamente, avevamo un programmatore entusiasta che si occupava di questo (parlando di se stesso). \u00c8 andata cos\u00ec che lui ha prevalso.<\/li>\n<\/ul>\n<p>\n<b>A:<\/b> \u2013 Qual \u00e8 la dimensione del team?<\/p>\n<p><b>MC:<\/b> \u2013 \u00c8 qui davanti a voi.<\/p>\n<p><b>A:<\/b> \u2013 Quindi, come sempre, \u00e8 necessario un passionario?<\/p>\n<p><b>MM:<\/b> \u2013 Non so cosa sia un passionario.<\/p>\n<p><b>A:<\/b> \u2013 In questo caso, evidentemente, siete voi. Grazie mille, siete fantastici.<\/p>\n<p><b>MM:<\/b> \u2013 Grazie.<\/p>\n<h3>Sui patch per Zabbix<\/h3>\n<p>\n<b>A:<\/b> \u2013 Per un sistema che utilizza proxy (ad esempio, in alcuni sistemi distribuiti), \u00e8 possibile adattare la vostra soluzione e patchare, diciamo, i pollers, i proxy e parzialmente il pre-processore di \u00abZabbix\u00bb; e la loro interazione? \u00c8 possibile ottimizzare le soluzioni esistenti per un sistema con pi\u00f9 proxy?<\/p>\n<p><b>MM:<\/b> \u2013 So che il server \u00abZabbix\u00bb viene assemblato tramite proxy (compilato e si ottiene il codice). Non lo abbiamo testato in produzione. Non sono sicuro, ma credo che il gestore del pre-processore non venga utilizzato nei proxy. Il compito del proxy \u00e8 raccogliere un insieme di metriche da \u00abZabbix\u00bb, spedirle (registra anche la configurazione, il database locale) e restituirle al server \u00abZabbix\u00bb. Il pre-processing avverr\u00e0 poi direttamente sul server, quando lo riceve.<\/p>\n<p>\u00c8 comprensibile l'interesse per i proxy. Lo verificheremo. \u00c8 un tema interessante.<\/p>\n<p><b>A:<\/b> \u2013 L'idea era questa: se si possono patchare i poller, si possono patchare per i proxy e modificare l'interazione con il server, mentre il preprocessore si adatta a questi scopi solamente sul server.<\/p>\n<p><b>MM:<\/b> \u2013 Penso sia anche pi\u00f9 semplice. Prendete il codice, applicate la patch, poi configurate come desiderate \u2013 create proxy server (ad esempio, con ODBC) e distribuite il codice patchato nei sistemi. Dove serve, create proxy, dove serve, il server.<\/p>\n<p><b>A:<\/b> \u2013 Non sar\u00e0 necessario patchare ulteriormente il trasferimento del proxy al server, giusto?<\/p>\n<p><b>MC:<\/b> \u2013 No, \u00e8 standard.<\/p>\n<p><b>MM:<\/b> \u2013 In realt\u00e0, non \u00e8 stata espressa una delle idee. Abbiamo sempre cercato di mantenere un equilibrio tra un'esplosione di idee e il numero di cambiamenti, e la facilit\u00e0 di supporto.<\/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=\"Guarda il video\" 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>Un po' di pubblicit\u00e0 \ud83d\ude42<\/h3>\n<p>\nGrazie per rimanere con noi. Ti piacciono i nostri articoli? Vuoi vedere pi\u00f9 contenuti interessanti? Supportaci effettuando un ordine o raccomandandoci a qualcuno. <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS cloud per sviluppatori a partire da $4.99.<\/a><\/noindex>, <b>unica alternativa ai server entry-level, concepita da noi per te:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Tutta la verit\u00e0 sui VPS (KVM) E5-2697 v3 (6 Core) 10GB DDR4 480GB SSD 1Gbps a partire da $19 o come dividere correttamente un server?<\/a><\/noindex> (sono disponibili opzioni con RAID1 e RAID10, fino a 24 core e fino a 40GB DDR4).<\/p>\n<p><b>Dell R730xd a met\u00e0 prezzo nel data center Equinix Tier IV ad Amsterdam?<\/b> Solo da noi <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 100 TB a partire da $199<\/a><\/noindex> nei Paesi Bassi! <b>Dell R420 \u2014 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 a partire da $99!<\/b><\/b> Leggi di <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Come costruire un'infrastruttura di livello enterprise utilizzando server Dell R730xd E5-2650 v4 del valore di 9000 euro a pochi spiccioli?<\/a><\/noindex><br \/>\n<br \/>Fonte: <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\/it\/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=\"it_IT\" \/>\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\/it\/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, Maksim Chernetsov (Intersvyaz): Zabbix, 100kNVPS su un solo server | ProHoster","description":"La prossima conferenza HighLoad++ si terr\u00e0 il 6 e 7 aprile 2020 a San Pietroburgo. Dettagli e biglietti al link.","canonical_url":"https:\/\/prohoster.info\/it\/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":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/56049","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=56049"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/56049\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=56049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=56049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=56049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}