{"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\/de\/blog\/administrirovanie\/highload-mihail-makurov-maksim-chernetsov-intersvyaz-zabbix-100knvps-na-odnom-servere","title":{"rendered":"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Die n\u00e4chste HighLoad++-Konferenz findet am 6. und 7. April 2020 in Sankt Petersburg statt. Weitere Informationen und Tickets. <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2sSxgBx\">\u00fcber den Link<\/a><\/noindex>HighLoad++ Moskau 2018. Saal \u201eMoskau\u201c. 9. November, 15:00. Abstracts und <noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/moscow\/2018\/abstracts\/4141\">Pr\u00e4sentation n\u00fctzlich sein.<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/5c3e11c8449de7375d30b2cd75b5927e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n* Monitoring \u2013 online und Analyse.<br \/>\n* Hauptbeschr\u00e4nkungen der ZABBIX-Plattform.<br \/>\n* L\u00f6sung zur Skalierung des Analyse-Speichers.<br \/>\n* ZABBIX-Server-Optimierung.<br \/>\n* UI-Optimierung.<br \/>\n* Erfahrungen mit dem Betrieb des Systems bei Lasten von \u00fcber 40k NVPS.<br \/>\n* Kurze Fazits.<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<p><b>Mikhail Makurov (im Folgenden \u2013 MM):<\/b> \u2013 Hallo zusammen!<\/p>\n<p><b>Maxim Tschernizow (im Folgenden \u2013 MT):<\/b> \u2013 Guten Tag!<\/p>\n<p><b>MM:<\/b> \u2013 Erlauben Sie mir, Maxim vorzustellen. Max ist ein talentierter Ingenieur, der beste Netzwerktechniker, den ich kenne. Maxim besch\u00e4ftigt sich mit Netzwerken und Diensten, deren Entwicklung und Betrieb.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/a7fc62a03c0aede46f4a4695845daa22.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MT:<\/b> \u2013 Und ich m\u00f6chte \u00fcber Mikhail sprechen. Mikhail ist C-Entwickler. Er hat mehrere hochbelastete L\u00f6sungen zur Datenverkehrsverarbeitung f\u00fcr unser Unternehmen erstellt. Wir leben und arbeiten im Ural, in der Stadt der harten M\u00e4nner Tscheljabinsk, in der Firma \u201eIntersvyaz\u201c. Unser Unternehmen ist Anbieter von Internet- und Kabel-TV-Diensten f\u00fcr eine Million Menschen in 16 St\u00e4dten.<\/p>\n<p><b>MM:<\/b> Es ist wichtig zu erw\u00e4hnen, dass \u201eIntersvyaz\u201c weit mehr ist als nur ein Anbieter, es ist ein IT-Unternehmen. Die meisten unserer L\u00f6sungen werden von unserem IT-Team entwickelt.<\/p>\n<p><b>A:<\/b> Von den Servern, die den Datenverkehr verarbeiten, bis hin zum Callcenter und der mobilen App. In unserem IT-Team sind derzeit etwa 80 Personen mit \u00e4u\u00dferst vielf\u00e4ltigen Kompetenzen t\u00e4tig.<\/p>\n<h3>\u00dcber Zabbix und seine Architektur<\/h3>\n<p>\n<b>MT:<\/b> Jetzt werde ich versuchen, einen pers\u00f6nlichen Rekord aufzustellen und in einer Minute zu erkl\u00e4ren, was Zabbix (im Folgenden \u201eZabbix\u201c) ist.<\/p>\n<p>Zabbix positioniert sich als ein \u201eOut-of-the-Box\u201c Unternehmens\u00fcberwachungssystem. Es bietet viele Funktionen, die das Leben erleichtern: ausgekl\u00fcgelte Eskalationsregeln, APIs f\u00fcr die Integration, Gruppierung und automatische Erkennung von Hosts und Metriken. Zabbix verf\u00fcgt \u00fcber sogenannte Skalierungsm\u00f6glichkeiten \u2013 Proxys. Zabbix ist ein Open-Source-System.<\/p>\n<p>Kurz zur Architektur. Man kann sagen, sie besteht aus drei Komponenten:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/0d2ae3ee04d00885d65e17b8cf44182b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<ul>\n<li>Server. In C geschrieben. Mit einer recht komplexen Verarbeitung und \u00dcbertragung von Informationen zwischen den Threads. Alle Verarbeitungen erfolgen hier: vom Empfang bis zur Speicherung in der Datenbank.<\/li>\n<li>Alle Daten werden in einer Datenbank gespeichert. Zabbix unterst\u00fctzt MySQL, PostgreSQL und Oracle.<\/li>\n<li>Das Web-Interface ist in PHP geschrieben. Es wird in den meisten Systemen zusammen mit dem Apache-Server geliefert, funktioniert jedoch effizienter in Kombination mit Nginx + PHP.<\/li>\n<\/ul>\n<p>\nHeute m\u00f6chten wir eine Geschichte aus dem Leben unseres Unternehmens erz\u00e4hlen, die mit \"Zabbix\" zu tun hat...<\/p>\n<h3>Eine Geschichte aus dem Leben der Firma \"Intersvyaz\". Was haben wir und was brauchen wir?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/407c35b81995ddca6444fa418941063f.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<i>Vor 5 oder 6 Monaten. Eines Tages nach der Arbeit...<\/i><\/p>\n<p><b>MT:<\/b> \u2013 Misha, hallo! Sch\u00f6n, dass ich dich erwischt habe \u2013 ich muss mit dir reden. Wir hatten wieder Probleme mit dem Monitoring. W\u00e4hrend eines gro\u00dfen Ausfalls lief alles langsam, und es gab keine Informationen \u00fcber den Zustand des Netzwerks. Leider kommt das nicht zum ersten Mal vor. Ich brauche deine Hilfe. Lass uns daf\u00fcr sorgen, dass unser Monitoring unter allen Umst\u00e4nden funktioniert!<\/p>\n<p><b>MM:<\/b> \u2013 Aber lass uns zuerst synchronisieren. Ich habe da seit ein paar Jahren nicht mehr hinein geschaut. Soweit ich mich erinnere, haben wir vor etwa 8 Jahren Nagios aufgegeben und sind zu \"Zabbix\" gewechselt. Und jetzt haben wir, glaube ich, 6 leistungsstarke Server und etwa ein Dutzend Proxys. Verwechsel ich da nichts?<\/p>\n<p><b>MT:<\/b> \u2013 Fast. 15 Server, von denen einige virtuelle Maschinen sind. Das Wichtigste ist, dass uns das nicht hilft, wenn wir es am dringendsten brauchen. Bei einem Ausfall \u2013 die Server sind langsam und nichts ist sichtbar. Wir haben versucht, die Konfiguration zu optimieren, aber das hat nicht den gew\u00fcnschten Leistungsschub gebracht.<\/p>\n<p><b>MM:<\/b> \u2013 Verstanden. Hast du schon etwas untersucht oder aus den Diagnosen gefunden?<\/p>\n<p><b>MT:<\/b> \u2013 Das Erste, mit dem wir uns auseinandersetzen m\u00fcssen, ist die Datenbank. MySQL ist st\u00e4ndig belastet, da es neue Metriken speichert, und wenn Zabbix anf\u00e4ngt, eine Menge Ereignisse zu generieren, zieht sich die Datenbank buchst\u00e4blich f\u00fcr mehrere Stunden zur\u00fcck. Ich habe dir schon von der Konfigurationsoptimierung erz\u00e4hlt, und dieses Jahr haben wir die Hardware aktualisiert: Auf den Servern sind \u00fcber hundert Gigabyte RAM installiert und die Speichermedien laufen auf SSD-RAID-Systemen \u2013 es macht keinen Sinn, die Kapazit\u00e4t linear weiter zu erh\u00f6hen. Was sollen wir tun?<\/p>\n<p><b>MM:<\/b> \u2013 Verstanden. Generell ist MySQL eine LTP-Datenbank. Offensichtlich eignet sie sich nicht mehr zur Speicherung von Archivmetriken in unserer Gr\u00f6\u00dfenordnung. Lass uns das angehen.<\/p>\n<p><b>MT:<\/b> \u2013 Lass es uns machen!<\/p>\n<h3>Integration von Zabbix und Clickhouse als Ergebnis des Hackathons<\/h3>\n<p>\nNach einiger Zeit erhielten wir interessante Daten:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/46899e843b1e89524c6d762c1c167a6c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Gro\u00dfteil des Speicherplatzes in unserer Datenbank war mit einem Archivar von Metriken belegt, w\u00e4hrend weniger als 1 % f\u00fcr Konfigurationen, Vorlagen und Einstellungen verwendet wurde. Zu diesem Zeitpunkt hatten wir bereits \u00fcber ein Jahr lang eine Big Data-L\u00f6sung auf der Basis von Clickhouse betrieben. Der Weg, den wir einschlagen wollten, war offensichtlich. Bei unserem Fr\u00fchjahrs-Hackathon habe ich eine Integration von Zabbix mit Clickhouse f\u00fcr den Server und das Frontend geschrieben. Zu diesem Zeitpunkt hatte Zabbix bereits Unterst\u00fctzung f\u00fcr ElasticSearch, und wir haben uns entschieden, die beiden zu vergleichen.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/92fa3da527de48102cbdcf6959d46814.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Vergleich von Clickhouse und Elasticsearch<\/h3>\n<p>\n<b>MM:<\/b> \u2013 F\u00fcr den Vergleich haben wir eine Last erzeugt, die der eines Zabbix-Servers entspricht, und beobachtet, wie sich die Systeme verhalten. Wir haben Daten in Paketen von 1000 Zeilen geschrieben und CURL verwendet. Wir vermuteten bereits im Vorfeld, dass Clickhouse f\u00fcr das Lastprofil, das Zabbix generiert, effizienter sein w\u00fcrde. Die Ergebnisse \u00fcbertrafen sogar unsere Erwartungen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/354be7147b23a0bcb9ada3af93f59fac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnter den gleichen Bedingungen schrieb Clickhouse in den Tests drei Mal so viele Daten. Dabei konsumierten beide Systeme sehr effizient (geringe Ressourcen), um die Daten zu lesen. Aber ElasticSearch ben\u00f6tigte beim Schreiben eine hohe CPU-Auslastung:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/fea7f7f7801024cee0f9367c49d81d5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInsgesamt hat \u00abClickHouse\u00bb \u00abElasticsearch\u00bb deutlich in Bezug auf CPU-Verbrauch und Geschwindigkeit \u00fcbertroffen. Durch die Datenkompression ben\u00f6tigt \u00abClickHouse\u00bb zudem 11-mal weniger Speicherplatz auf der Festplatte und f\u00fchrt etwa 30-mal weniger Festplattenoperationen durch:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/50c24c4615ed350d7d78ec8655423409.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MT:<\/b> \u2013 Ja, die Arbeit mit dem Speichersystem bei \u00abClickHouse\u00bb ist sehr effizient umgesetzt. Sie k\u00f6nnen riesige SATA-Festplatten f\u00fcr Datenbanken verwenden und dabei Schreibgeschwindigkeiten vonHunderttausenden von Zeilen pro Sekunde erzielen. Das System unterst\u00fctzt nativ Sharding und Replikation und l\u00e4sst sich recht einfach konfigurieren. Wir sind sehr zufrieden mit dem Betrieb \u00fcber das letzte Jahr.<\/p>\n<p>Um Ressourcen zu optimieren, kann \u00abClickHouse\u00bb neben der bestehenden Hauptdatenbank installiert werden, wodurch viel CPU-Zeit und Festplattenoperationen eingespart werden. Wir haben die Metrikarchive auf die bereits bestehenden \u00abClickHouse\u00bb-Cluster verschoben:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/4cf44eae47a13f2fc50377fec884ecc8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nWir haben die Haupt-MySQL-Datenbank so entlastet, dass wir sie auf demselben Rechner wie den \u00abZabbix\u00bb-Server zusammenf\u00fchren und auf einen dedizierten Server f\u00fcr MySQL verzichten konnten.<\/p>\n<h3>Wie funktioniert das Polling in Zabbix?<\/h3>\n<p>\n<i>Vor 4 Monaten<\/i><\/p>\n<p><b>MM:<\/b> \u2013 Na, kann man die Probleme mit der Datenbank jetzt vergessen?<\/p>\n<p><b>MT:<\/b> \u2013 Genau! Eine weitere Herausforderung, die wir angehen m\u00fcssen, ist die langsame Datensammlung. Zurzeit sind alle unsere 15 Proxiserver mit SNMP-Prozessen und Polling \u00fcberlastet. Wir haben keine andere Wahl, als immer neue Server einzurichten.<\/p>\n<p><b>MM:<\/b> \u2013 Hervorragend. Aber erz\u00e4hl mir zuerst, wie das Polling in Zabbix funktioniert?<\/p>\n<p><b>MT:<\/b> \u2013 Kurz gesagt gibt es 20 Metriktypen und ein Dutzend M\u00f6glichkeiten, diese zu erhalten. Zabbix kann Daten entweder im \u201eRequest-Response\u201c-Modus sammeln oder neue Daten \u00fcber die \u201eTrapper-Schnittstelle\u201c abwarten.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/cb2d974ee113b4147a4a588c1f35c730.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs ist erw\u00e4hnenswert, dass dieser Ansatz (Trapper) im urspr\u00fcnglichen Zabbix der schnellste ist. <\/p>\n<p>Es gibt Proxiserver zur Lastverteilung:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/7b5c94a82b7e06aff6df6ea5549babdf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nProxys k\u00f6nnen die gleichen Sammlungsm\u00f6glichkeiten wie der Zabbix-Server ausf\u00fchren, indem sie Aufgaben von diesem erhalten und die gesammelten Metriken \u00fcber die Trapper-Schnittstelle zur\u00fccksenden. Dies wird als offizieller empfohlener Ansatz zur Lastverteilung betrachtet. Proxys sind auch n\u00fctzlich f\u00fcr die \u00dcberwachung von Remote-Infrastrukturen, die \u00fcber NAT oder langsame Verbindungen arbeiten:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/dbfb2777f9dd9b4adb81f1fa89f3bdd5.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Mit der Architektur ist alles klar. Wir m\u00fcssen die Quellcodes betrachten...<\/p>\n<p><i>Ein paar Tage sp\u00e4ter<\/i><\/p>\n<h3>Die Geschichte dar\u00fcber, wie nmap fping besiegte<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Es scheint, als h\u00e4tte ich etwas gefunden.<\/p>\n<p><b>MT:<\/b> \u2013 Erz\u00e4hl mir mehr!<\/p>\n<p><b>MM:<\/b> \u2013 Ich habe festgestellt, dass Zabbix bei Verf\u00fcgbarkeitspr\u00fcfungen maximal 128 Hosts gleichzeitig \u00fcberpr\u00fcft. Ich habe versucht, diese Zahl auf 500 zu erh\u00f6hen und den Paketintervall in ihrem Ping zu entfernen \u2013 das hat die Leistung verdoppelt. Aber ich h\u00e4tte gerne noch h\u00f6here Zahlen.<\/p>\n<p><b>MT:<\/b> \u2013 In meiner Praxis muss ich manchmal die Verf\u00fcgbarkeit von Tausenden von Hosts \u00fcberpr\u00fcfen, und nichts ist schneller als nmap. Ich bin mir sicher, dass dies der schnellste Weg ist. Lass es uns ausprobieren! Wir m\u00fcssen die Anzahl der Hosts pro Iteration erheblich erh\u00f6hen.<\/p>\n<p><b>MM:<\/b> \u2013 Mehr als f\u00fcnfhundert \u00fcberpr\u00fcfen? 600?<\/p>\n<p><b>MT:<\/b> \u2013 Mindestens ein paar Tausend.<\/p>\n<p><b>MM:<\/b> \u2013 Okay. Das Wichtigste, was ich sagen wollte: Ich habe herausgefunden, dass die meisten Abfragen in Zabbix synchron durchgef\u00fchrt werden. Wir m\u00fcssen das unbedingt auf asynchron umstellen. Dann k\u00f6nnen wir die Anzahl der Metriken, die von den Pollern gesammelt werden, drastisch erh\u00f6hen, insbesondere wenn wir die Anzahl der Metriken pro Iteration steigern.<\/p>\n<p><b>MT:<\/b> \u2013 Klasse! Und wann?<\/p>\n<p><b>MM:<\/b> \u2013 Wie \u00fcblich, gestern.<\/p>\n<p><b>MT:<\/b> \u2013 Wir haben beide Versionen von fping und nmap verglichen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/4be4cfe019b6b318ae2fbdbf82577111.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBei einer gro\u00dfen Anzahl von Hosts war nmap erwartungsgem\u00e4\u00df bis zu f\u00fcnfmal effektiver. Da nmap nur die Erreichbarkeit und die Antwortzeit pr\u00fcft, haben wir die Verlustberechnungen in Trigger verschoben und die Pr\u00fcfintervalle f\u00fcr die Erreichbarkeit erheblich verk\u00fcrzt. Die optimale Anzahl an Hosts f\u00fcr nmap haben wir bei etwa 4.000 pro Iteration gefunden. Nmap erm\u00f6glichte es uns, die CPU-Kosten f\u00fcr die Erreichbarkeitspr\u00fcfungen um das Dreifache zu senken und das Intervall von 120 Sekunden auf 10 zu reduzieren.<\/p>\n<h3>Optimierung des Pollings<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Danach besch\u00e4ftigten wir uns mit den Pollern. Besonders interessiert haben uns SNMP-Abfragen und Agenten. In \u201eZabbix\u201c wird das Polling synchron durchgef\u00fchrt, und es wurden spezielle Ma\u00dfnahmen ergriffen, um die Effizienz des Systems zu erh\u00f6hen. Im synchronen Modus f\u00fchrt die Nichterreichbarkeit von Hosts zu einer erheblichen Verschlechterung des Pollings. Es gibt ein ganzes System von Zust\u00e4nden und spezielle Prozesse \u2013 die sogenannten unreachable-Poller, die nur mit nicht erreichbaren Hosts arbeiten:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/6a001eff121f2392fffda69d719ebad6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDies ist ein Kommentar, der die Zustandsmatrix demonstriert, sowie die gesamte Komplexit\u00e4t der \u00dcbergangssysteme, die erforderlich sind, damit das System effizient bleibt. Dar\u00fcber hinaus ist das synchrone Polling selbst relativ langsam:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/3579a4a3de85c37f812ba2ca71cf4b3d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDas ist der Grund, warum Tausende von Poller-Threads \u00fcber zehn Proxys nicht die ben\u00f6tigte Datenmenge f\u00fcr uns sammeln konnten. Die asynchrone Implementierung l\u00f6ste nicht nur Probleme mit der Anzahl der Threads, sondern vereinfachte auch erheblich das System f\u00fcr den Zustand nicht erreichbarer Hosts, da die maximale Wartezeit bei beliebiger Anzahl in einer Polling-Iteration 1 Timeout betrug.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/c5f2d9bb3e558f8bba6bd8a96d8ed6a6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZus\u00e4tzlich haben wir das Polling-System f\u00fcr SNMP-Anfragen modifiziert und weiterentwickelt. Das Problem ist, dass die meisten nicht gleichzeitig auf mehrere SNMP-Anfragen reagieren k\u00f6nnen. Daher haben wir einen hybriden Modus geschaffen, bei dem das SNMP-Polling desselben Hosts asynchron durchgef\u00fchrt wird:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/eb61766e8afce9bf72d6e9757492559e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDies wird f\u00fcr eine gesamte Gruppe von Hosts durchgef\u00fchrt. In diesem Modus ist das Ergebnis letztlich nicht langsamer als bei einer vollst\u00e4ndig asynchronen L\u00f6sung, da die Abfrage von anderthalbhundert SNMP-Werten dennoch viel schneller ist als 1 Timeout.<\/p>\n<p>Unsere Experimente haben gezeigt, dass die optimale Anzahl von Anfragen in einer Iteration etwa 8.000 bei SNMP-Polling betr\u00e4gt. Insgesamt hat der \u00dcbergang zum asynchronen Modus die Polling-Leistung um das 200-Fache und in einigen F\u00e4llen um mehrere Hundertmal beschleunigt.<\/p>\n<p><b>MT:<\/b> Die durchgef\u00fchrten Optimierungen des Pollings haben gezeigt, dass wir nicht nur alle Proxys loswerden k\u00f6nnen, sondern auch die Intervalle bei vielen \u00dcberpr\u00fcfungen verk\u00fcrzen. Proxys werden nicht mehr ben\u00f6tigt, um die Last zu verteilen.<\/p>\n<p><i>Vor etwa drei Monaten<\/i><\/p>\n<h3>\u00c4ndere die Architektur \u2013 erh\u00f6he die Last!<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Na, Max, ist es Zeit f\u00fcr die Produktion? Ich brauche einen leistungsstarken Server und einen guten Ingenieur.<\/p>\n<p><b>MT:<\/b> \u2013 Gut, lass uns planen. Es wird Zeit, die stagnierenden 5.000 Metriken pro Sekunde zu \u00fcberwinden.<\/p>\n<p><i>Der Morgen nach dem Upgrade<\/i><\/p>\n<p><b>MT:<\/b> \u2013 Misha, wir haben uns aktualisiert, aber bis zum Morgen sind wir zur\u00fcckgefallen... Rate, welche Geschwindigkeit wir erreicht haben?<\/p>\n<p><b>MM:<\/b> \u2013 Maximal etwa 20.000.<\/p>\n<p><b>MT:<\/b> \u2013 Aha, 25! Leider sind wir wieder da, wo wir angefangen haben.<\/p>\n<p><b>MM:<\/b> \u2013 Warum ist das so? Haben wir eine Diagnose gemacht?<\/p>\n<p><b>MT:<\/b> \u2013 Ja, nat\u00fcrlich! Hier zum Beispiel ein interessantes top:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/09ac3336a820977b643ee5328ad2a851.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Lass uns schauen. Ich sehe, dass wir eine riesige Anzahl von Polling-Streams ausprobiert haben:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/346e8047f1f6f2bb1b1dd91a728e437b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAber wir konnten das System nicht einmal zur H\u00e4lfte nutzen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/be1843dbec0fb10d8da59e8c570adc5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnd die gesamte Leistung ist ziemlich gering, etwa 4.000 Metriken pro Sekunde:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/02eaf0b56629ebc6d3d5c132374a91b8.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGibt es noch etwas?<\/p>\n<p><b>MT:<\/b> \u2013 Ja, strace eines der Poller:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/73fc58bd2925859f6fbbcd118a0483c0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Hier sieht man deutlich, dass der Polling-Prozess auf \u00abSemaphoren\u00bb wartet. Das sind Sperren:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/d0bec44a9677ec111066dccc1dd8c5dc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MT:<\/b> \u2013 Unverst\u00e4ndlich.<\/p>\n<p><b>MM:<\/b> \u2013 Sieht so aus, als ob wir hier in einer Situation sind, in der viele Threads versuchen, auf Ressourcen zuzugreifen, die nur von einem zur gleichen Zeit genutzt werden k\u00f6nnen. Das Einzige, was sie tun k\u00f6nnen, ist, diese Ressource zeitlich aufzuteilen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/7dbb9e8941b01b666dd48f6301151ec9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnd die gesamte Leistungsf\u00e4higkeit bei der Nutzung solcher Ressourcen ist auf die Geschwindigkeit eines Kerns begrenzt:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/e00b197577f4ea7350fe56665dbae299.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEs gibt zwei Wege, um dieses Problem zu l\u00f6sen.<\/p>\n<p>Entweder das Hardware-Upgrade der Maschinen, indem man auf schnellere Kerne umsteigt:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/296d84b434ed7277fb558a8a4dd5ac47.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nOder die Architektur zu \u00e4ndern und gleichzeitig die Last:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/efea73106440db4e5eda5aa475dd088b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MT:<\/b> \u2013 \u00dcbrigens, auf der Testmaschine verwenden wir weniger Kerne als auf der Produktionsmaschine, daf\u00fcr sind diese jedoch etwa 1,5 mal schneller in der Taktfrequenz!<\/p>\n<p><b>MM:<\/b> \u2013 Ist das klar? Wir m\u00fcssen den Server-Code \u00fcberpr\u00fcfen.<\/p>\n<h3>Datenpfad im Zabbix-Server<\/h3>\n<p>\n<b>MT:<\/b> \u2013 Um das zu verstehen, haben wir angefangen zu analysieren, wie die Daten innerhalb des 'Zabbix'-Servers \u00fcbertragen werden:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/b3d84e3fcb12e7afe3c974bdeacc357a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTolle Grafik, oder? Lassen Sie uns Schritt f\u00fcr Schritt durchgehen, um alles etwas klarer zu machen. Es gibt Threads und Services, die f\u00fcr das Sammeln der Daten verantwortlich sind:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/966db6fa84723d4d3bde8a23736294d6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie gesammelten Metriken werden dann \u00fcber einen Socket an den Preprocessor-Manager \u00fcbermittelt, wo sie in eine Warteschlange aufgenommen werden:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/1e34fe2c4194f7bd71ec409d6169fb94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Preprozessor-Manager \u00fcbertr\u00e4gt Daten an seine Worker, die die Vorverarbeitungsanweisungen ausf\u00fchren und sie \u00fcber denselben Socket zur\u00fccksendet.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/d647caf3886f0c9378a32314e812edc1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAnschlie\u00dfend speichert der Preprozessor-Manager sie im Verlaufscache.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/ff0e29b0d974d76bd3a3b71d36a1cc68.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDort werden sie von den Verlaufssynkern abgerufen, die eine Vielzahl von Funktionen ausf\u00fchren: zum Beispiel das Berechnen von Triggern, das Auff\u00fcllen des Werte-Caches und, das Wichtigste, das Speichern von Metriken im Verlaufsspeicher. Insgesamt ist der Prozess komplex und sehr verworren.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/c418a17edeb9153a03dff233aa8f715e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> Das Erste, was uns auffiel, war, dass die meisten Threads um den sogenannten \"Konfigurationscache\" (Speicherbereich, in dem alle Serverkonfigurationen gespeichert werden) konkurrieren. Insbesondere treten viele Sperren bei den Threads auf, die f\u00fcr das Abrufen von Daten verantwortlich sind:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/589d8f564ece6e63457450e9c5081b80.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n\u2026da in der Konfiguration nicht nur die Metriken mit ihren Parametern gespeichert sind, sondern auch die Warteschlangen, aus denen die Poller Informationen dar\u00fcber erhalten, was sie als N\u00e4chstes tun sollen. Wenn es viele Poller gibt und einer die Konfiguration blockiert, warten die anderen auf Anfragen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/8026cdfcd7def84cb3708b7255b08c66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Poller sollten nicht miteinander in Konflikt stehen.<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/d436cd3415a6f58e1db5a609689c12b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDeshalb haben wir als erstes die Warteschlange in vier Teile unterteilt und den Pollern in einer sicheren Umgebung erlaubt, diese Teile gleichzeitig zu blockieren:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/9466e5f0053dff583e76713f10e30a89.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDas hat den Wettbewerb um den Konfigurations-Cache ausgeschaltet und die Geschwindigkeit der Poller erheblich gesteigert. Doch dann standen wir vor dem Problem, dass der Preprocessor-Manager begann, die Aufgabenwarteschlange anzusammeln:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/dd58e625823310fb0a818ed81abdceac.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Der Preprocessor-Manager muss in der Lage sein, Priorit\u00e4ten zu setzen.<\/h3>\n<p>\nDies geschah in F\u00e4llen, in denen ihm die Leistung fehlte. Alles, was er tun konnte, war, die Anfragen der Datensammlungsprozesse zu sammeln und sie im Puffer zu speichern, bis er den gesamten Speicher aufbrauchte und abst\u00fcrzte:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/b215d880863d470ea6ca960c6338b8ae.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUm dieses Problem zu l\u00f6sen, haben wir einen zweiten Sockel hinzugef\u00fcgt, der speziell f\u00fcr die Worker vorgesehen war:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/09d1bb92a009f9d29ba68d966de54210.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSomit konnte der Preprocessor-Manager seine Arbeit priorisieren und im Falle eines Pufferausbaus die Aufgabe verlangsamen, um den Workern die M\u00f6glichkeit zu geben, diesen Puffer abzuholen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/8f4db3661c428e6e6dcfe4cc0c44c016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDann haben wir festgestellt, dass eine der Ursachen f\u00fcr die Verlangsamung die Worker selbst waren, da sie um eine Ressource konkurrierten, die f\u00fcr ihre Arbeit v\u00f6llig unwichtig war. Dieses Problem haben wir als Bugfix dokumentiert, und in den neuen Versionen von \u201eZabbix\u201c wurde es bereits behoben:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/eedb359823dd23d369339e3735e341fb.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Durch die Erh\u00f6hung der Anzahl der Sockets \u2013 erzielen wir Ergebnisse<\/h3>\n<p>\nDer Preprocessor-Manager stellte sich als Engpass heraus, da er nur einen Thread hatte. Er war an der Geschwindigkeit des Kernels begrenzt und erreichte eine maximale Geschwindigkeit von etwa 70.000 Metriken pro Sekunde:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/f93ccbc656c0f9e103873d99a9397495.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDaher haben wir vier Preprocessor-Manager mit vier Satz-Konfigurationen erstellt:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/81a3dea3aa0f8807add8d045cf64a609.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nUnd das erlaubte es, die Geschwindigkeit auf etwa 130.000 Metriken zu erh\u00f6hen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/016ff07cd021a7221caef19e6ce36a9b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie nichtlineare Wachstumsrate erkl\u00e4rt sich daraus, dass es einen Wettbewerb um den Cache der Historie gab. Vier Preprocessor-Manager und Historie-Synchronisierer konkurrierten darum. Zu diesem Zeitpunkt erhielten wir auf der Testmaschine etwa 130.000 Metriken pro Sekunde und nutzten dabei etwa 95 % der CPU:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/62162254cd8bc66c1cef697158691588.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Vor etwa 2,5 Monaten<\/i><\/p>\n<h3>Der Verzicht auf die SNMP-Community erh\u00f6hte die NVPs um das Eineinhalbfache<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Max, ich brauche eine neue Testmaschine! In die aktuelle passen wir nicht mehr rein.<\/p>\n<p><b>MT:<\/b> \u2013 Was gibt es jetzt?<\/p>\n<p><b>MM:<\/b> \u2013 Momentan \u2013 130k NVPs und der Prozessor ist \u201ein der Warteschlange\u201c.<\/p>\n<p><b>MT:<\/b> \u2013 Wow! Cool! Wait, I have two questions. According to my calculations, we need around 15,000 to 20,000 metrics per second. Why do we need more?<\/p>\n<p><b>MM:<\/b> \u2013 I want to finish this properly. I want to see how much we can get out of this system.<\/p>\n<p><b>MT:<\/b> \u2013 But\u2026<\/p>\n<p><b>MM:<\/b> \u2013 But it\u2019s useless for business.<\/p>\n<p><b>MT:<\/b> \u2013 Understood. And my second question: can we maintain what we have now on our own, without a developer's help?<\/p>\n<p><b>MM:<\/b> \u2013 I don't think so. Changing how the configuration cache works is a problem. It involves changes in most streams and is quite complex to support. Most likely, it will be very difficult to maintain.<\/p>\n<p><b>MT:<\/b> \u2013 Then we need some alternative.<\/p>\n<p><b>MM:<\/b> \u2013 There is an option. We can switch to faster cores while dropping the new locking system. We will still achieve a performance of 60,000 to 80,000 metrics. Meanwhile, we can keep all the other code. \"ClickHouse\" and asynchronous polling will work. And it will be easy to maintain.<\/p>\n<p><b>MT:<\/b> \u2013 Wonderful! I suggest we stop here.<\/p>\n<p>Nach der Optimierung der Server-Infrastruktur konnten wir endlich den neuen Code produktiv einsetzen. Wir haben auf einige \u00c4nderungen verzichtet, um auf eine Maschine mit schnellen Kernen umzusteigen und die Anzahl der \u00c4nderungen im Code zu minimieren. Zudem haben wir die Konfiguration vereinfacht und wo immer m\u00f6glich auf Makros in den Datenelementen verzichtet, da diese zus\u00e4tzliche Blockierungen verursachen.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/2b1ed396b09bd815fba973ebb5f73d76.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZum Beispiel hat der Verzicht auf das in der Dokumentation und in Beispielen h\u00e4ufig verwendete Makro snmp-community in unserem Fall die NVPs um etwa 1,5 Mal beschleunigt.<\/p>\n<p><i>Nach zwei Tagen in der Produktivumgebung<\/i><\/p>\n<h3>Wir entfernen die Pop-ups der Vorfallhistorie<\/h3>\n<p>\n<b>MT:<\/b> \u2013 Misha, wir nutzen das System seit zwei Tagen und alles funktioniert. Aber nur, wenn alles reibungslos l\u00e4uft! Wir hatten geplante Arbeiten mit der \u00dcbertragung eines gro\u00dfen Netzwerksegments und haben erneut manuell \u00fcberpr\u00fcft, was funktioniert und was nicht.<\/p>\n<p><b>MM:<\/b> \u2013 Das kann nicht sein! Wir haben alles zehnmal \u00fcberpr\u00fcft. Der Server verarbeitet sogar die vollst\u00e4ndige Netzwerkunzug\u00e4nglichkeit sofort.<\/p>\n<p><b>MT:<\/b> \u2013 Ich verstehe das alles: der Server, die Datenbank, top, austat, die Protokolle \u2013 alles ist schnell\u2026 Aber wir sehen uns die Web-Oberfl\u00e4che an, und dort zeigt der Prozessor \u201ein der Warteschlange\u201c auf dem Server und das hier:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/828a44d71f67ac585055bffcc01ab46e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Verstanden. Lass uns die Webanwendung ansehen. Wir haben festgestellt, dass bei einer hohen Anzahl aktiver Vorf\u00e4lle die meisten operativen Widgets sehr langsam wurden:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/22fdb735aa6136cd9967b40341d2a5cf.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Grund daf\u00fcr war die Generierung von Pop-ups mit den Vorfallhistorien, die f\u00fcr jedes Element in der Liste erzeugt wurden. Daher haben wir diese Fensteraufrufe gestrichen (5 Zeilen im Code auskommentiert), und das hat unsere Probleme gel\u00f6st.<\/p>\n<p>Die Ladezeit der Widgets, selbst bei vollst\u00e4ndiger Nichterreichbarkeit, hat sich von mehreren Minuten auf die f\u00fcr uns akzeptablen 10-15 Sekunden reduziert, und die Historie kann weiterhin durch einen Klick auf die Zeit angesehen werden:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/d15341ce76578880a23651a7a68dd802.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<i>Nach der Arbeit. Vor 2 Monaten<\/i><\/p>\n<p><b>MT:<\/b> \u2013 Mischa, gehst du weg? Ich wollte mit dir sprechen.<\/p>\n<p><b>MM:<\/b> \u2013 Ich hatte nicht vor. Gibt es wieder ein Problem mit Zabbix?<\/p>\n<p><b>MT:<\/b> \u2013 Nee, ganz ruhig! Ich wollte einfach sagen: Es funktioniert alles, danke! Das Bier geht auf mich.<\/p>\n<h3>Zabbix ist effektiv<\/h3>\n<p>\nZabbix ist ein recht vielseitiges und funktionsreiches System. Es kann durchaus f\u00fcr kleinere Installationen \"out of the box\" verwendet werden, aber mit steigenden Anforderungen muss es optimiert werden. F\u00fcr die Speicherung gro\u00dfer Archive von Metriken verwenden Sie geeignete Speicherl\u00f6sungen:<\/p>\n<ul>\n<li>Sie k\u00f6nnen die integrierten Funktionen nutzen, indem Sie die Integration mit \u00abElasticsearch\u00bb oder den Export von Historien in Textdateien verwenden (verf\u00fcgbar ab der vierten Version);<\/li>\n<li>Sie k\u00f6nnen auch von unserer Erfahrung und der Integration mit \u00abClickHouse\u00bb profitieren.<\/li>\n<\/ul>\n<p>\nUm die Geschwindigkeit der Metriksammlung drastisch zu erh\u00f6hen, sammeln Sie diese asynchron und \u00fcbermitteln Sie sie \u00fcber die Trapper-Schnittstelle an den \u00abZabbix\u00bb-Server; alternativ k\u00f6nnen Sie einen Patch f\u00fcr die Asynchronit\u00e4t der Poller von \u00abZabbix\u00bb verwenden.<\/p>\n<p>\u00abZabbix\u00bb ist in C geschrieben und sehr effizient. Bestimmte architektonische Engp\u00e4sse erm\u00f6glichen es, die Leistung zus\u00e4tzlich zu steigern, und unserer Erfahrung nach erhalten wir \u00fcber 100.000 Metriken auf einer Einzelprozessmaschine.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/46559b481b5e53dc3cc3d2562a94531d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Jener Patch f\u00fcr Zabbix<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Ich m\u00f6chte ein paar Punkte hinzuf\u00fcgen. Der gesamte aktuelle Bericht, alle Tests und Zahlen beziehen sich auf die Konfiguration, die wir verwenden. Daraus erfassen wir derzeit etwa 20.000 Metriken pro Sekunde. Wenn Sie herausfinden m\u00f6chten, ob es bei Ihnen funktioniert \u2013 k\u00f6nnen Sie vergleichen. Das, was heute vorgestellt wurde, ist als Patch auf GitHub verf\u00fcgbar: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/miklert\/zabbix\">github.com\/miklert\/zabbix<\/a><\/noindex><\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/e5880b2f01cb03809057db08306b23c7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer Patch umfasst:<\/p>\n<ul>\n<li>volle Integration mit ClickHouse (sowohl f\u00fcr Zabbix-Server als auch f\u00fcr das Frontend);<\/li>\n<li>L\u00f6sungen f\u00fcr Probleme mit dem Preprocessor-Manager;<\/li>\n<li>asynchrones Polling.<\/li>\n<\/ul>\n<p>\nDer Patch ist mit der gesamten Version 4 kompatibel, einschlie\u00dflich LTS. H\u00f6chstwahrscheinlich wird er mit minimalen \u00c4nderungen auch auf Version 3.4 funktionieren.<\/p>\n<p>Vielen Dank f\u00fcr Ihre Aufmerksamkeit.<\/p>\n<h3>Fragen<\/h3>\n<p>\nFrage aus dem Publikum (im Folgenden \u2013 A): \u2013 Guten Tag! Haben Sie Pl\u00e4ne f\u00fcr eine intensivere Zusammenarbeit mit dem Zabbix-Team oder umgekehrt, damit es nicht nur ein Patch, sondern ein normales Verhalten von Zabbix wird?<\/p>\n<p><b>MM:<\/b> \u2013 Ja, einige \u00c4nderungen werden wir definitiv committen. Einige Dinge werden im Patch verbleiben.<\/p>\n<p><b>A:<\/b> \u2013 Vielen Dank f\u00fcr den gro\u00dfartigen Vortrag! K\u00f6nnten Sie bitte best\u00e4tigen, ob die Unterst\u00fctzung von Zabbix nach der Anwendung des Patches bestehen bleibt und wie man auf h\u00f6here Versionen aktualisieren kann? Wird es m\u00f6glich sein, Zabbix nach Ihrem Patch auf 4.2 oder 5.0 zu aktualisieren?<\/p>\n<p><b>MM:<\/b> \u2013 \u00dcber den Support kann ich nichts sagen. W\u00e4re ich der Support f\u00fcr \u00abZabbix\u00bb, w\u00fcrde ich vermutlich nein sagen, da es sich um fremden Code handelt. Was die Codebasis 4.2 betrifft, so lautet unsere Position: \u201eWir werden mit der Zeit gehen und uns selbst auf die n\u00e4chste Version aktualisieren\u201c. Daher werden wir eine Zeit lang einen Patch f\u00fcr die aktualisierten Versionen bereitstellen. Ich habe bereits in meinem Bericht gesagt: Die Anzahl der \u00c4nderungen zwischen den Versionen ist bisher relativ gering. Ich denke, der \u00dcbergang von 3.4 auf 4 hat uns etwa 15 Minuten gekostet. Es gab einige \u00c4nderungen, aber nichts wirklich Wichtiges.<\/p>\n<p><b>A:<\/b> \u2013 Das hei\u00dft, Sie planen, Ihren Patch zu unterst\u00fctzen, und man kann ihn bedenkenlos in der Produktion einsetzen, w\u00e4hrend man zuk\u00fcnftig auf irgendeine Weise Updates erh\u00e4lt?<\/p>\n<p><b>MM:<\/b> \u2013 Das empfehlen wir dringend. Es l\u00f6st viele Probleme f\u00fcr uns.<\/p>\n<p><b>MT:<\/b> \u2013 Ich m\u00f6chte nochmals betonen, dass \u00c4nderungen, die die Architektur nicht betreffen und sich nicht auf Blockierungen oder Warteschlangen beziehen, modular sind und in separaten Modulen erfolgen. Selbst bei geringf\u00fcgigen \u00c4nderungen k\u00f6nnen sie relativ einfach unterst\u00fctzt werden.<\/p>\n<p><b>MM:<\/b> \u2013 Wenn Sie an Details interessiert sind, nutzt ClickHouse eine sogenannte Historienbibliothek. Diese ist entkoppelt \u2013 es ist eine Kopie der Unterst\u00fctzung f\u00fcr Elasticsearch, was bedeutet, dass sie konfigurationsver\u00e4nderbar ist. Das Polling \u00e4ndert nur die Poller. Wir glauben, dass das langfristig funktionieren wird.<\/p>\n<p><b>A:<\/b> \u2013 Vielen Dank. K\u00f6nnen Sie mir sagen, ob es eine Dokumentation zu den vorgenommenen \u00c4nderungen gibt?<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Michail Makurov, Maxim Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/f3842ba578f736721c96794941b8f071.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>MM:<\/b> \u2013 Die Dokumentation ist ein Patch. Offensichtlich ergeben sich mit der Einf\u00fchrung von ClickHouse und den neuen Pollertypen neue Konfigurationsm\u00f6glichkeiten. \u00dcber den Link in der letzten Folie finden Sie eine kurze Beschreibung, wie Sie es verwenden k\u00f6nnen.<\/p>\n<h3>Zur Ersetzung von fping durch nmap<\/h3>\n<p>\n<b>A:<\/b> \u2013 Wie haben Sie das letztlich umgesetzt? K\u00f6nnen Sie konkrete Beispiele nennen: Haben Sie Strapper und ein externes Skript? Was \u00fcberpr\u00fcft letztendlich so schnell eine so gro\u00dfe Anzahl von Hosts? Wie beschaffen Sie diese Hosts? Muss man nmap diese irgendwie zuf\u00fchren, von irgendwoher holen, ablegen und dann etwas starten?<\/p>\n<p><b>MM:<\/b> \u2013 Das ist eine gute Frage! Hier ist der Kern: Wir haben die Bibliothek (ICMP-Ping, Teil von \u201eZabbix\u201c) f\u00fcr ICMP-Checks modifiziert, bei denen die Anzahl der Pakete auf eins (1) gesetzt ist, und der Code versucht, nmap zu verwenden. Das bedeutet, dass es sich um interne Vorg\u00e4nge von \u201eZabbix\u201c handelt, was nun die internen Funktionen des Pingers beeinflusst. Daher ist keine Synchronisierung oder Verwendung eines Trappers erforderlich. Dies wurde bewusst so gestaltet, um das System intakt zu lassen und nicht zwei Systembasen synchronisieren zu m\u00fcssen: was zu \u00fcberpr\u00fcfen ist, \u00fcber den Poller hochzuladen und ob der Upload bei uns nicht kaputt gegangen ist? Das ist viel einfacher.<\/p>\n<p><b>A:<\/b> \u2013 Funktioniert das auch f\u00fcr Proxys?<\/p>\n<p><b>MM:<\/b> \u2013 Ja, aber wir haben das nicht \u00fcberpr\u00fcft. Der Polling-Code ist sowohl in \u201eZabbix\u201c als auch auf dem Server identisch. Es sollte funktionieren. Ich betone nochmal: Die Systemleistung ist so, dass wir keinen Proxy ben\u00f6tigen.<\/p>\n<p><b>MT:<\/b> \u2013 Die richtige Antwort auf die Frage lautet: \u201eWarum ben\u00f6tigen Sie bei einem solchen System einen Proxy?\u201c Nur wegen NAT oder um \u00fcber einen langsamen Kanal zu \u00fcberwachen...<\/p>\n<p><b>A:<\/b> \u2013 Nutzen Sie \u201eZabbix\u201c als Alarmsystem, wenn ich das richtig verstanden habe? Oder sind die Grafiken (wo die Archivschicht ist) in ein anderes System wie Grafana gewandert? Oder verwenden Sie diese Funktionalit\u00e4t nicht?<\/p>\n<p><b>MM:<\/b> \u2013 Ich m\u00f6chte noch einmal betonen: Wir haben eine vollst\u00e4ndige Integration durchgef\u00fchrt. Wir leiten die Historie in \u201eClickHouse\u201c weiter, haben aber dabei das PHP-Frontend ge\u00e4ndert. Das PHP-Frontend greift auf \u201eClickHouse\u201c zu und erstellt alle Grafiken von dort. Ehrlich gesagt, haben wir auch einen Teil, der aus demselben \u201eClickHouse\u201c, aus denselben Daten von \u201eZabbix\u201c Informationen in anderen grafischen Darstellungssystemen aufbereitet.<\/p>\n<p><b>MT:<\/b> \u2013 Auch in \u201eGrafana\u201c.<\/p>\n<h3>Wie wurde die Entscheidung \u00fcber die Bereitstellung von Ressourcen getroffen?<\/h3>\n<p>\n<b>A:<\/b> \u2013 Teilen Sie uns bitte ein wenig \u00fcber die internen Vorg\u00e4nge mit. Wie kam es zu der Entscheidung, dass Ressourcen f\u00fcr eine ernsthafte \u00dcberarbeitung des Produkts bereitgestellt werden m\u00fcssen? Das birgt schlie\u00dflich bestimmte Risiken. Und bitte sagen Sie uns im Kontext dessen, dass Sie neue Versionen unterst\u00fctzen m\u00f6chten: Wie rechtfertigt sich diese Entscheidung aus der Sicht des Managements?<\/p>\n<p><b>MM:<\/b> \u2013 Offensichtlich haben wir die Dramatik der Geschichte nicht sehr gut erz\u00e4hlt. Wir befanden uns in einer Situation, in der etwas getan werden musste, und haben im Grunde genommen zwei parallele Teams gebildet:<\/p>\n<ul>\n<li>Eine Person war mit der Einf\u00fchrung eines Monitoringsystems besch\u00e4ftigt, das neue Methoden nutzt: Monitoring als Dienstleistung, ein standardisiertes Set an Open-Source-L\u00f6sungen, die wir kombinieren und anschlie\u00dfend versuchen, die Gesch\u00e4ftsprozesse zu \u00e4ndern, um mit dem neuen Monitoring-System zu arbeiten.<\/li>\n<li>Parallel dazu hatten wir einen enthusiastischen Programmierer, der sich damit besch\u00e4ftigte (\u00fcber sich selbst). So kam es, dass er gewonnen hat.<\/li>\n<\/ul>\n<p>\n<b>A:<\/b> \u2013 Und wie gro\u00df ist das Team?<\/p>\n<p><b>MT:<\/b> \u2013 Es steht vor Ihnen.<\/p>\n<p><b>A:<\/b> \u2013 Das hei\u00dft, wie immer braucht man einen Passionierten?<\/p>\n<p><b>MM:<\/b> \u2013 Ich wei\u00df nicht, was ein Passionierter ist.<\/p>\n<p><b>A:<\/b> \u2013 In diesem Fall scheinen Sie es zu sein. Vielen Dank, Sie sind gro\u00dfartig.<\/p>\n<p><b>MM:<\/b> \u2013 Danke.<\/p>\n<h3>\u00dcber Patches f\u00fcr Zabbix<\/h3>\n<p>\n<b>A:<\/b> \u2013 Ist es m\u00f6glich, Ihre L\u00f6sung f\u00fcr ein System anzupassen und zu patchen, das Proxys verwendet (z.B. in einigen verteilten Systemen), sagen wir, f\u00fcr die Poller, Proxys und teilweise f\u00fcr den Pr\u00e4prozessor von Zabbix; und deren Interaktion? Ist es m\u00f6glich, bestehende Entwicklungen f\u00fcr ein System mit mehreren Proxys zu optimieren?<\/p>\n<p><b>MM:<\/b> \u2013 Ich wei\u00df, dass der \u00abZabbix\u00bb-Server \u00fcber einen Proxy eingerichtet wird (der Code wird kompiliert und generiert). Wir haben das nicht in der Produktion getestet. Ich bin mir nicht sicher, aber meiner Meinung nach wird der Preprocessor-Manager nicht im Proxy verwendet. Die Aufgabe des Proxys besteht darin, eine Reihe von Metriken aus \u00abZabbix\u00bb zu erfassen, sie zu spollieren (er speichert auch die Konfiguration, die lokale Datenbank) und sie an den \u00abZabbix\u00bb-Server zur\u00fcckzugeben. Die Vorverarbeitung erfolgt sp\u00e4ter durch den Server, wenn er die Daten erh\u00e4lt.<\/p>\n<p>Das Interesse am Proxy ist verst\u00e4ndlich. Wir werden das \u00fcberpr\u00fcfen. Es ist ein interessantes Thema.<\/p>\n<p><b>A:<\/b> \u2013 Die Idee war folgenderma\u00dfen: Wenn man die Poller patchen kann, kann man sie auch im Proxy patchen und die Interaktion mit dem Server patchen, w\u00e4hrend der Preprocessor nur auf den Server angepasst wird.<\/p>\n<p><b>MM:<\/b> \u2013 Ich denke, es ist sogar einfacher. Sie nehmen den Code, wenden den Patch an, konfigurieren ihn nach Ihren Anforderungen \u2013 erstellen Proxys (zum Beispiel mit ODBC) und verteilen den gepatchten Code in den Systemen. Wo n\u00f6tig, stellen Sie Proxys bereit, wo n\u00f6tig, den Server.<\/p>\n<p><b>A:<\/b> \u2013 Zus\u00e4tzlich muss die \u00dcbertragung vom Proxy zum Server wahrscheinlich nicht weiter gepatcht werden?<\/p>\n<p><b>MT:<\/b> \u2013 Nein, sie ist standardm\u00e4\u00dfig.<\/p>\n<p><b>MM:<\/b> \u2013 Tats\u00e4chlich wurde eine der Ideen nicht vorgestellt. Wir haben immer ein Gleichgewicht zwischen dem Aufkommen neuer Ideen und der Anzahl der \u00c4nderungen sowie der Wartungsfreundlichkeit gewahrt.<\/p>\n<p><center><div class=\"youtube-placeholder\" data-id=\"3yRt9jSwrlg\" onclick=\"loadVideo(this)\">\r\n        <img decoding=\"async\" src=\"https:\/\/img.youtube.com\/vi\/3yRt9jSwrlg\/hqdefault.jpg\" alt=\"Video abspielen\" 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>Ein wenig Werbung \ud83d\ude42<\/h3>\n<p>\nDanke, dass Sie bei uns bleiben. Gefallen Ihnen unsere Artikel? M\u00f6chten Sie mehr interessante Inhalte sehen? Unterst\u00fctzen Sie uns, indem Sie eine Bestellung aufgeben oder uns Ihren Freunden empfehlen. <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">Cloud-VPS f\u00fcr Entwickler ab 4,99 $<\/a><\/noindex>, <b>eine einzigartige Alternative zu Einsteiger-Servern, die wir f\u00fcr Sie entwickelt haben:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Alles \u00fcber VPS (KVM) E5-2697 v3 (6 Kerne) 10GB DDR4 480GB SSD 1Gbps ab 19 $ oder wie man einen Server richtig teilt?<\/a><\/noindex> (Verf\u00fcgbar sind Optionen mit RAID1 und RAID10, bis zu 24 Kerne und bis zu 40GB DDR4).<\/p>\n<p><b>Dell R730xd im Equinix Tier IV Rechenzentrum in Amsterdam zum halben Preis?<\/b> Nur bei uns <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 ab 199 $<\/a><\/noindex> in den Niederlanden! <b>Dell R420 \u2014 2x E5-2430 2.2GHz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB \u2014 ab 99 $!<\/b><\/b> Lesen Sie dar\u00fcber <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">Wie man eine Unternehmenskosten-Infrastruktur mit Dell R730xd E5-2650 v4-Servern f\u00fcr ein paar Euro aufbaut?<\/a><\/noindex><br \/>\n<br \/>Quelle: <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\/de\/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=\"de_DE\" \/>\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\/de\/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 Tschernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server | ProHoster","description":"Die n\u00e4chste HighLoad++-Konferenz findet am 6. und 7. April 2020 in St. Petersburg statt. Details und Tickets finden Sie unter dem Link. HighLoad++ Moskau 2018. Saal \u201eMoskau\u201c. 9. November, 15:00 Uhr. Abstracts und Pr\u00e4sentation. * Monitoring \u2013 Online und Analyse. * Hauptbeschr\u00e4nkungen der ZABBIX-Plattform. * L\u00f6sung zur Skalierung des Analyse-Speichers. * Optimierung des ZABBIX-Servers. * Optimierung der Benutzeroberfl\u00e4che. * Betriebserfahrungen.","canonical_url":"https:\/\/prohoster.info\/de\/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":"de_DE","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\/de\/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\/de\/wp-json\/wp\/v2\/posts\/56049","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=56049"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/56049\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=56049"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=56049"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=56049"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}