{"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++, Mikhail Makurov, Maxim Chernetsov (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. Sintesi 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++, Mikhail Makurov, Maxim Chernetsov (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 operativa del 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 (di seguito \u2013 MM):<\/b> \u2013 Ciao a tutti!<\/p>\n<p><b>Maksim Chernecov (di seguito \u2013 MC):<\/b> \u2013 Buongiorno!<\/p>\n<p><b>MM:<\/b> \u2013 Permettetemi di presentarvi Maksim. Max \u00e8 un ingegnere talentuoso, il miglior specialista di rete che conosca. Maksim si occupa di reti e servizi, del loro sviluppo e della loro gestione.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Vorrei raccontarvi di Mikhail. Mikhail \u00e8 uno sviluppatore C. Ha scritto diverse soluzioni ad alto carico per l'elaborazione del traffico per la nostra azienda. Viviamo e lavoriamo negli Urali, a \u010celjabinsk, in un'azienda chiamata \u00abIntersvyaz\u00bb. La nostra azienda fornisce servizi internet e televisione via cavo a un milione di persone in 16 citt\u00e0.<\/p>\n<p><b>MM:<\/b> \u2013 \u00c8 importante sottolineare che \"Intersvyaz\" \u00e8 molto pi\u00f9 di un semplice provider, \u00e8 un'azienda IT. La maggior parte delle nostre soluzioni \u00e8 realizzata dal nostro dipartimento IT.<\/p>\n<p><b>A:<\/b> dai server che gestiscono il traffico, fino al call center e all'app mobile. Attualmente nel dipartimento IT ci sono circa 80 persone con competenze molto variegate.<\/p>\n<h3>Su Zabbix e la sua architettura<\/h3>\n<p>\n<b>MC:<\/b> \u2013 Adesso cercher\u00f2 di impostare un record personale e dire in un minuto che cos'\u00e8 Zabbix (di seguito \u2013 \"Zabbix\").<\/p>\n<p>\"Zabbix\" si presenta come un sistema di monitoraggio 'pronto all'uso' di livello enterprise. Ha molte funzionalit\u00e0 che semplificano la vita: regole di escalation avanzate, API per integrazioni, raggruppamento e auto-scoperta di host e metriche. In \"Zabbix\" ci sono cos\u00ec detti strumenti di scaling \u2013 proxy. \"Zabbix\" \u00e8 un sistema open-source.<\/p>\n<p>In breve sull'architettura. Si pu\u00f2 dire che \u00e8 composta da tre componenti:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 un'elaborazione e un trasferimento delle informazioni piuttosto complessi tra i thread. Tutta l'elaborazione avviene in esso: dalla ricezione fino al salvataggio nel database.<\/li>\n<li>Tutti i dati sono memorizzati nel database. \"Zabbix\" supporta MySQL, PostgreSQL e Oracle.<\/li>\n<li>L'interfaccia web \u00e8 scritta in PHP. Nella maggior parte dei sistemi viene fornita con il server Apache, ma funziona in modo pi\u00f9 efficiente in combinazione con nginx + php.<\/li>\n<\/ul>\n<p>\nOggi vorremmo raccontare una storia dalla vita della nostra azienda riguardo a 'Zabbix'...<\/p>\n<h3>Una storia dalla vita dell'azienda 'Intersvyaz'. Cosa abbiamo e cosa ci serve?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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...<\/i><\/p>\n<p><b>MC:<\/b> \u2013 Misha, ciao! Felice di averti incontrato \u2013 dobbiamo parlare. 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 \u00e8 un problema che si ripete non per la prima volta. Ho bisogno del tuo aiuto. Facciamo in modo che il nostro monitoraggio funzioni in qualsiasi circostanza!<\/p>\n<p><b>MM:<\/b> \u2013 Ma prima facciamo un sincronizzazione. Non ci guardo da un paio d'anni. Per quanto ricordo, abbiamo abbandonato Nagios e siamo passati a 'Zabbix' circa 8 anni fa. E adesso abbiamo, sembra, 6 potenti server e circa una decina di proxy. Non mi confondo?<\/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 protegge nel momento del bisogno. Come in caso di emergenza \u2013 i server rallentano e non si vede nulla. Abbiamo provato a ottimizzare la configurazione, ma non abbiamo ottenuto alcun incremento significativo delle prestazioni.<\/p>\n<p><b>MM:<\/b> \u2013 Capisco. Avete esaminato qualcosa, avete gi\u00e0 raccolto informazioni sulla diagnostica?<\/p>\n<p><b>MC:<\/b> \u2013 La prima cosa con cui ci si deve confrontare \u00e8 proprio il database. MySQL \u00e8 continuamente sovraccarico, conservando nuove metriche, e quando Zabbix inizia a generare un sacco di eventi, il database va sostanzialmente in stallo per alcune ore. Ti ho gi\u00e0 parlato dell'ottimizzazione della configurazione, mentre quest'anno abbiamo aggiornato l'hardware: i server hanno pi\u00f9 di cento gigabyte di memoria e array di dischi su RAID SSD \u2013 non ha senso continuare a farlo crescere linearmente. Cosa facciamo?<\/p>\n<p><b>MM:<\/b> \u2013 Chiaro. In effetti, MySQL \u00e8 una base LTP. Sembrerebbe che non sia pi\u00f9 adatta per archiviare le metriche della nostra dimensione. Iniziamo a indagare.<\/p>\n<p><b>MC:<\/b> \u2013 Facciamo!<\/p>\n<h3>Integrazione tra Zabbix e Clickhouse come risultato del hackathon<\/h3>\n<p>\nDopo un po\u2019 di tempo abbiamo ottenuto dati interessanti:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 di metriche e meno dell'1% utilizzato per configurazioni, modelli e impostazioni. A quel punto, avevamo gi\u00e0 sfruttato per oltre un anno la soluzione Big Data basata su Clickhouse. La direzione per noi era chiara. Durante il nostro \u00abHackathon\u00bb primaverile, ho sviluppato 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++, Mikhail Makurov, Maxim Chernetsov (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 i dati in batch di 1000 righe, utilizzando CURL. Presumavamo in anticipo che Clickhouse sarebbe stato pi\u00f9 efficiente per quel carico di lavoro generato da Zabbix. I risultati hanno persino superato le nostre aspettative:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 ha scritto tre volte pi\u00f9 dati. Entrambi i sistemi consumavano molto efficientemente (poche risorse) durante la lettura dei dati. Ma ElasticSearch richiedeva una grande quantit\u00e0 di CPU durante la scrittura:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 supera 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++, Mikhail Makurov, Maxim Chernetsov (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 sottosistema di archiviazione in ClickHouse \u00e8 molto efficiente. Puoi utilizzare enormi dischi SATA per le basi dati e ottenere velocit\u00e0 di scrittura nell'ordine di centinaia di migliaia di righe al secondo. Il sistema supporta out-of-the-box sharding, replica ed \u00e8 molto semplice da configurare. Siamo pi\u00f9 che soddisfatti della sua operativit\u00e0 dopo un anno.<\/p>\n<p>Per ottimizzare le risorse, \u00e8 possibile installare ClickHouse accanto all'attuale base dati principale, risparmiando cos\u00ec notevolmente sul tempo di CPU e sulle operazioni di disco. Abbiamo spostato l'archivio delle metriche sui cluster ClickHouse gi\u00e0 esistenti:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 la base dati principale MySQL che abbiamo potuto unificarla su una sola 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 Allora, possiamo dimenticarci dei problemi con la base dati?<\/p>\n<p><b>MC:<\/b> \u2013 \u00c8 proprio cos\u00ec! Un altro problema che dobbiamo risolvere \u00e8 la raccolta lenta dei dati. Ora tutti i nostri 15 server proxy sono sovraccarichi a causa dei processi SNMP e del polling. E non ci sono altre opzioni se non aggiungere nuovi server.<\/p>\n<p><b>MM:<\/b> \u2013 Ottimo. Ma raccontami prima come funziona il polling in Zabbix?<\/p>\n<p><b>MC:<\/b> \u2013 In breve, ci sono 20 tipi di metriche e una decina di modi per ottenerle. Zabbix pu\u00f2 raccogliere dati sia in modalit\u00e0 'richiesta - risposta', sia attendere nuovi dati attraverso l'Interfaccia Trapper.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server.\" src=\"\/wp-content\/uploads\/2020\/02\/cb2d974ee113b4147a4a588c1f35c730.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVa notato che nel Zabbix originale questo metodo (Trapper) \u00e8 il pi\u00f9 veloce. <\/p>\n<p>Ci sono server proxy per bilanciare il carico:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 svolgere le stesse funzioni di raccolta che il server Zabbix, ricevendo incarichi da esso e inviando le metriche raccolte proprio attraverso l'interfaccia Trapper. Questo \u00e8 il modo ufficialmente raccomandato per bilanciare il carico. Inoltre, i proxy sono utili per monitorare infrastrutture remote che operano tramite NAT o canali lenti:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 L'architettura \u00e8 chiara. Dobbiamo esaminare i sorgenti\u2026<\/p>\n<p><i>Un paio di giorni dopo<\/i><\/p>\n<h3>La storia di come nmap e fping hanno trionfato<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Sembra che io 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 ad aumentare questo numero 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 esperienza, a volte devo controllare la disponibilit\u00e0 di migliaia di host, e non ho trovato niente di pi\u00f9 veloce di nmap per farlo. Sono sicuro che sia il modo pi\u00f9 veloce. 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 mila.<\/p>\n<p><b>MM:<\/b> \u2013 Ok. La cosa principale che volevo dire: ho scoperto che la maggior parte del polling in Zabbix \u00e8 fatto in modo sincrono. Dobbiamo assolutamente modificarlo per lavorare in modalit\u00e0 asincrona. In questo modo potremo aumentare drasticamente il numero di metriche raccolte dai poller, soprattutto 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++, Mikhail Makurov, Maxim Chernetsov (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'ampia gamma di host, nmap si \u00e8 dimostrato fino a cinque volte pi\u00f9 efficace del previsto. Poich\u00e9 nmap verifica solo la disponibilit\u00e0 e il tempo di risposta, abbiamo spostato il conteggio delle perdite nei trigger e ridotto significativamente gli intervalli di verifica della disponibilit\u00e0. Abbiamo trovato che il numero ottimale di host per nmap \u00e8 intorno ai 4.000 per iterazione. Nmap ci ha permesso di ridurre il carico della CPU per le verifiche di disponibilit\u00e0 di tre volte 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 concentrati sui poller. Eravamo principalmente interessati alla raccolta SNMP e agli agenti. In \u00abZabbix\u00bb, il polling \u00e8 realizzato in modo sincrono e sono state adottate misure speciali per aumentare l'efficienza del sistema. In modalit\u00e0 sincrona, l'inaccessibilit\u00e0 degli host causa una significativa degradazione del polling. Esiste un'intera rete di stati, vi sono processi speciali, i cosiddetti poller unreachable, che lavorano solo con host non disponibili:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 affinch\u00e9 il sistema rimanga efficiente. Inoltre, il polling sincrono stesso \u00e8 piuttosto lento:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server.\" src=\"\/wp-content\/uploads\/2020\/02\/3579a4a3de85c37f812ba2ca71cf4b3d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEcco perch\u00e9 migliaia di thread di poller su molteplici proxy non sono riusciti a raccogliere il numero necessario di dati. L'implementazione asincrona ha risolto non solo i problemi con il numero di thread, ma ha anche semplificato notevolmente il sistema di stato degli host non disponibili, poich\u00e9, indipendentemente dal numero di controlli effettuati in un'unica iterazione di polling, il tempo massimo di attesa era di 1 timeout:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server.\" src=\"\/wp-content\/uploads\/2020\/02\/c5f2d9bb3e558f8bba6bd8a96d8ed6a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInoltre, abbiamo modificato e migliorato il sistema di polling per le richieste SNMP. Infatti, la maggior parte non pu\u00f2 rispondere a pi\u00f9 richieste SNMP contemporaneamente. Pertanto, abbiamo creato una modalit\u00e0 ibrida, in cui il polling SNMP dello stesso host avviene in modo asincrono:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 batch di host. Questa modalit\u00e0 non risulta pi\u00f9 lenta rispetto a quella completamente asincrona, poich\u00e9 interrogare 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 un'unica iterazione \u00e8 di circa 8.000 durante il polling SNMP. Complessivamente, la transizione alla modalit\u00e0 asincrona ha consentito di aumentare le prestazioni del polling di 200 volte, fino a diverse centinaia di volte.<\/p>\n<p><b>MC:<\/b> Le ottimizzazioni del polling hanno dimostrato che possiamo non solo eliminare tutti i proxy, ma anche ridurre gli intervalli per molte verifiche, rendendo i proxy non 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 Bene, Max, \u00e8 ora di entrare in produzione? Ho bisogno di un server potente e di un buon ingegnere.<\/p>\n<p><b>MC:<\/b> \u2013 Va bene, pianifichiamo. \u00c8 tempo di muoversi da questo stallo di 5 mila metriche al secondo.<\/p>\n<p><i>Mattina dopo l'upgrade<\/i><\/p>\n<p><b>MC:<\/b> \u2013 Misha, ci siamo aggiornati, ma per questa mattina siamo tornati indietro\u2026 Indovina quale velocit\u00e0 siamo riusciti a raggiungere?<\/p>\n<p><b>MM:<\/b> \u2013 Al massimo 20 mila.<\/p>\n<p><b>MC:<\/b> \u2013 Ah, 25! Purtroppo, siamo dove eravamo, da dove abbiamo iniziato.<\/p>\n<p><b>MM:<\/b> \u2013 Perch\u00e9 \u00e8 cos\u00ec? Abbiamo fatto qualche diagnosi?<\/p>\n<p><b>MC:<\/b> \u2013 S\u00ec, certo! Ecco, ad esempio, un interessante top:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Diamo un'occhiata. Vedo che abbiamo provato un numero enorme di thread di polling:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 a utilizzare il sistema nemmeno a met\u00e0:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 performance totale \u00e8 piuttosto bassa, circa 4 mila metriche al secondo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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++, Mikhail Makurov, Maxim Chernetsov (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 si vede chiaramente che il processo di polling aspetta i 'semafori'. Queste sono delle blocchi:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 \u00e8 chiaro.<\/p>\n<p><b>MM:<\/b> \u2013 Guarda, questo sembra una situazione in cui molti thread stanno cercando di lavorare con una risorsa accessibile solo a uno alla volta. Cos\u00ec, l'unica cosa che possono fare \u00e8 suddividere l'accesso a questa risorsa nel tempo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 complessiva nell'utilizzo di questa risorsa \u00e8 limitata dalla velocit\u00e0 di un solo core:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server.\" src=\"\/wp-content\/uploads\/2020\/02\/e00b197577f4ea7350fe56665dbae299.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCi sono due modi per risolvere questo problema.<\/p>\n<p>Aggiornare l'hardware della macchina, passando a core pi\u00f9 veloci:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 l'architettura e parallelamente il carico:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Tra l'altro, sulla macchina di test utilizziamo un numero minore di core rispetto a quella di produzione, ma sono circa 1,5 volte pi\u00f9 veloci per frequenza per core!<\/p>\n<p><b>MM:<\/b> \u2013 Chiaro? Dobbiamo esaminare il codice del server.<\/p>\n<h3>Il percorso dei dati nel server Zabbix<\/h3>\n<p>\n<b>MC:<\/b> \u2013 Per capire meglio, abbiamo iniziato ad analizzare come i dati vengono trasmessi all'interno del server Zabbix:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server.\" src=\"\/wp-content\/uploads\/2020\/02\/b3d84e3fcb12e7afe3c974bdeacc357a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUn'immagine fantastica, vero? Facciamo un passo alla volta per chiarire. Ci sono thread e servizi responsabili della raccolta dei dati:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 socket al Preprocessor manager, dove vengono memorizzate in coda:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 worker, i quali eseguono le istruzioni di preprocessing e li restituiscono attraverso lo stesso socket:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server.\" src=\"\/wp-content\/uploads\/2020\/02\/d647caf3886f0c9378a32314e812edc1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSuccessivamente, il gestore del preprocessore li memorizza nella cache della storia:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 prelevati dai sincronizzatori di storia, che svolgono diverse funzioni: ad esempio, il calcolo dei trigger, il riempimento della cache dei valori e, cosa pi\u00f9 importante, la registrazione delle metriche nel repository della storia. In generale, il processo \u00e8 complesso e piuttosto confuso.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 chiamata 'cache di configurazione' (un'area di memoria dove sono archiviate tutte le configurazioni del server). Soprattutto molti lock vengono generati dai thread responsabili del recupero dei dati:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 sono memorizzate non solo le 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++, Mikhail Makurov, Maxim Chernetsov (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 confliggere<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server.\" src=\"\/wp-content\/uploads\/2020\/02\/d436cd3415a6f58e1db5a609689c12b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPerci\u00f2, 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, simultaneamente:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 concorrenza per la cache di configurazione, e la velocit\u00e0 di lavoro dei poller \u00e8 aumentata significativamente. Ma poi ci siamo trovati di fronte al problema che il gestore del preprocessore ha iniziato ad accumulare la coda di lavoro:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 stabilire delle priorit\u00e0.<\/h3>\n<p>\nQuesto accadeva nei casi in cui mancava di prestazioni. Allora, tutto ci\u00f2 che poteva fare era accumulare le richieste dai processi di raccolta dati e inserirle nel buffer fino a esaurire la memoria e bloccarsi:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 un secondo socket, dedicato esclusivamente ai worker:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 potuto dare priorit\u00e0 al proprio lavoro e, in caso di crescita del buffer, interrompere il caricamento, consentendo ai worker di prelevare quel buffer:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 worker, poich\u00e9 competevano per una risorsa che non era affatto importante per il loro lavoro. Abbiamo risolto questo problema con un bug-fix, e nelle nuove versioni di \u00abZabbix\u00bb \u00e8 gi\u00e0 stato risolto:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 risultati<\/h3>\n<p>\nIn seguito, il gestore del preprocessore \u00e8 diventato il collo di bottiglia, poich\u00e9 opera in un solo thread. Ha raggiunto la massima velocit\u00e0 di circa 70 mila metriche al secondo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS su un unico server.\" src=\"\/wp-content\/uploads\/2020\/02\/f93ccbc656c0f9e103873d99a9397495.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPertanto, abbiamo creato quattro, con quattro set di socket e worker:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 a circa 130 mila metriche:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 c'era competizione per la cache della cronologia. Quattro gestori del preprocessore e gli history-sinkers competevano per essa. A questo punto, sulla macchina di test ottenevamo circa 130 mila metriche al secondo, utilizzando circa il 95 % della CPU:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 NVPs di un fattore e mezzo<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Max, ho bisogno di una nuova macchina di test! Nella attuale non riusciamo pi\u00f9 a entrare.<\/p>\n<p><b>MC:<\/b> \u2013 E cosa abbiamo attualmente?<\/p>\n<p><b>MM:<\/b> \u2013 Attualmente \u2013 130k NVPs e processore \"in riserva\".<\/p>\n<p><b>MC:<\/b> \u2013 Wow! Cool! Wait, I have two questions. Based on my calculations, our need is around 15-20 thousand metrics per second. Why do we need more?<\/p>\n<p><b>MM:<\/b> \u2013 I want to see it through to the end. I want to find out how much we can get out of this system.<\/p>\n<p><b>MC:<\/b> \u2013 But...<\/p>\n<p><b>MM:<\/b> \u2013 But it's useless for the business.<\/p>\n<p><b>MC:<\/b> \u2013 Got it. And the second question: can we maintain what we have now by ourselves, without a developer's help?<\/p>\n<p><b>MM:<\/b> \u2013 I don't think so. Changing the configuration cache management is an issue. It impacts most streams and is quite complex to maintain. It will likely be very difficult to support.<\/p>\n<p><b>MC:<\/b> \u2013 Then we need some kind of alternative.<\/p>\n<p><b>MM:<\/b> \u2013 There is an option. We can switch to fast cores while abandoning the new locking system. We'll still achieve performance of 60-80 thousand metrics. Plus, we can keep all the other code. ClickHouse and asynchronous polling will work. And it will be easy to maintain.<\/p>\n<p><b>MC:<\/b> \u2013 Wonderful! I suggest we stop here.<\/p>\n<p>Dopo l'ottimizzazione della parte server, siamo finalmente riusciti a lanciare il nuovo codice in produzione. Abbiamo rinunciato a alcune modifiche a favore del passaggio a una macchina con processori veloci e per minimizzare il numero di cambiamenti nel codice. Abbiamo anche semplificato la configurazione e, dove possibile, eliminato i macro negli elementi dei dati, poich\u00e9 sono una fonte di ulteriore blocco.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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'eliminazione del macro snmp-community, comunemente presente nella documentazione e negli esempi, ha permesso di velocizzare ulteriormente gli NVPs di circa 1,5 volte.<\/p>\n<p><i>Dopo due giorni in produzione<\/i><\/p>\n<h3>Rimuoviamo le finestre pop-up della cronologia degli incidenti<\/h3>\n<p>\n<b>MC:<\/b> \u2013 Misha, utilizziamo il sistema da due giorni e tutto funziona. Ma solo quando tutto funziona! Abbiamo avuto lavori programmati per il trasferimento di un segmento abbastanza grande della rete e abbiamo controllato manualmente cosa era attivo e cosa no.<\/p>\n<p><b>MM:<\/b> \u2013 Non pu\u00f2 essere! Abbiamo controllato tutto dieci volte. Il server gestisce anche una completa inattivit\u00e0 della rete istantaneamente.<\/p>\n<p><b>MC:<\/b> \u2013 S\u00ec, capisco: server, database, top, austat, log \u2013 tutto veloce\u2026 Ma guardiamo l'interfaccia web e l\u00ec il processore \"in stand-by\" sul server e questo:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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. Andiamo a vedere il web. Abbiamo scoperto che in situazioni con un gran numero di incidenti attivi, la maggior parte dei widget operativi iniziava a funzionare molto lentamente:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 di ci\u00f2 era la generazione di finestre popup con la cronologia degli incidenti, che venivano create per ogni elemento nell'elenco. Pertanto, abbiamo rinunciato alla generazione di queste finestre (commentando 5 righe di codice), e questo ha risolto i nostri problemi.<\/p>\n<p>Il tempo di caricamento dei widget, anche in caso di completa indisponibilit\u00e0, \u00e8 stato ridotto da diversi minuti a un accettabile 10-15 secondi, e la cronologia pu\u00f2 ancora essere visualizzata semplicemente cliccando sul timestamp:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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, te ne vai? Ho qualcosa da dirti.<\/p>\n<p><b>MM:<\/b> \u2013 Non avevo intenzione. Di nuovo qualcosa con Zabbix?<\/p>\n<p><b>MC:<\/b> \u2013 No, rilassati! Volevo solo dire: tutto funziona, grazie! A spese mie una birra.<\/p>\n<h3>Zabbix \u00e8 efficiente<\/h3>\n<p>\nZabbix \u00e8 un sistema e una funzionalit\u00e0 piuttosto versatili e completi. Pu\u00f2 essere utilizzato senza problemi per piccole installazioni 'out of the box', ma con l'aumento delle esigenze, \u00e8 necessario ottimizzarlo. Per la memorizzazione di un ampio archivio di metriche, utilizzare un sistema di archiviazione adeguato:<\/p>\n<ul>\n<li>si possono utilizzare gli strumenti integrati come l'integrazione con \u00abElasticsearch\u00bb o l'export della cronologia in file di testo (disponibile dalla quarta versione);<\/li>\n<li>si pu\u00f2 sfruttare la nostra esperienza e l'integrazione con \u00abClickHouse\u00bb.<\/li>\n<\/ul>\n<p>\nPer un incremento significativo della velocit\u00e0 di raccolta delle metriche, raccoglieteli utilizzando metodi asincroni e trasmetteteli attraverso l'interfaccia trapper al server \u00abZabbix\u00bb; in alternativa, \u00e8 possibile utilizzare una patch per l'asincronismo dei poller di \u00abZabbix\u00bb.<\/p>\n<p>\u00abZabbix\u00bb \u00e8 scritto in C ed \u00e8 abbastanza efficiente. Alcuni miglioramenti architettonici consentono di aumentare ulteriormente le sue prestazioni e, secondo la nostra esperienza, di ottenere oltre 100.000 metriche su una macchina a singolo processore.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 famosa patch Zabbix<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Vorrei aggiungere un paio di dettagli. Tutto il rapporto attuale, tutti i test e i dati forniti si riferiscono alla configurazione che utilizziamo noi. Attualmente stiamo raccogliendo circa 20.000 metriche al secondo. Se vi state chiedendo se funzioner\u00e0 per voi, potete confrontare. Ci\u00f2 di cui abbiamo parlato oggi \u00e8 disponibile 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++, Mikhail Makurov, Maxim Chernetsov (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 il server \u00abZabbix\u00bb che per il front-end);<\/li>\n<li>risoluzione dei problemi con il gestore dei pre-processori;<\/li>\n<li>polling asincrono.<\/li>\n<\/ul>\n<p>\nLa patch \u00e8 compatibile con tutta la versione 4, incluso l'lts. Probabilmente funzioner\u00e0 con modifiche minime sulla versione 3.4.<\/p>\n<p>Grazie per l'attenzione.<\/p>\n<h3>Domande<\/h3>\n<p>\nDomanda dal pubblico (di seguito \u2013 A): \u2013 Buongiorno! Vorrei sapere, avete in programma un'interazione intensa con il team di Zabbix o loro con voi, in modo che non si tratti di una patch ma di un comportamento normale di \u00abZabbix\u00bb?<\/p>\n<p><b>MM:<\/b> \u2013 S\u00ec, alcune modifiche sicuramente le committeremo. Alcune cose saranno in patch, altre no.<\/p>\n<p><b>A:<\/b> \u2013 Grazie mille per la presentazione eccellente! Mi pu\u00f2 dire, per favore, dopo l'applicazione della patch, il supporto da parte di \u00abZabbix\u00bb rimarr\u00e0 e come si aggiorner\u00e0 a versioni pi\u00f9 alte? Ci sar\u00e0 la possibilit\u00e0 di aggiornare \u00abZabbix\u00bb dopo la vostra patch alla 4.2, 5.0?<\/p>\n<p><b>MM:<\/b> \u2013 Sulla questione del supporto non posso dire molto. Se fossi il supporto tecnico di \u00abZabbix\u00bb, probabilmente direi di no, perch\u00e9 si tratta di codice esterno. Per quanto riguarda il codice sorgente 4.2, la nostra posizione \u00e8 la seguente: \u00abCi aggiorneremo con il tempo e passeremo alla prossima versione\u00bb. Pertanto, per un certo periodo rilasceremo patch per le versioni aggiornate. L'ho gi\u00e0 detto nella relazione: il numero di modifiche tra le versioni \u00e8 attualmente abbastanza ridotto. Penso che la transizione da 3.4 a 4 ci abbia preso, mi sembra, circa 15 minuti. Qualcosa \u00e8 cambiato, ma non \u00e8 fondamentale.<\/p>\n<p><b>A:<\/b> \u2013 Quindi, pianificate di mantenere la vostra patch e si pu\u00f2 tranquillamente installarla in produzione, ricevendo successivamente aggiornamenti in qualche modo?<\/p>\n<p><b>MM:<\/b> \u2013 S\u00ec, lo raccomandiamo vivamente. Questo risolve molti problemi per noi.<\/p>\n<p><b>MC:<\/b> \u2013 Vorrei sottolineare ancora una volta che le modifiche che non riguardano l'architettura e non riguardano i blocchi, le code \u2013 sono modulari, si trovano in moduli separati. Anche con modifiche minime, possono essere gestite piuttosto facilmente.<\/p>\n<p><b>MM:<\/b> \u2013 Se ti interessano i dettagli, \u00abClickHouse\u00bb utilizza quella che viene chiamata la libreria della cronologia. \u00c8 disaccoppiata: \u00e8 una copia del supporto per \u00abElastik\u00bb, ovvero \u00e8 configurabile. Il polling modifica solo i poller. Riteniamo che questo funzioner\u00e0 a lungo.<\/p>\n<p><b>A:<\/b> \u2013 Grazie mille. Puoi dirmi se c'\u00e8 qualche documentazione delle modifiche apportate?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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> \u2013 La documentazione \u00e8 una patch. \u00c8 evidente che con l'introduzione del \u00abClickHouse\u00bb e dei nuovi tipi di poller nascono nuove opzioni di configurazione. Nel link dell'ultima diapositiva c'\u00e8 una breve descrizione su come utilizzarlo.<\/p>\n<h3>Sostituzione di fping con nmap<\/h3>\n<p>\n<b>A:<\/b> \u2013 Come lo avete realizzato alla fine? Puoi fare esempi specifici: avete strapper e uno script esterno? Cosa controlla alla fine cos\u00ec rapidamente un numero cos\u00ec elevato di host? Come raccogliete questi host? Bisogna in qualche modo fornirli a nmap, ottenerli da qualche parte, metterli da parte, e poi eseguire qualcosa?..<\/p>\n<p><b>MM:<\/b> \u2013 Ottimo. \u00c8 una domanda molto pertinente! Ecco il punto. Abbiamo modificato la libreria (ping ICMP, parte di \u00abZabbix\u00bb) per le verifiche ICMP, in cui \u00e8 specificato il numero di pacchetti \u2013 uno (1) \u2013 e il codice cerca di utilizzare nmap. Questo significa che \u00e8 un'operazione interna di \u00abZabbix\u00bb, diventata un'operazione interna del ping. Di conseguenza, non \u00e8 necessaria alcuna sincronizzazione o utilizzo di trapper. Questo \u00e8 stato fatto intenzionalmente per mantenere il sistema integro e non occuparsi della sincronizzazione di due sistemi di base: cosa controllare, caricare tramite il poller, e non ci sono problemi nel caricamento?... \u00c8 molto pi\u00f9 semplice.<\/p>\n<p><b>A:<\/b> \u2013 Funziona anche per il proxy?<\/p>\n<p><b>MM:<\/b> \u2013 S\u00ec, ma non abbiamo fatto test. Il codice di polling sia in \u00abZabbix\u00bb che nel server \u00e8 unificato. Dovrebbe funzionare. Ripeto: le prestazioni del sistema sono tali che non abbiamo bisogno di un proxy.<\/p>\n<p><b>MC:<\/b> \u2013 La risposta giusta alla domanda \u00e8: \u00abPerch\u00e9 avete bisogno di un proxy con un sistema del genere?\u00bb Solo a causa del NAT o per monitorare attraverso un canale lento\u2026<\/p>\n<p><b>A:<\/b> \u2013 State usando \u00abZabbix\u00bb come allerta, se ho capito bene. O i grafici (dove il layer archivio) sono andati in un altro sistema, tipo Grafana? O non utilizzate questa funzionalit\u00e0?<\/p>\n<p><b>MM:<\/b> \u2013 Ribadisco: abbiamo effettuato un'integrazione completa. Stiamo trasferendo la storia in \u00abClickhouse\u00bb, ma abbiamo anche modificato il frontend PHP. Il frontend PHP consulta \u00abClickhouse\u00bb e genera tutti i grafici da l\u00ec. Tuttavia, onestamente, abbiamo una parte che crea dati da \u00abClickhouse\u00bb e da quelli di \u00abZabbix\u00bb per altri sistemi di visualizzazione grafica.<\/p>\n<p><b>MC:<\/b> \u2013 Anche in \u00abGrafana\u00bb.<\/p>\n<h3>Come \u00e8 stata presa la decisione e la raccolta delle risorse?<\/h3>\n<p>\n<b>A:<\/b> \u2013 Condividete un po' la cucina interna. Come \u00e8 stata presa la decisione di allocare risorse per un importante rinnovamento del prodotto? Ci sono, in effetti, certi rischi. E per favore, nel contesto di ci\u00f2 che intendete supportare con nuove versioni: come si giustifica questa decisione dal punto di vista della gestione?<\/p>\n<p><b>MM:<\/b> \u2013 Evidentemente, non abbiamo raccontato molto bene il dramma della storia. Ci siamo trovati in una situazione in cui dovevamo fare qualcosa, e abbiamo proceduto con sostanzialmente due team paralleli:<\/p>\n<ul>\n<li>Una persona si \u00e8 occupata del lancio di un sistema di monitoraggio basato su nuove metodologie: monitoraggio come servizio, una serie standard di soluzioni open source che combiniamo e poi tentiamo di adattare i processi aziendali per lavorare con il nuovo sistema di monitoraggio.<\/li>\n<li>Parallelamente, avevamo un programmatore appassionato che si occupava di questo (parlando di s\u00e9). Alla fine, ha vinto.<\/li>\n<\/ul>\n<p>\n<b>A:<\/b> \u2013 E qual \u00e8 la dimensione del team?<\/p>\n<p><b>MC:<\/b> \u2013 \u00c8 proprio di fronte a voi.<\/p>\n<p><b>A:<\/b> \u2013 Quindi, come sempre, \u00e8 necessario avere un passionale?<\/p>\n<p><b>MM:<\/b> \u2013 Non so cosa sia un passionale.<\/p>\n<p><b>A:<\/b> \u2013 In questo caso, evidentemente, sei tu. Grazie mille, siete fantastici.<\/p>\n<p><b>MM:<\/b> \u2013 Grazie.<\/p>\n<h3>Riguardo ai 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 e patchare la vostra soluzione, diciamo, i poller, i proxy e parzialmente il preprocessore di \"Zabbix\"; e la loro interazione? \u00c8 possibile ottimizzare i lavori esistenti per un sistema con pi\u00f9 proxy?<\/p>\n<p><b>MM:<\/b> \u2013 So che il server \u00abZabbix\u00bb viene costruito tramite un proxy (viene compilato e si ottiene il codice). Non lo abbiamo testato in produzione. Non ne sono sicuro, ma penso che il gestore del preprocessore non venga utilizzato nel proxy. Il compito del proxy \u00e8 prendere un insieme di metriche da \u00abZabbix\u00bb, scansionarle (scrive anche la configurazione, il database locale) e restituirle al server \u00abZabbix\u00bb. Il preprocessamento avverr\u00e0 poi direttamente sul server quando riceve i dati.<\/p>\n<p>L'interesse per il proxy \u00e8 comprensibile. Lo verificheremo. \u00c8 un argomento interessante.<\/p>\n<p><b>A:<\/b> \u2013 L'idea era questa: se \u00e8 possibile applicare patch ai poller, allora si possono applicare patch al proxy e modificare l'interazione con il server, adattando il preprocessore a questi scopi solo sul server.<\/p>\n<p><b>MM:<\/b> \u2013 Penso sia anche pi\u00f9 semplice. Prendete il codice, applicate la patch, poi configurate come necessario \u2013 costruite i server proxy (ad esempio con ODBC) e distribuite il codice patchato nei vari sistemi. Dove serve, costruite i proxy, dove serve, il server.<\/p>\n<p><b>A:<\/b> \u2013 Non sar\u00e0 necessario applicare ulteriori patch per la trasmissione del proxy al server, giusto?<\/p>\n<p><b>MC:<\/b> \u2013 No, \u00e8 standard.<\/p>\n<p><b>MM:<\/b> In realt\u00e0, una delle idee non \u00e8 mai stata sentita. Abbiamo sempre mantenuto un equilibrio tra l'esplosione di idee e il numero di cambiamenti, mantenendo 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=\"Riproduci 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 essere con noi. Ti piacciono i nostri articoli? Vuoi vedere pi\u00f9 contenuti interessanti? Supportaci effettuando un ordine o raccomandandoci ai tuoi conoscenti, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS cloud per sviluppatori a partire da $4,99<\/a><\/noindex>, <b>un'alternativa unica ai server entry-level, che abbiamo creato per te:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Tutta la verit\u00e0 su VPS (KVM) E5-2697 v3 (6 Core) 10GB DDR4 480GB SSD 1Gbps a partire da $19. Come dividere il server correttamente?<\/a><\/noindex> (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> Scopri di pi\u00f9 su <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Come costruire un'infrastruttura di classe enterprise con server Dell R730xd E5-2650 v4 dal costo di 9000 euro a prezzi stracciati?<\/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 4.9.10 - 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. 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\" \/>\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) 4.9.10\" \/>\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. 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\" \/>\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, Maxim Chernecov (Intersvyaz): Zabbix, 100kNVPS su un singolo server | ProHoster","description":"La prossima conferenza HighLoad++ si terr\u00e0 il 6 e 7 aprile 2020 a San Pietroburgo. Maggiori dettagli e biglietti al link. HighLoad++ Moscow 2018. Sala \u00abMosca\u00bb. 9 novembre, 15:00. Riassunti e presentazione. * Monitoraggio \u2014 online e analisi. * Principali limitazioni della piattaforma ZABBIX. * Soluzione per la scalabilit\u00e0 dello storage analitico. * Ottimizzazione del server ZABBIX. * Ottimizzazione UI. * Esperienza di sfruttamento.","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. 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","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"},"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}]}}