{"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\/fr\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","title":{"rendered":"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>La prochaine conf\u00e9rence HighLoad++ aura lieu les 6 et 7 avril 2020 \u00e0 Saint-P\u00e9tersbourg. D\u00e9tails et billets. <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2sSxgBx\">via le lien<\/a><\/noindex>. HighLoad++ Moscou 2018. Salle \u00ab Moscou \u00bb. 9 novembre, 15h00. R\u00e9sum\u00e9s et <noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/moscow\/2018\/abstracts\/4141\">pr\u00e9sentation<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/5c3e11c8449de7375d30b2cd75b5927e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n* Surveillance - en ligne et analytique.<br \/>\n* Principales limites de la plateforme ZABBIX.<br \/>\n* Solution pour l'\u00e9volutivit\u00e9 du stockage analytique.<br \/>\n* Optimisation du serveur ZABBIX.<br \/>\n* Optimisation de l'UI.<br \/>\n* Exp\u00e9rience d'exploitation du syst\u00e8me sous des charges d\u00e9passant 40k NVPS.<br \/>\n* En r\u00e9sum\u00e9, les conclusions.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>Mikhail Makurov (ci-apr\u00e8s - MM):<\/b> \u2013 Bonjour \u00e0 tous !<\/p>\n<p><b>Maxime Tchernetsov (ci-apr\u00e8s - MT):<\/b> \u2013 Bonjour !<\/p>\n<p><b>MM:<\/b> \u2013 Permettez-moi de pr\u00e9senter Maxime. Maxime est un ing\u00e9nieur talentueux, le meilleur sp\u00e9cialiste r\u00e9seau que je connaisse. Maxime s'occupe des r\u00e9seaux et des services, de leur d\u00e9veloppement et de leur exploitation.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/a7fc62a03c0aede46f4a4695845daa22.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MT:<\/b> \u2013 Et j'aimerais parler de Mikha\u00efl. Mikha\u00efl est d\u00e9veloppeur en C. Il a \u00e9crit plusieurs solutions \u00e0 fort trafic pour notre entreprise. Nous vivons et travaillons dans l'Oural, dans la ville des durs hommes de Tcheliabinsk, au sein de la soci\u00e9t\u00e9 \u00ab Intersvyaz \u00bb. Notre entreprise est un fournisseur de services Internet et de t\u00e9l\u00e9vision par c\u00e2ble pour un million de personnes dans 16 villes.<\/p>\n<p><b>MM:<\/b> \u2013 Et il convient de dire qu'\u00ab Intersvyaz \u00bb est bien plus qu'un simple fournisseur, c'est une entreprise IT. La plupart de nos solutions ont \u00e9t\u00e9 r\u00e9alis\u00e9es par notre d\u00e9partement IT.<\/p>\n<p><b>A:<\/b> des serveurs traitant le trafic, jusqu'au centre d'appel et \u00e0 l'application mobile. Le d\u00e9partement IT compte actuellement environ 80 personnes avec des comp\u00e9tences tr\u00e8s vari\u00e9es.<\/p>\n<h3>\u00c0 propos de Zabbix et de son architecture<\/h3>\n<p>\n<b>MT:<\/b> \u2013 Et maintenant, je vais essayer de battre un record personnel et de dire en une minute ce qu'est Zabbix (ci-apr\u00e8s - \u00ab Zabbix \u00bb).<\/p>\n<p>\u00ab Zabbix \u00bb se positionne comme un syst\u00e8me de surveillance \u00ab cl\u00e9 en main \u00bb de niveau entreprise. Il contient de nombreuses fonctionnalit\u00e9s facilitant la vie : des r\u00e8gles d'escalade avanc\u00e9es, une API pour l'int\u00e9gration, la groupement et la d\u00e9couverte automatique des h\u00f4tes et m\u00e9triques. Dans \u00ab Zabbix \u00bb, il existe ce que l'on appelle des outils d'\u00e9volutivit\u00e9 - des proxies. \u00ab Zabbix \u00bb est un syst\u00e8me \u00e0 code source ouvert.<\/p>\n<p>En bref sur l'architecture. On peut dire qu'elle se compose de trois composants :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/0d2ae3ee04d00885d65e17b8cf44182b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Serveur. \u00c9crit en C. Avec un traitement et une transmission d'informations entre les flux assez complexes. Tout le traitement se fait dans celui-ci : de la r\u00e9ception \u00e0 la sauvegarde dans la base.<\/li>\n<li>Toutes les donn\u00e9es sont stock\u00e9es dans la base. \u00ab Zabbix \u00bb prend en charge MySQL, PostgreSQL et Oracle.<\/li>\n<li>L'interface web est \u00e9crite en PHP. Dans la plupart des syst\u00e8mes, elle est fournie avec le serveur Apache, mais fonctionne de mani\u00e8re plus efficace en association avec nginx + php.<\/li>\n<\/ul>\n<p>\nAujourd'hui, nous aimerions partager avec vous une histoire de la vie de notre entreprise, li\u00e9e \u00e0 \u00abZabbix\u00bb...<\/p>\n<h3>Une histoire de la vie de l'entreprise \u00abIntersvyaz\u00bb. Qu'avons-nous et de quoi avons-nous besoin ?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/407c35b81995ddca6444fa418941063f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Il y a 5 ou 6 mois. Un jour apr\u00e8s le travail...<\/i><\/p>\n<p><b>MT:<\/b> \u2013 Misha, salut ! Content de t'avoir attrap\u00e9 \u2013 j'ai quelque chose \u00e0 te dire. Nous avons encore eu des probl\u00e8mes avec la surveillance. Lors d'une grande panne, tout ralentissait et il n'y avait aucune information sur l'\u00e9tat du r\u00e9seau. Malheureusement, cela ne se produit pas pour la premi\u00e8re fois. J'ai besoin de ton aide. Faisons en sorte que notre syst\u00e8me de surveillance fonctionne en toutes circonstances !<\/p>\n<p><b>MM:<\/b> \u2013 Mais d'abord, synchronisons-nous. Je n'ai pas regard\u00e9 cela depuis quelques ann\u00e9es. D'apr\u00e8s ce que je me souviens, nous avons abandonn\u00e9 Nagios et sommes pass\u00e9s \u00e0 \u00abZabbix\u00bb il y a environ 8 ans. Et maintenant, il me semble que nous avons 6 serveurs puissants et une dizaine de proxys. Je ne me trompe pas ?<\/p>\n<p><b>MT:<\/b> \u2013 Presque. 15 serveurs, dont certains sont des machines virtuelles. Le plus important, c'est que cela ne nous sauve pas au moment o\u00f9 nous en avons le plus besoin. Lors d'une panne, les serveurs ralentissent et rien n'est visible. Nous avons essay\u00e9 d'optimiser la configuration, mais cela ne donne pas de gains de performance satisfaisants.<\/p>\n<p><b>MM:<\/b> \u2013 Je comprends. Avez-vous d\u00e9j\u00e0 analys\u00e9 quelque chose, trouv\u00e9 des \u00e9l\u00e9ments de diagnostic ?<\/p>\n<p><b>MT:<\/b> \u2013 La premi\u00e8re chose avec laquelle il faut composer, c'est la base de donn\u00e9es. MySQL est d\u00e9j\u00e0 constamment sollicit\u00e9, conservant les nouvelles m\u00e9triques, et quand \u00abZabbix\u00bb commence \u00e0 g\u00e9n\u00e9rer une multitude d'\u00e9v\u00e9nements, la base s'enferme litt\u00e9ralement pendant plusieurs heures. Je t'ai d\u00e9j\u00e0 parl\u00e9 de l'optimisation de la configuration, mais cette ann\u00e9e, nous avons mis \u00e0 jour le mat\u00e9riel : les serveurs disposent de plus de cent Go de m\u00e9moire et de matrices de disques en RAID SSD \u2013 il n'y a plus de sens \u00e0 agrandir cela lin\u00e9airement. Que faisons-nous ?<\/p>\n<p><b>MM:<\/b> \u2013 Je comprends. En g\u00e9n\u00e9ral, MySQL est une base de donn\u00e9es LTP. Il semble qu'elle ne convienne plus pour stocker l'archive des m\u00e9triques de notre taille. Commen\u00e7ons \u00e0 examiner cela.<\/p>\n<p><b>MT:<\/b> \u2013 D'accord !<\/p>\n<h3>Int\u00e9gration de Zabbix et Clickhouse comme r\u00e9sultat du hackathon<\/h3>\n<p>\nApr\u00e8s un certain temps, nous avons obtenu des donn\u00e9es int\u00e9ressantes :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/46899e843b1e89524c6d762c1c167a6c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa plupart de l'espace dans notre base \u00e9tait occup\u00e9 par l'archive des m\u00e9triques et moins de 1 % \u00e9tait utilis\u00e9 pour la configuration, les mod\u00e8les et les param\u00e8tres. \u00c0 ce moment-l\u00e0, nous exploitons d\u00e9j\u00e0 une solution Big Data bas\u00e9e sur Clickhouse depuis plus d'un an. La direction \u00e0 suivre pour nous \u00e9tait \u00e9vidente. Lors de notre \u00ab Hackathon \u00bb printanier, j'ai \u00e9crit une int\u00e9gration de Zabbix avec Clickhouse pour le serveur et le frontend. \u00c0 l'\u00e9poque, Zabbix avait d\u00e9j\u00e0 support\u00e9 ElasticSearch, et nous avons d\u00e9cid\u00e9 de les comparer.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/92fa3da527de48102cbdcf6959d46814.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Comparaison Clickhouse et Elasticsearch<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Pour la comparaison, nous avons g\u00e9n\u00e9r\u00e9 une charge \u00e9quivalente \u00e0 celle fournie par le serveur Zabbix et observ\u00e9 comment les syst\u00e8mes se comporteraient. Nous avons \u00e9crit des donn\u00e9es par lots de 1000 lignes, en utilisant CURL. Nous supposions \u00e0 l'avance que Clickhouse serait plus efficace pour le profil de charge g\u00e9n\u00e9r\u00e9 par Zabbix. Les r\u00e9sultats ont m\u00eame d\u00e9pass\u00e9 nos attentes :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/354be7147b23a0bcb9ada3af93f59fac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDans des conditions identiques lors des tests, Clickhouse \u00e9crivait trois fois plus de donn\u00e9es. Les deux syst\u00e8mes consommaient tr\u00e8s efficacement (peu de ressources) en lisant les donn\u00e9es. Mais ElasticSearch n\u00e9cessitait beaucoup de processeur lors de l'\u00e9criture :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/fea7f7f7801024cee0f9367c49d81d5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAu total, Clickhouse surpassait de mani\u00e8re significative ElasticSearch en termes de consommation de processeur et de vitesse. De plus, gr\u00e2ce \u00e0 la compression des donn\u00e9es, Clickhouse utilise 11 fois moins d'espace sur le disque dur et effectue environ 30 fois moins d'op\u00e9rations disque :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/50c24c4615ed350d7d78ec8655423409.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MT:<\/b> \u2013 Oui, le travail avec le sous-syst\u00e8me de stockage de Clickhouse est r\u00e9alis\u00e9 de mani\u00e8re tr\u00e8s efficace. On peut utiliser d'\u00e9normes disques SATA pour les bases et obtenir une vitesse d'\u00e9criture de plusieurs centaines de milliers de lignes par seconde. Le syst\u00e8me prend en charge le sharding et la r\u00e9plication d\u00e8s la sortie de la bo\u00eete, et est tr\u00e8s simple \u00e0 configurer. Nous sommes plus que satisfaits de son exploitation au cours de l'ann\u00e9e.<\/p>\n<p>Pour optimiser les ressources, on peut installer Clickhouse \u00e0 c\u00f4t\u00e9 de la base principale existante, \u00e9conomisant ainsi une quantit\u00e9 consid\u00e9rable de temps processeur et d'op\u00e9rations disque. Nous avons d\u00e9plac\u00e9 l'archive des m\u00e9triques vers les clusters Clickhouse d\u00e9j\u00e0 existants :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/4cf44eae47a13f2fc50377fec884ecc8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNous avons tellement d\u00e9charg\u00e9 la base MySQL principale que nous avons pu la combiner sur une seule machine avec le serveur Zabbix et abandonner le serveur d\u00e9di\u00e9 pour MySQL.<\/p>\n<h3>Comment fonctionne le polling dans Zabbix ?<\/h3>\n<p>\n<i>Il y a 4 mois<\/i><\/p>\n<p><b>MM:<\/b> \u2013 Alors, peut-on oublier les probl\u00e8mes li\u00e9s \u00e0 la base ?<\/p>\n<p><b>MT:<\/b> \u2013 C'est s\u00fbr ! Une autre t\u00e2che que nous devons r\u00e9soudre est la collecte de donn\u00e9es lente. Maintenant, tous nos 15 serveurs proxy sont surcharg\u00e9s par des processus SNMP et de polling. Et il n'y a pas d'autre choix que de mettre en place de nouveaux serveurs.<\/p>\n<p><b>MM:<\/b> \u2013 Excellent. Mais dis-moi d'abord comment fonctionne le polling dans \u00abZabbix\u00bb ?<\/p>\n<p><b>MT:<\/b> \u2013 Pour faire court, il existe 20 types de m\u00e9triques et une dizaine de fa\u00e7ons de les obtenir. \u00abZabbix\u00bb peut collecter des donn\u00e9es soit en mode \u00abrequ\u00eate - r\u00e9ponse\u00bb, soit attendre de nouvelles donn\u00e9es via l'\u00abInterface Trapper\u00bb.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/cb2d974ee113b4147a4a588c1f35c730.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl convient de noter que dans le \u00abZabbix\u00bb original, cette m\u00e9thode (Trapper) est la plus rapide. <\/p>\n<p>Il existe des serveurs proxy pour la r\u00e9partition des charges :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/7b5c94a82b7e06aff6df6ea5549babdf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLes proxies peuvent effectuer les m\u00eames fonctions de collecte que le serveur \u00abZabbix\u00bb, recevant des t\u00e2ches de celui-ci et envoyant les m\u00e9triques collect\u00e9es pr\u00e9cis\u00e9ment via l'interface Trapper. C'est la m\u00e9thode de r\u00e9partition de charge officiellement recommand\u00e9e. Les proxies sont \u00e9galement utiles pour surveiller l'infrastructure distante fonctionnant via NAT ou un canal lent :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/dbfb2777f9dd9b4adb81f1fa89f3bdd5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 L'architecture est claire. Nous devons regarder les sources\u2026<\/p>\n<p><i>Quelques jours plus tard<\/i><\/p>\n<h3>L'histoire de la fa\u00e7on dont nmap fping a triomph\u00e9<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Il me semble que j'ai trouv\u00e9 quelque chose.<\/p>\n<p><b>MT:<\/b> \u2013 Raconte-moi !<\/p>\n<p><b>MM:<\/b> \u2013 J'ai d\u00e9couvert que lors des v\u00e9rifications de disponibilit\u00e9, \u00abZabbix\u00bb teste un maximum de 128 h\u00f4tes simultan\u00e9ment. J'ai essay\u00e9 d'augmenter ce chiffre \u00e0 500 et j'ai supprim\u00e9 l'intervalle entre les paquets dans leur ping \u2013 cela a doubl\u00e9 la performance. Mais j'aimerais des chiffres plus \u00e9lev\u00e9s.<\/p>\n<p><b>MT:<\/b> \u2013 Dans ma pratique, il m'arrive parfois de v\u00e9rifier la disponibilit\u00e9 de milliers d'h\u00f4tes, et je n'ai rien trouv\u00e9 de plus rapide que nmap pour cela. Je suis s\u00fbr que c'est le moyen le plus rapide. Essayons-le ! Nous devons consid\u00e9rablement augmenter le nombre d'h\u00f4tes par it\u00e9ration.<\/p>\n<p><b>MM:<\/b> \u2013 V\u00e9rifier plus de cinq cents ? 600 ?<\/p>\n<p><b>MT:<\/b> \u2013 Au moins quelques milliers.<\/p>\n<p><b>MM:<\/b> \u2013 D'accord. La chose la plus importante que je voulais dire : j'ai constat\u00e9 que la plupart des pollings dans \u00abZabbix\u00bb sont effectu\u00e9s de mani\u00e8re synchronis\u00e9e. Nous devons absolument le convertir en mode asynchrone. Alors nous pourrons augmenter radicalement le nombre de m\u00e9triques collect\u00e9es par les pollers, surtout si nous augmentons le nombre de m\u00e9triques par it\u00e9ration.<\/p>\n<p><b>MT:<\/b> \u2013 G\u00e9nial ! Et quand ?<\/p>\n<p><b>MM:<\/b> \u2013 Comme d'habitude, hier.<\/p>\n<p><b>MT:<\/b> \u2013 Nous avons compar\u00e9 les deux versions de fping et nmap :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/4be4cfe019b6b318ae2fbdbf82577111.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSur un grand nombre d'h\u00f4tes, nmap s'est r\u00e9v\u00e9l\u00e9 jusqu'\u00e0 cinq fois plus efficace que pr\u00e9vu. \u00c9tant donn\u00e9 que nmap v\u00e9rifie uniquement la disponibilit\u00e9 et le temps de r\u00e9ponse, nous avons transf\u00e9r\u00e9 le comptage des pertes dans des d\u00e9clencheurs et consid\u00e9rablement r\u00e9duit les intervalles de v\u00e9rification de la disponibilit\u00e9. Nous avons trouv\u00e9 qu'un nombre optimal d'h\u00f4tes pour nmap se situe aux alentours de 4000 par it\u00e9ration. Nmap nous a permis de r\u00e9duire par trois la consommation CPU pour les v\u00e9rifications de disponibilit\u00e9 et de r\u00e9duire l'intervalle de 120 secondes \u00e0 10.<\/p>\n<h3>Optimisation du polling<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Nous nous sommes ensuite pench\u00e9s sur les pollers. Nous \u00e9tions principalement int\u00e9ress\u00e9s par le pr\u00e9l\u00e8vement SNMP et les agents. Dans \"Zabbix\", le polling est effectu\u00e9 de mani\u00e8re synchrone et des mesures sp\u00e9ciales ont \u00e9t\u00e9 prises pour augmenter l'efficacit\u00e9 du syst\u00e8me. En mode synchrone, l'indisponibilit\u00e9 des h\u00f4tes entra\u00eene une d\u00e9gradation significative du polling. Un v\u00e9ritable syst\u00e8me d'\u00e9tats existe, ainsi que des processus sp\u00e9ciaux \u2013 les pollers dit inaccessibles, qui ne fonctionnent qu'avec des h\u00f4tes inaccessibles :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/6a001eff121f2392fffda69d719ebad6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCeci est un commentaire qui montre la matrice des \u00e9tats, toute la complexit\u00e9 des transitions n\u00e9cessaires pour que le syst\u00e8me reste efficace. De plus, le polling synchrone est assez lent :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/3579a4a3de85c37f812ba2ca71cf4b3d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC'est pourquoi des milliers de threads de pollers sur une dizaine de proxy n'ont pas pu collecter le nombre de donn\u00e9es dont nous avions besoin. La r\u00e9alisation asynchrone a non seulement r\u00e9solu les probl\u00e8mes de nombre de threads, mais a \u00e9galement simplifi\u00e9 consid\u00e9rablement le syst\u00e8me d'\u00e9tats pour les h\u00f4tes inaccessibles, car quel que soit le nombre v\u00e9rifi\u00e9 lors d'une it\u00e9ration de polling, le temps d'attente maximum \u00e9tait d'un timeout :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/c5f2d9bb3e558f8bba6bd8a96d8ed6a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe plus, nous avons modifi\u00e9 et am\u00e9lior\u00e9 le syst\u00e8me de polling pour les requ\u00eates SNMP. En effet, la plupart ne peuvent pas r\u00e9pondre \u00e0 plusieurs requ\u00eates SNMP simultan\u00e9ment. C'est pourquoi nous avons cr\u00e9\u00e9 un mode hybride, o\u00f9 le polling SNMP du m\u00eame h\u00f4te est effectu\u00e9 de mani\u00e8re asynchrone :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/eb61766e8afce9bf72d6e9757492559e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCela se fait pour l'ensemble d'un lot d'h\u00f4tes. Ce mode n'est finalement pas plus lent qu'un mode enti\u00e8rement asynchrone, car l'interrogation de 150 SNMP valeurs est de toute fa\u00e7on beaucoup plus rapide qu'un timeout.<\/p>\n<p>Nos exp\u00e9riences ont montr\u00e9 que le nombre optimal de requ\u00eates par it\u00e9ration est d'environ 8000 lors du polling SNMP. Au total, le passage au mode asynchrone a permis d'acc\u00e9l\u00e9rer les performances de polling de 200 fois, plusieurs centaines de fois.<\/p>\n<p><b>MT:<\/b> Les optimisations de polling obtenues ont montr\u00e9 que nous pouvons non seulement nous d\u00e9barrasser de tous les proxies, mais aussi r\u00e9duire les intervalles pour de nombreux contr\u00f4les, rendant les proxies inutiles comme moyen de r\u00e9partition de la charge.<\/p>\n<p><i>Il y a environ trois mois<\/i><\/p>\n<h3>Change l'architecture \u2013 augmente la charge !<\/h3>\n<p>\n<b>MM:<\/b> Eh bien, Max, pr\u00eat pour la production ? J'ai besoin d'un puissant serveur et d'un bon ing\u00e9nieur.<\/p>\n<p><b>MT:<\/b> Tr\u00e8s bien, planifions-le. Il est temps de sortir du point mort \u00e0 5000 m\u00e9triques par seconde.<\/p>\n<p><i>Le matin apr\u00e8s la mise \u00e0 niveau<\/i><\/p>\n<p><b>MT:<\/b> Misha, nous avons mis \u00e0 jour, mais nous sommes revenus en arri\u00e8re d'ici le matin... Devine quelle vitesse nous avons r\u00e9ussi \u00e0 atteindre ?<\/p>\n<p><b>MM:<\/b> Environ 20 000 au maximum.<\/p>\n<p><b>MT:<\/b> Ah, 25 ! Malheureusement, nous en sommes au m\u00eame point, l\u00e0 o\u00f9 nous avons commenc\u00e9.<\/p>\n<p><b>MM:<\/b> Pourquoi cela ? Avez-vous fait un diagnostic ?<\/p>\n<p><b>MT:<\/b> Oui, bien s\u00fbr ! Voici, par exemple, un top int\u00e9ressant :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/09ac3336a820977b643ee5328ad2a851.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> Regardons. Je vois que nous avons essay\u00e9 un grand nombre de fils de polling :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/346e8047f1f6f2bb1b1dd91a728e437b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMais nous n'avons pas pu utiliser le syst\u00e8me m\u00eame \u00e0 moiti\u00e9 :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/be1843dbec0fb10d8da59e8c570adc5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEt la performance globale est assez faible, environ 4 000 m\u00e9triques par seconde :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/02eaf0b56629ebc6d3d5c132374a91b8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nY a-t-il autre chose ?<\/p>\n<p><b>MT:<\/b> Oui, strace d'un des pollers :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/73fc58bd2925859f6fbbcd118a0483c0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> Ici, on voit clairement que le processus de polling attend des \u00ab s\u00e9maphores \u00bb. Ce sont des blocages :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/d0bec44a9677ec111066dccc1dd8c5dc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MT:<\/b> Je ne comprends pas.<\/p>\n<p><b>MM:<\/b> Regarde, cela ressemble \u00e0 une situation o\u00f9 de nombreux fils essaient de travailler avec une ressource avec laquelle une seule personne peut travailler \u00e0 la fois. Donc, tout ce qu'ils peuvent faire est de partager cette ressource dans le temps :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/7dbb9e8941b01b666dd48f6301151ec9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEt la performance totale du travail avec cette ressource est limit\u00e9e par la vitesse d'un seul c\u0153ur :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/e00b197577f4ea7350fe56665dbae299.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl existe deux fa\u00e7ons de r\u00e9soudre ce probl\u00e8me.<\/p>\n<p>Mettre \u00e0 niveau le mat\u00e9riel de la machine, passer \u00e0 des c\u0153urs plus rapides :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/296d84b434ed7277fb558a8a4dd5ac47.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOu changer l'architecture et parall\u00e8lement \u2013 la charge :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/efea73106440db4e5eda5aa475dd088b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MT:<\/b> Au fait, sur la machine de test, nous allons utiliser moins de c\u0153urs que sur la production, mais ils sont environ 1,5 fois plus rapides par c\u0153ur !<\/p>\n<p><b>MM:<\/b> C'est clair ? Il faut examiner le code du serveur.<\/p>\n<h3>Le chemin des donn\u00e9es dans le serveur Zabbix<\/h3>\n<p>\n<b>MT:<\/b> Pour comprendre, nous avons commenc\u00e9 \u00e0 analyser comment les donn\u00e9es sont transmises \u00e0 l'int\u00e9rieur du serveur \u00ab Zabbix \u00bb :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/b3d84e3fcb12e7afe3c974bdeacc357a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC'est une belle image, n'est-ce pas ? Alors, parcourons-la \u00e9tape par \u00e9tape pour \u00e9claircir un peu plus. Il y a des fils et des services responsables de la collecte des donn\u00e9es :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/966db6fa84723d4d3bde8a23736294d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLes m\u00e9triques collect\u00e9es sont transmises via un socket au Preprocessor manager, o\u00f9 elles sont stock\u00e9es dans une file d'attente :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/1e34fe2c4194f7bd71ec409d6169fb94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe \u00ab gestionnaire de pr\u00e9traitement \u00bb transmet les donn\u00e9es \u00e0 ses workers, qui ex\u00e9cutent des instructions de pr\u00e9traitement et les renvoient par le m\u00eame socket :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/d647caf3886f0c9378a32314e812edc1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nApr\u00e8s cela, le gestionnaire de pr\u00e9traitement les enregistre dans le cache d'historique:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/ff0e29b0d974d76bd3a3b71d36a1cc68.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDe l\u00e0, ils sont r\u00e9cup\u00e9r\u00e9s par les synchroniseurs d'historique, qui effectuent de nombreuses fonctions, par exemple, le calcul des d\u00e9clencheurs, le remplissage du cache de valeurs et, surtout, la sauvegarde des m\u00e9triques dans le stockage d'historique. En g\u00e9n\u00e9ral, le processus est complexe et assez confus.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/c418a17edeb9153a03dff233aa8f715e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 La premi\u00e8re chose que nous avons remarqu\u00e9e est que la plupart des flux rivalisent pour ce qu'on appelle le \u00ab cache de configuration \u00bb (zone de m\u00e9moire o\u00f9 toutes les configurations du serveur sont stock\u00e9es). Surtout, de nombreux blocages sont caus\u00e9s par les flux responsables de la collecte de donn\u00e9es :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/589d8f564ece6e63457450e9c5081b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026car la configuration contient non seulement des m\u00e9triques et leurs param\u00e8tres, mais aussi des files d'attente dont les pollers tirent des informations sur ce qu'ils doivent faire ensuite. Lorsque les pollers sont nombreux, et qu'un bloque la configuration, les autres attendent des requ\u00eates :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/8026cdfcd7def84cb3708b7255b08c66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Les pollers ne doivent pas entrer en conflit<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/d436cd3415a6f58e1db5a609689c12b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC'est pourquoi la premi\u00e8re chose que nous avons faite a \u00e9t\u00e9 de diviser la file d'attente en 4 parties et de permettre aux pollers de bloquer ces files dans des conditions s\u00fbres, ces parties simultan\u00e9ment :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/9466e5f0053dff583e76713f10e30a89.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCela a \u00e9limin\u00e9 la concurrence pour le cache de configuration, et la vitesse de fonctionnement des pollers a consid\u00e9rablement augment\u00e9. Mais ensuite, nous avons rencontr\u00e9 le probl\u00e8me que le gestionnaire de pr\u00e9traitement avait commenc\u00e9 \u00e0 accumuler une file d'attente de t\u00e2ches :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/dd58e625823310fb0a818ed81abdceac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Le gestionnaire de pr\u00e9traitement doit savoir \u00e9tablir des priorit\u00e9s<\/h3>\n<p>\nCela se produisait dans les cas o\u00f9 il manquait de performance. Alors, tout ce qu'il pouvait faire \u00e9tait d'accumuler les requ\u00eates des processus de collecte de donn\u00e9es et de les stocker dans un tampon jusqu'\u00e0 ce qu'il ait \u00e9puis\u00e9 toute la m\u00e9moire et s'arr\u00eate :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/b215d880863d470ea6ca960c6338b8ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPour r\u00e9soudre ce probl\u00e8me, nous avons ajout\u00e9 un deuxi\u00e8me socket, qui a \u00e9t\u00e9 sp\u00e9cifiquement attribu\u00e9 aux workers :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/09d1bb92a009f9d29ba68d966de54210.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAinsi, le gestionnaire de pr\u00e9traitement a eu la possibilit\u00e9 de prioriser son travail et, en cas d'augmentation du tampon, de ralentir la collecte en laissant aux workers la possibilit\u00e9 de r\u00e9cup\u00e9rer ce tampon :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/8f4db3661c428e6e6dcfe4cc0c44c016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEnsuite, nous avons d\u00e9couvert qu'une des raisons du ralentissement \u00e9tait les workers eux-m\u00eames, car ils rivalisaient pour une ressource qui n'\u00e9tait pas du tout importante pour leur travail. Ce probl\u00e8me a \u00e9t\u00e9 corrig\u00e9 dans un correctif, et dans les nouvelles versions de \u00ab Zabbix \u00bb, il est d\u00e9j\u00e0 r\u00e9solu :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/eedb359823dd23d369339e3735e341fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Nous augmentons le nombre de sockets - nous obtenons un r\u00e9sultat<\/h3>\n<p>\nEnsuite, le gestionnaire de pr\u00e9traitement est devenu un goulot d'\u00e9tranglement, car c'est un seul thread. Il atteignait la vitesse du noyau, donnant une vitesse maximale d'environ 70 000 m\u00e9triques par seconde :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/f93ccbc656c0f9e103873d99a9397495.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nC'est pourquoi nous avons cr\u00e9\u00e9 quatre ensembles de sockets, de workers :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/81a3dea3aa0f8807add8d045cf64a609.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEt cela a permis d'augmenter la vitesse \u00e0 environ 130 000 m\u00e9triques :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/016ff07cd021a7221caef19e6ce36a9b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa non-lin\u00e9arit\u00e9 de la croissance s'explique par le fait qu'il y avait une concurrence pour le cache d'historique. Quatre gestionnaires de pr\u00e9traitement et des synchronisateurs d'historique concouraient pour cela. \u00c0 ce moment-l\u00e0, nous obtenions sur la machine de test environ 130 000 m\u00e9triques par seconde, en utilisant environ 95 % de son processeur :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/62162254cd8bc66c1cef697158691588.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Il y a environ 2,5 mois<\/i><\/p>\n<h3>L'abandon de snmp-community a augment\u00e9 les NVPs d'1,5 fois<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Max, j'ai besoin d'une nouvelle machine de test ! On ne peut plus en ajouter dans l'actuelle.<\/p>\n<p><b>MT:<\/b> \u2013 Que \u03ad\u03c7\u03bf\u03c5\u03bc\u03b5 maintenant ?<\/p>\n<p><b>MM:<\/b> \u2013 Actuellement \u2013 130k NVPs et le processeur '\u00e0 sa capacit\u00e9 maximum'.<\/p>\n<p><b>MT:<\/b> \u2013 Wow ! G\u00e9nial ! Attends, j'ai deux questions. D'apr\u00e8s mes calculs, nos besoins sont d'environ 15 \u00e0 20 000 m\u00e9triques par seconde. Pourquoi en avoir plus ?<\/p>\n<p><b>MM:<\/b> \u2013 J'aimerais finir ce que nous avons commenc\u00e9. Je veux voir combien nous pouvons tirer de ce syst\u00e8me.<\/p>\n<p><b>MT:<\/b> \u2013 Mais...<\/p>\n<p><b>MM:<\/b> \u2013 Mais c'est inutile pour l'entreprise.<\/p>\n<p><b>MT:<\/b> \u2013 Je comprends. Et la deuxi\u00e8me question : ce que nous avons maintenant, pourrons-nous le g\u00e9rer nous-m\u00eames, sans l'aide d'un d\u00e9veloppeur ?<\/p>\n<p><b>MM:<\/b> \u2013 Je ne pense pas. Modifier le fonctionnement du cache de configuration est un probl\u00e8me. Cela implique des changements dans la plupart des flux et est assez complexe \u00e0 maintenir. Il est probable qu'il sera tr\u00e8s difficile de le soutenir.<\/p>\n<p><b>MT:<\/b> \u2013 Alors il faut une alternative.<\/p>\n<p><b>MM:<\/b> \u2013 Il y a cette option. Nous pourrions passer \u00e0 des noyaux rapides, tout en abandonnant le nouveau syst\u00e8me de verrouillage. Nous obtiendrons quand m\u00eame des performances de 60 \u00e0 80 000 m\u00e9triques. Tout le reste du code pourrait rester. 'ClickHouse', le polling asynchrone fonctionneront. Et cela sera facile \u00e0 maintenir.<\/p>\n<p><b>MT:<\/b> \u2013 Excellent ! Je propose qu'on s'arr\u00eate l\u00e0-dessus.<\/p>\n<p>Apr\u00e8s l'optimisation de la partie serveur, nous avons enfin pu d\u00e9ployer le nouveau code en production. Nous avons abandonn\u00e9 certaines modifications en faveur du passage \u00e0 une machine avec des noyaux rapides et de la minimisation des changements dans le code. Nous avons \u00e9galement simplifi\u00e9 la configuration et, dans la mesure du possible, renonc\u00e9 aux macros dans les \u00e9l\u00e9ments de donn\u00e9es, car elles sont \u00e0 l'origine de blocages suppl\u00e9mentaires.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/2b1ed396b09bd815fba973ebb5f73d76.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPar exemple, l'abandon du macro snmp-community, souvent utilis\u00e9 dans la documentation et les exemples, a permis d'acc\u00e9l\u00e9rer les NVPs d'environ 1,5 fois.<\/p>\n<p><i>Apr\u00e8s deux jours en production<\/i><\/p>\n<h3>Nous supprimons les fen\u00eatres contextuelles de l'historique des incidents<\/h3>\n<p>\n<b>MT:<\/b> \u2013 Misha, nous utilisons le syst\u00e8me depuis deux jours et tout fonctionne. Mais seulement quand tout fonctionne ! Nous avons eu des travaux planifi\u00e9s avec le transfert d'un segment r\u00e9seau assez large, et nous avons de nouveau v\u00e9rifi\u00e9 manuellement ce qui s'est lev\u00e9 et ce qui ne l'est pas.<\/p>\n<p><b>MM:<\/b> \u2013 \u00c7a ne peut pas \u00eatre ! Nous avons tout v\u00e9rifi\u00e9 dix fois. Le serveur g\u00e8re m\u00eame l'indisponibilit\u00e9 totale du r\u00e9seau instantan\u00e9ment.<\/p>\n<p><b>MT:<\/b> \u2013 Je comprends tout : serveur, base, top, austat, logs \u2013 tout est rapide\u2026 Mais nous regardons l'interface web, et l\u00e0 \u2013 le processeur sur le serveur est en \u00ab stand-by \u00bb et voici cela :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/828a44d71f67ac585055bffcc01ab46e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 D'accord. Regardons le web. Nous avons d\u00e9couvert que, dans des situations o\u00f9 il y avait un grand nombre d'incidents actifs, la plupart des widgets op\u00e9rationnels commen\u00e7aient \u00e0 fonctionner tr\u00e8s lentement :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/22fdb735aa6136cd9967b40341d2a5cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLa raison en \u00e9tait la g\u00e9n\u00e9ration de pop-ups avec l'historique des incidents, qui sont g\u00e9n\u00e9r\u00e9s pour chaque \u00e9l\u00e9ment de la liste. Nous avons donc abandonn\u00e9 la g\u00e9n\u00e9ration de ces fen\u00eatres (nous avons comment\u00e9 5 lignes dans le code), et cela a r\u00e9solu nos probl\u00e8mes.<\/p>\n<p>Le temps de chargement des widgets, m\u00eame en cas d'indisponibilit\u00e9 totale, a \u00e9t\u00e9 r\u00e9duit de plusieurs minutes \u00e0 10-15 secondes qui nous conviennent, et l'historique peut toujours \u00eatre consult\u00e9 en cliquant sur le temps :<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/d15341ce76578880a23651a7a68dd802.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Apr\u00e8s le travail. Il y a 2 mois.<\/i><\/p>\n<p><b>MT:<\/b> \u2013 Misha, tu pars ? J'ai quelque chose \u00e0 te dire.<\/p>\n<p><b>MM:<\/b> \u2013 Je ne pr\u00e9voyais pas. Encore quelque chose avec \u00ab Zabbix \u00bb ?<\/p>\n<p><b>MT:<\/b> \u2013 Non, d\u00e9tends-toi ! Je voulais juste dire : tout fonctionne, merci ! Je t'invite \u00e0 une bi\u00e8re.<\/p>\n<h3>Zabbix est efficace<\/h3>\n<p>\n\u00ab Zabbix \u00bb est un syst\u00e8me assez universel et riche en fonctionnalit\u00e9s. Il peut tout \u00e0 fait \u00eatre utilis\u00e9 pour de petites installations \u00ab pr\u00eates \u00e0 l'emploi \u00bb, mais avec l'augmentation des besoins, il faut l'optimiser. Pour stocker un grand volume d'archives de m\u00e9triques, utilisez un stockage adapt\u00e9 :<\/p>\n<ul>\n<li>vous pouvez utiliser les outils int\u00e9gr\u00e9s sous forme d'int\u00e9gration avec \u00ab Elasticsearch \u00bb ou d'exportation de l'historique vers des fichiers texte (disponible \u00e0 partir de la quatri\u00e8me version) ;<\/li>\n<li>vous pouvez tirer parti de notre exp\u00e9rience et de l'int\u00e9gration avec \u00ab ClickHouse \u00bb.<\/li>\n<\/ul>\n<p>\nPour augmenter radicalement la vitesse de collecte des m\u00e9triques, collectez-les par des m\u00e9thodes asynchrones et transmettez-les via l'interface trapper au serveur \u00ab Zabbix \u00bb ; ou vous pouvez utiliser un patch pour l'asynchronisme des pollers de \u00ab Zabbix \u00bb lui-m\u00eame.<\/p>\n<p>Zabbix est \u00e9crit en C et est assez efficace. Toutefois, la r\u00e9solution de quelques points d'architecture \u00e9troits permet d'augmenter encore sa performance et, d'apr\u00e8s notre exp\u00e9rience, d'obtenir plus de 100 000 m\u00e9triques sur une machine \u00e0 un processeur.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/46559b481b5e53dc3cc3d2562a94531d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Le patch Zabbix<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Je veux ajouter quelques points. Tous les rapports actuels, tous les tests, les chiffres sont bas\u00e9s sur la configuration que nous utilisons. Actuellement, nous recueillons environ 20 000 m\u00e9triques par seconde. Si vous essayez de comprendre si cela fonctionnera pour vous, vous pouvez comparer. Ce qui a \u00e9t\u00e9 pr\u00e9sent\u00e9 aujourd'hui est disponible sur GitHub sous forme de 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++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/e5880b2f01cb03809057db08306b23c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nLe patch inclut :<\/p>\n<ul>\n<li>une int\u00e9gration compl\u00e8te avec ClickHouse (pour le serveur Zabbix et le frontend) ;<\/li>\n<li>la r\u00e9solution de probl\u00e8mes avec le gestionnaire de pr\u00e9processeur ;<\/li>\n<li>le polling asynchrone.<\/li>\n<\/ul>\n<p>\nLe patch est compatible avec toute la version 4, y compris la version lts. Il fonctionnera probablement sur la version 3.4 avec des modifications minimales.<\/p>\n<p>Merci pour votre attention.<\/p>\n<h3>Questions<\/h3>\n<p>\nQuestion du public (A) : \u2013 Bonjour ! Pouvez-vous dire si vous avez des plans d'interaction intensive avec l'\u00e9quipe de Zabbix ou eux avec vous, afin que ce ne soit pas un patch, mais un comportement normal de Zabbix ?<\/p>\n<p><b>MM:<\/b> \u2013 Oui, certaines modifications seront n\u00e9cessairement int\u00e9gr\u00e9es. Certaines choses resteront dans le patch.<\/p>\n<p><b>A:<\/b> \u2013 Merci beaucoup pour cette excellente pr\u00e9sentation ! Pouvez-vous nous dire, apr\u00e8s l'application du patch, le support de Zabbix restera-t-il en place et comment se mettre \u00e0 jour vers des versions plus r\u00e9centes ? Y aura-t-il une possibilit\u00e9 de mettre \u00e0 jour Zabbix apr\u00e8s votre patch vers 4.2, 5.0 ?<\/p>\n<p><b>MM:<\/b> \u2013 En ce qui concerne le support, je ne peux pas dire. Si j\u2019\u00e9tais le support technique de Zabbix, je dirais probablement non, car c\u2019est du code tiers. Concernant la base de code 4.2, notre position est la suivante : \u00ab Nous allons avancer avec le temps et nous mettrons \u00e0 jour vers la prochaine version \u00bb. Donc, pendant un certain temps, nous publierons des patches pour les versions mises \u00e0 jour. J'ai d\u00e9j\u00e0 mentionn\u00e9 dans la pr\u00e9sentation : le nombre de changements avec les versions est encore relativement faible. Je pense que la transition de 3.4 \u00e0 4 a pris, il me semble, environ 15 minutes. Il s'est pass\u00e9 quelque chose, mais ce n'est pas tr\u00e8s important.<\/p>\n<p><b>A:<\/b> \u2013 Donc vous pr\u00e9voyez de maintenir votre patch et il est possible de l'installer en production, en recevant par la suite des mises \u00e0 jour d'une mani\u00e8re ou d'une autre ?<\/p>\n<p><b>MM:<\/b> \u2013 Nous le recommandons cat\u00e9goriquement. Cela r\u00e9sout beaucoup de nos probl\u00e8mes.<\/p>\n<p><b>MT:<\/b> \u2013 Je voudrais encore une fois insister sur le fait que les modifications qui ne concernent pas l'architecture et ne concernent pas les blocages, les files d'attente \u2013 elles sont modulaires, elles sont dans des modules distincts. M\u00eame de mani\u00e8re autonome, avec des modifications mineures, elles peuvent \u00eatre maintenues assez facilement.<\/p>\n<p><b>MM:<\/b> \u2013 Si vous \u00eates int\u00e9ress\u00e9 par les d\u00e9tails, alors \u00ab ClickHouse \u00bb utilise ce qu'on appelle une biblioth\u00e8que d'historique. Elle est d\u00e9li\u00e9e \u2013 c'est une copie de la prise en charge d'\u00ab Elasticsearch \u00bb, c'est-\u00e0-dire qu'elle est modifiable en configuration. Le polling ne change que les pollers. Nous croyons que cela va fonctionner longtemps.<\/p>\n<p><b>A:<\/b> \u2013 Merci beaucoup. Pouvez-vous me dire s'il existe une documentation des modifications apport\u00e9es ?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikha\u00efl Makourov, Maxime Tchernesov (Intersvyaz) : Zabbix, 100kNVPS sur un serveur\" src=\"\/wp-content\/uploads\/2020\/02\/f3842ba578f736721c96794941b8f071.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 La documentation est le patch. \u00c9videmment, avec l'introduction de \u00ab ClickHouse \u00bb, et l'introduction de nouveaux types de pollers, de nouvelles options de configuration apparaissent. Le lien dans la derni\u00e8re diapositive contient une br\u00e8ve description de son utilisation.<\/p>\n<h3>Concernant le remplacement de fping par nmap<\/h3>\n<p>\n<b>A:<\/b> \u2013 Comment avez-vous finalement r\u00e9alis\u00e9 cela ? Pouvez-vous donner des exemples concrets : avez-vous des strappers et un script externe ? Qu'est-ce qui v\u00e9rifie si rapidement autant d'h\u00f4tes ? Comment obtenez-vous ces h\u00f4tes ? Faut-il les fournir \u00e0 nmap d'une mani\u00e8re ou d'une autre, les r\u00e9cup\u00e9rer d'une source, les placer, ex\u00e9cuter quelque chose ?<\/p>\n<p><b>MM:<\/b> \u2013 G\u00e9nial. Tr\u00e8s bonne question ! L'id\u00e9e est la suivante. Nous avons modifi\u00e9 la biblioth\u00e8que (ICMP-ping, une composante de \u00ab Zabbix \u00bb) pour les v\u00e9rifications ICMP, o\u00f9 il est sp\u00e9cifi\u00e9 que le nombre de paquets est une unit\u00e9 (1), et le code essaie d'utiliser nmap. Donc, c'est le fonctionnement interne de \u00ab Zabbix \u00bb, cela est devenu le travail interne du pingeur. Par cons\u00e9quent, aucune synchronisation ou utilisation de trap ne sont n\u00e9cessaires. Cela a \u00e9t\u00e9 fait d\u00e9lib\u00e9r\u00e9ment pour garder le syst\u00e8me int\u00e9gral et ne pas se soucier de la synchronisation de deux syst\u00e8mes de bases : quoi v\u00e9rifier, le verser par le poller, et v\u00e9rifier si le versement a \u00e9chou\u00e9 ?.. C'est beaucoup plus simple.<\/p>\n<p><b>A:<\/b> \u2013 Cela fonctionne-t-il aussi pour les proxies ?<\/p>\n<p><b>MM:<\/b> \u2013 Oui, mais nous n'avons pas v\u00e9rifi\u00e9. Le code de polling est identique dans \u00ab Zabbix \u00bb et sur le serveur. Cela devrait fonctionner. Je r\u00e9it\u00e8re : la performance du syst\u00e8me est telle que nous n'avons pas besoin de proxy.<\/p>\n<p><b>MT:<\/b> \u2013 La bonne r\u00e9ponse \u00e0 la question est : \u00ab Pourquoi avez-vous besoin de proxy dans un tel syst\u00e8me ? \u00bb Seulement \u00e0 cause du NAT ou pour surveiller via un canal lent...<\/p>\n<p><b>A:<\/b> \u2013 Utilisez-vous \u00ab Zabbix \u00bb comme alerteur, si j'ai bien compris. Ou vos graphiques (o\u00f9 la couche d'archives) sont-ils all\u00e9s dans un autre syst\u00e8me, comme Grafana ? Ou n'utilisez-vous pas cette fonctionnalit\u00e9 ?<\/p>\n<p><b>MM:<\/b> \u2013 Je le souligne encore une fois : nous avons r\u00e9alis\u00e9 une int\u00e9gration compl\u00e8te. Nous transf\u00e9rons l'historique dans \u00ab ClickHouse \u00bb, mais nous avons \u00e9galement modifi\u00e9 le frontend PHP. Le frontend PHP interroge \u00ab ClickHouse \u00bb et g\u00e9n\u00e8re tous les graphiques \u00e0 partir de l\u00e0. En toute honn\u00eatet\u00e9, nous avons une partie qui g\u00e9n\u00e8re des donn\u00e9es dans d'autres syst\u00e8mes de repr\u00e9sentation graphique \u00e0 partir des m\u00eames donn\u00e9es de \u00ab Zabbix \u00bb venant de \u00ab ClickHouse \u00bb.<\/p>\n<p><b>MT:<\/b> \u2013 Y compris dans \u00ab Grafana \u00bb.<\/p>\n<h3>Comment la d\u00e9cision a-t-elle \u00e9t\u00e9 prise concernant l'allocation des ressources ?<\/h3>\n<p>\n<b>A:<\/b> \u2013 Partagez un peu la cuisine interne. Comment la d\u00e9cision a-t-elle \u00e9t\u00e9 prise de consacrer des ressources \u00e0 une refonte s\u00e9rieuse du produit ? Cela repr\u00e9sente en fait des risques sp\u00e9cifiques. Et dites, s'il vous pla\u00eet, dans le contexte de ce que vous comptez faire pour maintenir les nouvelles versions : comment cette d\u00e9cision est-elle justifi\u00e9e du point de vue de la gestion ?<\/p>\n<p><b>MM:<\/b> \u2013 Il semble que nous n'ayons pas tr\u00e8s bien racont\u00e9 le drame de l'histoire. Nous nous sommes retrouv\u00e9s dans une situation o\u00f9 il fallait agir, et nous avons en fait suivi deux \u00e9quipes parall\u00e8les :<\/p>\n<ul>\n<li>L'une s'occupait du lancement du syst\u00e8me de surveillance avec de nouvelles m\u00e9thodes : la surveillance comme service, ensemble standard de solutions open source, que nous combinons et essayons ensuite d'adapter le processus m\u00e9tier pour travailler avec le nouveau syst\u00e8me de surveillance.<\/li>\n<li>En parall\u00e8le, nous avions un programmeur enthousiaste qui s'occupait de cela (de lui-m\u00eame). Il se trouve qu'il a gagn\u00e9.<\/li>\n<\/ul>\n<p>\n<b>A:<\/b> \u2013 Quelle est la taille de l'\u00e9quipe ?<\/p>\n<p><b>MT:<\/b> \u2013 Elle est devant vous.<\/p>\n<p><b>A:<\/b> \u2013 Donc, comme toujours, il faut un passionn\u00e9 ?<\/p>\n<p><b>MM:<\/b> \u2013 Je ne sais pas ce qu'est un passionn\u00e9.<\/p>\n<p><b>A:<\/b> \u2013 Dans ce cas, apparemment, vous. Merci beaucoup, vous \u00eates formidables.<\/p>\n<p><b>MM:<\/b> \u2013 Merci.<\/p>\n<h3>Sur les patchs pour Zabbix<\/h3>\n<p>\n<b>A:<\/b> \u2013 Pour un syst\u00e8me qui utilise des proxies (par exemple, dans certains syst\u00e8mes distribu\u00e9s), est-il possible d'adapter votre solution et de patcher, disons, les pollers, les proxies et partiellement le pr\u00e9processeur de Zabbix lui-m\u00eame ; et leur interaction ? Est-il possible d'optimiser les d\u00e9veloppements existants pour un syst\u00e8me avec plusieurs proxies ?<\/p>\n<p><b>MM:<\/b> \u2013 Je sais que le serveur \u00ab Zabbix \u00bb est construit avec l'aide de proxies (il est compil\u00e9 et le code est obtenu). Nous ne l'avons pas v\u00e9rifi\u00e9 en production. Je ne suis pas s\u00fbr de cela, mais je pense que le gestionnaire de pr\u00e9traitement n'est pas utilis\u00e9 dans le proxy. La t\u00e2che du proxy est de prendre un ensemble de m\u00e9triques provenant de \u00ab Zabbix \u00bb, de les r\u00e9cup\u00e9rer (il enregistre aussi la configuration, la base locale) et de les renvoyer au serveur \u00ab Zabbix \u00bb. Le pr\u00e9traitement sera effectu\u00e9 par le serveur lui-m\u00eame, une fois qu'il l'aura re\u00e7u.<\/p>\n<p>L'int\u00e9r\u00eat pour les proxies est compr\u00e9hensible. Nous allons examiner cela. C'est un sujet int\u00e9ressant.<\/p>\n<p><b>A:<\/b> \u2013 L'id\u00e9e \u00e9tait la suivante : si l'on peut patcher les pollers, on peut les patcher pour les proxies et adapter l'interaction avec le serveur, le pr\u00e9processeur n'\u00e9tant que sur le serveur.<\/p>\n<p><b>MM:<\/b> \u2013 Je pense que c'est m\u00eame plus simple. Vous prenez le code, vous appliquez le patch, puis vous le configurez comme vous le souhaitez \u2013 vous assemblez des serveurs proxy (par exemple, avec ODBC) et d\u00e9ployez le code patch\u00e9 dans les syst\u00e8mes. L\u00e0 o\u00f9 c'est n\u00e9cessaire, vous assemblez des proxies, l\u00e0 o\u00f9 c'est n\u00e9cessaire, des serveurs.<\/p>\n<p><b>A:<\/b> \u2013 Il ne sera probablement pas n\u00e9cessaire de patcher davantage le transfert des proxies vers le serveur ?<\/p>\n<p><b>MT:<\/b> \u2013 Non, c'est standard.<\/p>\n<p><b>MM:<\/b> \u2013 En fait, l'une des id\u00e9es n'a pas \u00e9t\u00e9 \u00e9prouv\u00e9e. Nous avons toujours veill\u00e9 \u00e0 maintenir un \u00e9quilibre entre l'explosion d'id\u00e9es et le nombre de changements, ainsi que la facilit\u00e9 de maintenance.<\/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=\"Lire la vid\u00e9o\" 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 peu de publicit\u00e9 \ud83d\ude42<\/h3>\n<p>\nMerci de rester avec nous. Aimez-vous nos articles ? Voulez-vous voir plus de contenu int\u00e9ressant ? Soutenez-nous en passants une commande ou en nous recommandant \u00e0 des amis, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">VPS cloud pour d\u00e9veloppeurs \u00e0 partir de 4,99 $<\/a><\/noindex>, <b>un \u00e9quivalent unique des serveurs d'entr\u00e9e de gamme, con\u00e7u pour vous :<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Toute la v\u00e9rit\u00e9 sur le VPS (KVM) E5-2697 v3 (6 c\u0153urs) 10 Go DDR4 480 Go SSD 1 Gbps \u00e0 partir de 19 $ ou comment bien diviser un serveur ?<\/a><\/noindex> (options disponibles avec RAID1 et RAID10, jusqu'\u00e0 24 c\u0153urs et jusqu'\u00e0 40 Go DDR4).<\/p>\n<p><b>Dell R730xd deux fois moins cher dans le data center Equinix Tier IV \u00e0 Amsterdam ?<\/b> Uniquement chez nous <b><noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/serversnl\">2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64Go DDR4 4x960Go SSD 1Gbps 100 To \u00e0 partir de 199 $<\/a><\/noindex> aux Pays-Bas ! <b>Dell R420 \u2014 2x E5-2430 2.2GHz 6C 128Go DDR3 2x960Go SSD 1Gbps 100To \u2014 \u00e0 partir de 99 $ !<\/b><\/b> Lisez sur <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Comment construire une infrastructure de classe entreprise avec des serveurs Dell R730xd E5-2650 v4 co\u00fbtant 9000 euros pour des clopinettes ?<\/a><\/noindex><br \/>\n<br \/>Source : <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.2 - 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\/fr\/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.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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++, Mikha\u00efl Makourov, Maksim Tcherniatsov (Intersvyaz) : Zabbix, 100kNVPS sur un seul serveur | ProHoster","description":"La prochaine conf\u00e9rence HighLoad++ aura lieu les 6 et 7 avril 2020 \u00e0 Saint-P\u00e9tersbourg. D\u00e9tails et billets via le lien.","canonical_url":"https:\/\/prohoster.info\/fr\/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":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/56049","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=56049"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/56049\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=56049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=56049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=56049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}