{"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++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Die n\u00e4chste Konferenz HighLoad++ findet am 6. und 7. April 2020 in Sankt Petersburg statt. Details und Tickets <noindex><a rel=\"nofollow\" href=\"http:\/\/bit.ly\/2sSxgBx\">unter diesem Link<\/a><\/noindex>. HighLoad++ Moskau 2018. Saal \u201eMoskau\u201c. 9. November, 15:00. Thesen und <noindex><a rel=\"nofollow\" href=\"http:\/\/www.highload.ru\/moscow\/2018\/abstracts\/4141\">Pr\u00e4sentation<\/a><\/noindex>.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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* Optimierung des ZABBIX-Servers.<br \/>\n* UI-Optimierung.<br \/>\n* Erfahrungen mit dem System bei Lasten \u00fcber 40k NVPS.<br \/>\n* Kurze Schlussfolgerungen.<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 Darf ich Maxim vorstellen. Max ist ein talentierter Ingenieur, der beste Netzwerker, den ich kenne. Maxim besch\u00e4ftigt sich mit Netzwerken und Services, deren Entwicklung und Betrieb.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Ich m\u00f6chte \u00fcber Mikhail erz\u00e4hlen. Mikhail ist C-Entwickler. Er hat einige hochgradig belastete L\u00f6sungen zur Verarbeitung von Traffic f\u00fcr unser Unternehmen geschrieben. Wir leben und arbeiten im Ural, in der Stadt der rauen M\u00e4nner, Tscheljabinsk, in der Firma \u201eIntersvyaz\u201c. Unser Unternehmen ist Anbieter von Internet- und Kabelfernsehdiensten f\u00fcr eine Million Menschen in 16 St\u00e4dten.<\/p>\n<p><b>MM:<\/b> \u2013 Und es ist zu sagen, dass \u201eIntersvyaz\u201c viel mehr ist als nur ein Provider, es ist ein IT-Unternehmen. Die meisten unserer L\u00f6sungen werden durch unsere IT-Abteilung erstellt.<\/p>\n<p><b>A:<\/b> von Servern, die Traffic verarbeiten, bis hin zu Call-Centern und mobilen Anwendungen. In der IT-Abteilung arbeiten jetzt etwa 80 Personen mit sehr unterschiedlichen Kompetenzen.<\/p>\n<h3>\u00dcber Zabbix und seine Architektur<\/h3>\n<p>\n<b>MT:<\/b> \u2013 Jetzt werde ich versuchen, einen pers\u00f6nlichen Rekord aufzustellen und in einer Minute zu erkl\u00e4ren, was Zabbix (im Folgenden \u2013 \u201eZabbix\u201c) ist.<\/p>\n<p>\u201eZabbix\u201c positioniert sich als ein Monitoring-System \u201eout of the box\u201c auf Unternehmensebene. Es bietet viele Funktionen, die das Leben erleichtern: ausgekl\u00fcgelte Eskalationsregeln, API f\u00fcr Integration, Gruppierung und automatische Erkennung von Hosts und Metriken. Zabbix hat sogenannte Skalierungsmittel \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++, Mikhail Makurov, Maxim Chernetsov (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 ziemlich komplexen Verarbeitung und \u00dcbertragung von Informationen zwischen Threads. Alle Verarbeitungen erfolgen dort: 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>Die Webschnittstelle ist in PHP geschrieben. Die meisten Systeme werden mit dem Apache-Server geliefert, arbeiten aber 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 \u201eZabbix\u201c verbunden ist...<\/p>\n<h3>Eine Geschichte aus dem Leben des Unternehmens \u201eIntersvyaz\u201c. Was haben wir und was brauchen wir?<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 erreicht habe \u2013 ich habe etwas zu besprechen. Wir hatten wieder Probleme mit der \u00dcberwachung. W\u00e4hrend eines gro\u00dfen Ausfalls hat alles gehakt, und es gab keine Informationen \u00fcber den Zustand des Netzwerks. Leider passiert das schon zum wiederholten Mal. Ich brauche deine Hilfe. Lass uns sicherstellen, dass unsere \u00dcberwachung unter allen Umst\u00e4nden funktioniert!<\/p>\n<p><b>MM:<\/b> \u2013 Aber lass uns zuerst synchronisieren. Ich habe da schon seit ein paar Jahren nicht mehr hineingeschaut. Soweit ich mich erinnere, haben wir vor etwa 8 Jahren Nagios aufgegeben und sind zu \u201eZabbix\u201c gewechselt. Und jetzt haben wir anscheinend 6 leistungsstarke Server und etwa ein Dutzend Proxys. Verwirre ich mich nicht?<\/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 n\u00f6tigsten brauchen. Bei einem Ausfall \u2013 die Server h\u00e4ngen und man sieht nichts. Wir haben versucht, die Konfiguration zu optimieren, aber das hat keine merkliche Leistungssteigerung gebracht.<\/p>\n<p><b>MM:<\/b> \u2013 Verstanden. Hast du etwas untersucht, etwas aus der Diagnose gesammelt?<\/p>\n<p><b>MT:<\/b> \u2013 Das erste, womit man es zu tun hat, ist die DB. MySQL ist sowieso st\u00e4ndig ausgelastet, w\u00e4hrend es neue Metriken speichert, und wenn \u201eZabbix\u201c anf\u00e4ngt, eine Menge Ereignisse zu generieren \u2013 geht die Datenbank buchst\u00e4blich f\u00fcr mehrere Stunden in den Standby. Von der Optimierung der Konfiguration habe ich dir schon erz\u00e4hlt, und in diesem Jahr haben wir die Hardware aktualisiert: Auf den Servern stehen \u00fcber einhundert Gigabyte RAM und Speicherarrays auf SSD-RAIDs \u2013 es macht keinen Sinn, es linear weiter zu vergr\u00f6\u00dfern. Was sollen wir tun?<\/p>\n<p><b>MM:<\/b> \u2013 Verstanden. Tats\u00e4chlich ist MySQL eine LTP-Datenbank. Anscheinend ist sie nicht mehr f\u00fcr die Speicherung von Archiven unserer Metrikgr\u00f6\u00dfe geeignet. Lass uns das kl\u00e4ren.<\/p>\n<p><b>MT:<\/b> \u2013 Lass es uns tun!<\/p>\n<h3>Integration von Zabbix und Clickhouse als Ergebnis eines Hackathons<\/h3>\n<p>\nNach einiger Zeit erhielten wir interessante Daten:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/46899e843b1e89524c6d762c1c167a6c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer gr\u00f6\u00dfte Teil des Raums in unserer Datenbank war mit dem Archiv von Metriken belegt und weniger als 1 % wurde f\u00fcr Konfigurationen, Vorlagen und Einstellungen verwendet. Zu diesem Zeitpunkt hatten wir schon seit \u00fcber einem Jahr eine Big Data-L\u00f6sung auf Basis von Clickhouse in Betrieb. Der Weg, den wir einschlagen sollten, war f\u00fcr uns offensichtlich. Beim diesj\u00e4hrigen Fr\u00fchlings-Hackathon entwickelte ich eine Integration von Zabbix mit Clickhouse f\u00fcr den Server und das Frontend. Zu diesem Zeitpunkt unterst\u00fctzte Zabbix bereits ElasticSearch, und wir entschieden uns, diese zu vergleichen.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Clickhouse und Elasticsearch<\/h3>\n<p>\n<b>MM:<\/b> \u2013 F\u00fcr den Vergleich erzeugten wir eine Last, die der von Zabbix-Server entsprach, und beobachteten, wie sich die Systeme verhalten w\u00fcrden. Wir schrieben Daten in Paketen von 1000 Zeilen und verwendeten CURL. Wir erwarteten im Voraus, dass Clickhouse f\u00fcr das Lastprofil von Zabbix effizienter sein w\u00fcrde. Die Ergebnisse \u00fcbertrafen sogar unsere Erwartungen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 dreimal so viele Daten w\u00e4hrend der Tests. Beide Systeme konsumierten sehr effizient (geringe Ressourcennutzung), wenn sie Daten lasen. Aber ElasticSearch ben\u00f6tigte eine gro\u00dfe Menge an Prozessorleistung beim Schreiben:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/fea7f7f7801024cee0f9367c49d81d5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nInsgesamt \u00fcbertraf Clickhouse ElasticSearch erheblich in Bezug auf den CPU-Verbrauch und die Geschwindigkeit. Durch die Datenkompression ben\u00f6tigt Clickhouse 11-mal weniger Speicherplatz auf der Festplatte und f\u00fchrt etwa 30-mal weniger Festplattenoperationen durch:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Festplattensystem von Clickhouse ist sehr effizient umgesetzt. F\u00fcr Datenbanken kann man riesige SATA-Festplatten verwenden und erreicht Schreibgeschwindigkeiten von Hunderttausenden von Zeilen pro Sekunde. Die Systemunterst\u00fctzung f\u00fcr Sharding und Replikation ist \"out of the box\" verf\u00fcgbar und es ist recht einfach, es einzurichten. Wir sind mit seinem Einsatz \u00fcber ein Jahr mehr als zufrieden.<\/p>\n<p>Zur Ressourcenschonung kann Clickhouse neben der bestehenden Hauptdatenbank installiert werden, was eine Menge an Prozessorzeit und Festplattenoperationen spart. Wir haben das Archiv der Metriken auf bereits vorhandene Clickhouse-Cluster \u00fcbertragen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 stark entlastet, dass wir sie auf derselben Maschine mit dem Zabbix-Server zusammenf\u00fchren und auf einen dedizierten Server f\u00fcr MySQL verzichten konnten.<\/p>\n<h3>Wie funktioniert Polling in Zabbix?<\/h3>\n<p>\n<i>Vor 4 Monaten<\/i><\/p>\n<p><b>MM:<\/b> \u2013 Na, k\u00f6nnen wir die Probleme mit der Datenbank hinter uns lassen?<\/p>\n<p><b>MT:<\/b> Das ist genau richtig! Eine andere Aufgabe, die wir l\u00f6sen m\u00fcssen, ist die langsame Datensammlung. Jetzt sind all unsere 15 Proxy-Server mit SNMP- und Polling-Prozessen \u00fcberlastet. Und es gibt keine anderen Optionen, als immer neue Server hinzuzuf\u00fcgen.<\/p>\n<p><b>MM:<\/b> Perfekt. Aber erz\u00e4hl mir zuerst, wie das Polling in Zabbix funktioniert?<\/p>\n<p><b>MT:<\/b> Kurz gesagt, es gibt 20 Metriktypen und eine Handvoll M\u00f6glichkeiten, diese zu erheben. Zabbix kann Daten entweder im Anfrage-Antwort-Modus sammeln oder neue Daten \u00fcber die Trapper-Schnittstelle abwarten.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 diese Methode (Trapper) im Original-Zabbix die schnellste ist. <\/p>\n<p>Es gibt Proxys zur Lastenverteilung:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Sammelfunktionen wie der Zabbix-Server ausf\u00fchren, indem sie Aufgaben von ihm erhalten und die gesammelten Metriken genau \u00fcber die Trapper-Schnittstelle zur\u00fccksenden. Dies ist die offiziell empfohlene Methode zur Lastenverteilung. Proxys sind auch n\u00fctzlich f\u00fcr das Monitoring von remote Infrastruktur, die \u00fcber NAT oder eine langsame Verbindung arbeitet:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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> Die Architektur ist also klar. Wir m\u00fcssen uns die Quellcodes ansehen...<\/p>\n<p><i>Ein paar Tage sp\u00e4ter<\/i><\/p>\n<h3>Die Geschichte dar\u00fcber, wie nmap fping besiegt hat<\/h3>\n<p>\n<b>MM:<\/b> Es scheint, dass ich etwas gefunden habe.<\/p>\n<p><b>MT:<\/b> Erz\u00e4hl!<\/p>\n<p><b>MM:<\/b> 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 Inter-Paket-Intervall in ihrem Ping zu entfernen \u2013 das hat die Leistung verdoppelt. Aber ich h\u00e4tte gerne gr\u00f6\u00dfere Zahlen.<\/p>\n<p><b>MT:<\/b> In meiner Praxis muss ich manchmal die Verf\u00fcgbarkeit von Tausenden von Hosts \u00fcberpr\u00fcfen, und ich habe nichts Schnelleres als nmap daf\u00fcr gefunden. Ich bin sicher, dass dies der schnellste Weg ist. Lass es uns versuchen! Wir m\u00fcssen die Anzahl der Hosts pro Iteration erheblich erh\u00f6hen.<\/p>\n<p><b>MM:<\/b> \u00dcber 500 pr\u00fcfen? 600?<\/p>\n<p><b>MT:<\/b> Mindestens ein paar Tausend.<\/p>\n<p><b>MM:<\/b> Okay. Das Wichtigste, was ich sagen wollte: Ich habe herausgefunden, dass das meiste Polling in Zabbix synchron erfolgt. Wir m\u00fcssen es unbedingt auf asynchron umstellen. Dann k\u00f6nnen wir die Anzahl der von den Pollern gesammelten Metriken drastisch erh\u00f6hen, insbesondere wenn wir die Anzahl der Metriken pro Iteration erh\u00f6hen.<\/p>\n<p><b>MT:<\/b> Das klingt gro\u00dfartig! Und wann?<\/p>\n<p><b>MM:<\/b> Wie immer, gestern.<\/p>\n<p><b>MT:<\/b> Wir haben beide Versionen von fping und nmap verglichen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/4be4cfe019b6b318ae2fbdbf82577111.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAuf einer gro\u00dfen Anzahl von Hosts war nmap erwartungsgem\u00e4\u00df bis zu f\u00fcnfmal effektiver. Da nmap lediglich die Verf\u00fcgbarkeit und die Antwortzeiten \u00fcberpr\u00fcft, haben wir die Verlustz\u00e4hlung auf Trigger verschoben und die \u00dcberpr\u00fcfungsintervalle erheblich verk\u00fcrzt. Die optimale Anzahl an Hosts f\u00fcr nmap haben wir bei etwa 4.000 pro Iteration festgestellt. Nmap erm\u00f6glichte es uns, die CPU-Kosten f\u00fcr die \u00dcberpr\u00fcfungen der Verf\u00fcgbarkeit um drei Viertel 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 Dann haben wir uns mit den Pollern besch\u00e4ftigt. Haupts\u00e4chlich interessierte uns das SNMP-Monitoring und die Agenten. Im \u201eZabbix\u201c erfolgt das Polling synchron, und es wurden spezielle Ma\u00dfnahmen ergriffen, um die Effizienz des Systems zu steigern. Im synchronen Modus f\u00fchrt die Unerreichbarkeit von Hosts zu einer erheblichen Verschlechterung des Polling. Es gibt ein ganzes System von Zust\u00e4nden, spezielle Prozesse \u2013 sogenannte unerreichbare Poller, die nur mit unerreichbaren Hosts arbeiten:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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, die gesamte Komplexit\u00e4t der \u00dcbergangssysteme, die erforderlich sind, damit das System effizient bleibt. Dar\u00fcber hinaus ist das synchrone Polling selbst recht langsam:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/3579a4a3de85c37f812ba2ca71cf4b3d.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nGenau deshalb konnten Tausende von Poller-Threads auf einem Dutzend Proxys nicht die ben\u00f6tigte Menge an Daten f\u00fcr uns sammeln. Die asynchrone Implementierung l\u00f6ste nicht nur die Probleme mit der Anzahl der Threads, sondern vereinfachte auch das System von Zust\u00e4nden unerreichbarer Hosts erheblich, da bei beliebiger Anzahl in einer Polling-Iteration die maximale Wartezeit 1 Timeout betrug:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Pollingsystem f\u00fcr SNMP-Anfragen modifiziert. Das Problem ist, dass die meisten nicht gleichzeitig auf mehrere SNMP-Anfragen antworten k\u00f6nnen. Deshalb 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++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/eb61766e8afce9bf72d6e9757492559e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDies geschieht f\u00fcr eine ganze Gruppe von Hosts. Dieser Modus ist letztlich nicht langsamer als vollst\u00e4ndig asynchron, da die Abfrage von 150 SNMP-Werten immer noch 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 beim SNMP-Polling betr\u00e4gt. Insgesamt erm\u00f6glichte der Wechsel in den asynchronen Modus eine Steigerung der Polling-Leistung um das 200-Fache, um mehrere Hundertfache.<\/p>\n<p><b>MT:<\/b> Die erhaltenen Optimierungen des Pollings haben gezeigt, dass wir nicht nur alle Proxys loswerden k\u00f6nnen, sondern auch die Intervalle f\u00fcr viele Pr\u00fcfungen verk\u00fcrzen k\u00f6nnen, w\u00e4hrend Proxys als Mittel zur Lastverteilung nicht mehr ben\u00f6tigt werden.<\/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 Nun, 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 ist h\u00f6chste Zeit, von dem Stillstand von 5.000 Metriken pro Sekunde wegzukommen.<\/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 wieder zur\u00fcckgefallen... Rate, welche Geschwindigkeit wir erreichen konnten?<\/p>\n<p><b>MM:<\/b> \u2013 H\u00f6chstens 20.000.<\/p>\n<p><b>MT:<\/b> \u2013 Aha, 25! Leider sind wir genau da, wo wir angefangen haben.<\/p>\n<p><b>MM:<\/b> \u2013 Warum ist das so? Haben wir irgendeine Diagnose gemacht?<\/p>\n<p><b>MT:<\/b> \u2013 Ja, nat\u00fcrlich! Hier ist beispielsweise ein interessantes Top:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 mal schauen. Ich sehe, dass wir eine riesige Anzahl von Polling-Threads ausprobiert haben:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/346e8047f1f6f2bb1b1dd91a728e437b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAber gleichzeitig konnten wir das System nicht einmal zur H\u00e4lfte auslasten:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/be1843dbec0fb10d8da59e8c570adc5b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Gesamtleistung ist recht gering, etwa 4.000 Metriken pro Sekunde:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 von einem der Poller:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 klar, dass der Polling-Prozess auf 'Semaphore' wartet. Das sind Sperren:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Schau, das \u00e4hnelt einer Situation, in der viele Threads versuchen, mit Ressourcen zu arbeiten, auf die gleichzeitig nur einer zugreifen kann. Dann k\u00f6nnen sie nur diesen Resource zeitlich aufteilen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/7dbb9e8941b01b666dd48f6301151ec9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Gesamtproduktivit\u00e4t bei der Arbeit mit einer solchen Ressource ist auf die Geschwindigkeit eines Kerns begrenzt:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/e00b197577f4ea7350fe56665dbae299.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEine solche Problematik kann auf zwei Arten gel\u00f6st werden.<\/p>\n<p>Die Hardware der Maschine aufr\u00fcsten, auf schnellere Kerne umsteigen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 und parallel die Last \u00e4ndern:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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, aber sie sind daf\u00fcr etwa 1,5-mal schneller in der Taktfrequenz pro Kern!<\/p>\n<p><b>MM:<\/b> \u2013 Verstehst du? Wir m\u00fcssen den Servercode \u00fcberpr\u00fcfen.<\/p>\n<h3>Der Datenfluss 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++, Mikhail Makurov, Maxim Chernetsov (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? Lass uns Schritt f\u00fcr Schritt durchgehen, um es mehr oder weniger zu kl\u00e4ren. Es gibt Threads und Dienste, die f\u00fcr die Datensammlung verantwortlich sind:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 \u00fcber einen Socket an den Preprocessor-Manager \u00fcbergeben, wo sie in eine Warteschlange gespeichert werden:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/1e34fe2c4194f7bd71ec409d6169fb94.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDer 'Preprocessor-Manager' \u00fcbergibt die Daten an seine Worker, die die Vorverarbeitungsanweisungen ausf\u00fchren und sie \u00fcber denselben Socket zur\u00fcckgeben:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/d647caf3886f0c9378a32314e812edc1.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNach diesem Schritt speichert der Preprocessor-Manager sie im Verlauf-Cache:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/ff0e29b0d974d76bd3a3b71d36a1cc68.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nVon dort holen sie sich die History-Synker, die viele Funktionen \u00fcbernehmen: zum Beispiel das Berechnen von Triggern, das F\u00fcllen des Wert-Caches und, am wichtigsten, das Speichern von Metriken im Verlaufsspeicher. Insgesamt ist der Prozess komplex und ziemlich verwirrend.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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> \u2013 Das erste, was wir festgestellt haben, ist, dass die meisten Threads um den sogenannten \"Konfigurations-Cache\" konkurrieren (ein Speicherbereich, in dem alle Serverkonfigurationen gespeichert sind). Insbesondere viele Sperren verursachen die Threads, die f\u00fcr das Abrufen von Daten verantwortlich sind:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 werden, sondern auch die Warteschlangen, aus denen die Poller Informationen dar\u00fcber entnehmen, was als n\u00e4chstes zu tun ist. Wenn es viele Poller gibt und einer die Konfiguration sperrt, warten die anderen auf Anfragen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 d\u00fcrfen nicht in Konflikt geraten<\/h3>\n<p>\n<img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/d436cd3415a6f58e1db5a609689c12b6.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDaher haben wir als Erstes die Warteschlange in 4 Teile geteilt und den Pollern unter sicheren Bedingungen erlaubt, diese Warteschlangen, diese Teile gleichzeitig zu sperren:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/9466e5f0053dff583e76713f10e30a89.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDies beseitigte die Konkurrenz um den Konfigurations-Cache, und die Geschwindigkeit der Poller nahm erheblich zu. Aber dann erlebten wir, dass der Preprocessor-Manager begann, die Aufgabenwarteschlange anzusammeln:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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. Dann konnte er nur noch die Anfragen von den Datenbeschaffungsprozessen ansammeln und seinen Puffer stapeln, bis er den gesamten Speicher aufbrauchte und abst\u00fcrzte:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Socket hinzugef\u00fcgt, der speziell f\u00fcr die Worker reserviert war:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/09d1bb92a009f9d29ba68d966de54210.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDamit konnte der Preprocessor-Manager seine Arbeit priorisieren und im Falle einer Puffervergr\u00f6\u00dferung die Aufgabe des Abbremsens des Abrufs \u00fcbernehmen, um den Workern die M\u00f6glichkeit zu geben, diesen Puffer abzuholen:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/8f4db3661c428e6e6dcfe4cc0c44c016.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDann stellten wir fest, dass einer der Gr\u00fcnde f\u00fcr die Verz\u00f6gerung die Worker selbst waren, da sie um einen f\u00fcr ihre Arbeit v\u00f6llig unwichtigen Ressourcen konkurrierten. Dieses Problem haben wir mit einem Bug-Fix behoben, und in den neuen Versionen von \"Zabbix\" ist es bereits gel\u00f6st:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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>Wir erh\u00f6hen die Anzahl der Sockets \u2013 wir erzielen Ergebnisse<\/h3>\n<p>\nWeiterhin wurde der Preprocessor-Manager zum Engpass, da dies ein einzelner Thread ist. Er stie\u00df an die Geschwindigkeitsgrenze des Kerns, was eine maximale Geschwindigkeit von etwa 70.000 Metriken pro Sekunde erm\u00f6glichte:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/f93ccbc656c0f9e103873d99a9397495.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDeshalb haben wir vier gemacht, mit vier Sets von Sockets, Arbeitern:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 hat es erm\u00f6glicht, die Geschwindigkeit auf etwa 130 Tausend Metriken zu steigern:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (Intersvyaz): Zabbix, 100kNVPS auf einem Server\" src=\"\/wp-content\/uploads\/2020\/02\/016ff07cd021a7221caef19e6ce36a9b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nDie Nichtlinearit\u00e4t des Wachstums erkl\u00e4rt sich dadurch, dass Konkurrenz um den History-Cache entstand. Daran konkurrierten 4 Preprocess-Manager und History-Syncer. Zu diesem Zeitpunkt erhielten wir auf der Testmaschine etwa 130 Tausend Metriken pro Sekunde und nutzten sie zu etwa 95 % aus, was die CPU betrifft:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 hinein.<\/p>\n<p><b>MT:<\/b> \u2013 Was gibt es jetzt?<\/p>\n<p><b>MM:<\/b> \u2013 Jetzt \u2013 130k NVPs und die CPU ist \"in der Schonung\".<\/p>\n<p><b>MT:<\/b> \u2013 Wow! Cool! Warte, ich habe zwei Fragen. Nach meinen Berechnungen liegt unser Bedarf bei etwa 15-20 Tausend Metriken pro Sekunde. Warum brauchen wir mehr?<\/p>\n<p><b>MM:<\/b> \u2013 Ich m\u00f6chte die Sache bis zum Ende durchziehen. Ich m\u00f6chte sehen, wie viel wir aus diesem System herausholen k\u00f6nnen.<\/p>\n<p><b>MT:<\/b> \u2013 Aber...<\/p>\n<p><b>MM:<\/b> \u2013 Aber das ist f\u00fcr das Gesch\u00e4ft nutzlos.<\/p>\n<p><b>MT:<\/b> \u2013 Verstanden. Und die zweite Frage: K\u00f6nnen wir das, was wir jetzt haben, selbstst\u00e4ndig ohne Hilfe von Entwicklern unterst\u00fctzen?<\/p>\n<p><b>MM:<\/b> \u2013 Ich glaube nicht. Die \u00c4nderung der Arbeit mit dem Konfigurationscache ist ein Problem. Sie betrifft \u00c4nderungen in den meisten Streams und ist ziemlich schwer zu unterst\u00fctzen. Wahrscheinlich wird es sehr schwierig sein, sie zu unterst\u00fctzen.<\/p>\n<p><b>MT:<\/b> \u2013 Dann m\u00fcssen wir eine Alternative finden.<\/p>\n<p><b>MM:<\/b> \u2013 Es gibt eine solche M\u00f6glichkeit. Wir k\u00f6nnen auf schnelle Kerne umsteigen und gleichzeitig auf das neue Sperrsystem verzichten. Wir w\u00fcrden trotzdem eine Leistung von 60-80 Tausend Metriken erhalten. Dabei k\u00f6nnen wir den gesamten \u00fcbrigen Code behalten. \u00abClickHouse\u00bb, asynchrones Polling wird funktionieren. Und das wird leicht zu unterst\u00fctzen sein.<\/p>\n<p><b>MT:<\/b> \u2013 Gro\u00dfartig! Ich schlage vor, an dieser Stelle Schluss zu machen.<\/p>\n<p>Nach der Optimierung des Serverteils konnten wir endlich den neuen Code in der Produktion starten. Wir verzichteten auf einen Teil der \u00c4nderungen zugunsten des Wechsels zu einer Maschine mit schnellen Kernen und zur Minimierung der \u00c4nderungen im Code. Wir haben auch die Konfiguration vereinfacht und wo m\u00f6glich auf Makros in den Datenelementen verzichtet, da sie zus\u00e4tzliche Sperren verursachen.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 h\u00e4ufige in der Dokumentation und in Beispielen vorkommende Makro SNMP-Community in unserem Fall dazu gef\u00fchrt, dass die NVPs etwa 1,5 Mal schneller wurden.<\/p>\n<p><i>Nach zwei Tagen in der Produktion<\/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 es funktioniert alles. Aber nur, wenn alles funktioniert! Wir hatten planm\u00e4\u00dfige Arbeiten mit der Verlagerung eines ziemlich gro\u00dfen Netzwerksegments, und wir haben wieder manuell \u00fcberpr\u00fcft, was hochgefahren wurde und was nicht.<\/p>\n<p><b>MM:<\/b> \u2013 Das kann nicht sein! Wir haben alles 10 Mal \u00fcberpr\u00fcft. Der Server bearbeitet selbst die vollst\u00e4ndige Nichterreichbarkeit des Netzwerks blitzschnell.<\/p>\n<p><b>MT:<\/b> \u2013 Ich verstehe alles: Server, Datenbank, top, austat, Logs \u2013 alles l\u00e4uft schnell... Aber wir schauen uns die Weboberfl\u00e4che an, und da ist die CPU \"im Leerlauf\" auf dem Server und das hier:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Weboberfl\u00e4che anschauen. Wir haben festgestellt, dass in Situationen mit einer gro\u00dfen Anzahl aktiver Vorf\u00e4lle die meisten operativen Widgets sehr langsam arbeiteten:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Popup-Fenstern mit der Historie der Vorf\u00e4lle, die f\u00fcr jedes Element in der Liste erstellt werden. Daher haben wir auf die Generierung dieser Fenster verzichtet (wir haben 5 Zeilen im Code kommentiert), und das hat unsere Probleme gel\u00f6st.<\/p>\n<p>Die Ladezeit der Widgets verk\u00fcrzte sich selbst bei vollst\u00e4ndiger Nichterreichbarkeit von mehreren Minuten auf f\u00fcr uns akzeptable 10-15 Sekunden, und die Historie kann weiterhin mit einem Klick auf die Zeit angesehen werden:<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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 Misha, gehst du? Wir m\u00fcssen reden.<\/p>\n<p><b>MM:<\/b> \u2013 Ich hatte nicht vor zu gehen. Ist wieder was mit Zabbix?<\/p>\n<p><b>MT:<\/b> \u2013 Nein, entspanne dich! Ich wollte nur sagen: Es funktioniert alles, danke! Ich lade dich auf ein Bier ein.<\/p>\n<h3>Zabbix ist effektiv<\/h3>\n<p>\n\"Zabbix\" ist ein ziemlich vielseitiges und umfangreiches System und Funktion. Es kann problemlos f\u00fcr kleine Installationen \"out of the box\" verwendet werden, aber mit wachsenden Anforderungen muss es optimiert werden. F\u00fcr die Speicherung eines gro\u00dfen Archivs von Metriken verwenden Sie eine geeignete Speicherl\u00f6sung:<\/p>\n<ul>\n<li>Sie k\u00f6nnen die integrierten Funktionen in Form der Integration mit \"Elasticsearch\" oder den Export der Historie in Textdateien nutzen (verf\u00fcgbar ab der vierten Version);<\/li>\n<li>Sie k\u00f6nnen auch von unserer Erfahrung und der Integration mit \"ClickHouse\" profitieren.<\/li>\n<\/ul>\n<p>\nUm die Geschwindigkeit der Metrikenerfassung drastisch zu erh\u00f6hen, erfassen Sie diese mithilfe asynchroner Methoden und \u00fcbertragen Sie sie \u00fcber die Trapper-Schnittstelle an den \"Zabbix\"-Server; alternativ k\u00f6nnen Sie den Patch f\u00fcr die Asynchronit\u00e4t der Poller von \"Zabbix\" verwenden.<\/p>\n<p>\u201eZabbix\u201c ist in C geschrieben und sehr effizient. Einige enge architektonische Stellen erm\u00f6glichen es, die Leistung weiter zu steigern, und aus unserer Erfahrung erhalten wir \u00fcber 100.000 Metriken auf einer Einzelprozessormaschine.<\/p>\n<p><img decoding=\"async\" alt=\"HighLoad++, Mikhail Makurov, Maxim Chernetsov (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>Der besagte Zabbix-Patch<\/h3>\n<p>\n<b>MM:<\/b> \u2013 Ich m\u00f6chte ein paar Punkte hinzuf\u00fcgen. Der gesamte aktuelle Bericht, alle Tests und Zahlen stammen aus der Konfiguration, die wir verwenden. Daraus erfassen wir derzeit etwa 20.000 Metriken pro Sekunde. Wenn Sie versuchen herauszufinden, ob das bei Ihnen funktionieren wird \u2013 Sie k\u00f6nnen vergleichen. Das, was heute vorgestellt wurde, ist auf GitHub als Patch 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++, Mikhail Makurov, Maxim Chernetsov (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 beinhaltet:<\/p>\n<ul>\n<li>vollst\u00e4ndige Integration mit \u201eClickHouse\u201c (sowohl f\u00fcr den \u201eZabbix\u201c-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 allen Versionen 4 kompatibel, auch mit lts. H\u00f6chstwahrscheinlich wird er mit minimalen \u00c4nderungen auch in Version 3.4 funktionieren.<\/p>\n<p>Danke f\u00fcr Ihre Aufmerksamkeit.<\/p>\n<h3>Fragen<\/h3>\n<p>\nFrage aus dem Publikum (im Folgenden - A): \u2013 Guten Tag! K\u00f6nnen Sie mir bitte sagen, ob Sie Pl\u00e4ne f\u00fcr eine intensive Zusammenarbeit mit dem Zabbix-Team haben oder umgekehrt, damit es kein Patch, sondern ein normales Verhalten von \u201eZabbix\u201c w\u00e4re?<\/p>\n<p><b>MM:<\/b> \u2013 Ja, einige \u00c4nderungen werden wir unbedingt committen. Manche Dinge werden in dem Patch bleiben.<\/p>\n<p><b>A:<\/b> \u2013 Vielen Dank f\u00fcr den gro\u00dfartigen Vortrag! Bitte sagen Sie, wird die Unterst\u00fctzung seitens \u201eZabbix\u201c nach der Anwendung des Patches weiterhin bestehen, und wie wird die Aktualisierung auf h\u00f6here Versionen stattfinden? Wird es m\u00f6glich sein, \u201eZabbix\u201c nach Ihrem Patch auf 4.2, 5.0 zu aktualisieren?<\/p>\n<p><b>MM:<\/b> \u2013 Zum Thema Unterst\u00fctzung kann ich nichts sagen. Wenn ich im technischen Support von \u201eZabbix\u201c w\u00e4re, w\u00fcrde ich vermutlich nein sagen, da es sich um fremden Code handelt. Was die Codebasis 4.2 angeht, so ist unsere Position die folgende: \u201eWir werden mit der Zeit gehen und uns selbst auf die n\u00e4chste Version aktualisieren.\u201c Daher werden wir eine Zeit lang Patches f\u00fcr aktualisierte Versionen bereitstellen. Ich habe bereits im Vortrag gesagt: Die Anzahl der \u00c4nderungen zwischen den Versionen ist derzeit noch recht gering. Ich glaube, der \u00dcbergang von 3.4 auf 4 hat bei uns etwa 15 Minuten gedauert. Es hat sich etwas ge\u00e4ndert, aber nicht besonders 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, um k\u00fcnftig auf irgendeine Weise Updates zu erhalten?<\/p>\n<p><b>MM:<\/b> \u2013 Wir empfehlen das nachdr\u00fccklich. Es l\u00f6st uns sehr viele Probleme.<\/p>\n<p><b>MT:<\/b> \u2013 Noch einmal m\u00f6chte ich betonen, dass die \u00c4nderungen, die nichts mit der Architektur oder den Blockierungen, Warteschlangen zu tun haben, modular sind, sie befinden sich in separaten Modulen. Auch bei geringf\u00fcgigen \u00c4nderungen k\u00f6nnen sie relativ einfach verwaltet werden.<\/p>\n<p><b>MM:<\/b> \u2013 Wenn Sie an den Einzelheiten interessiert sind, verwendet \u201eClickHouse\u201c die sogenannte Geschichtsbibliothek. Sie ist entkoppelt \u2013 eine Kopie der Unterst\u00fctzung von \u201eElastix\u201c, also konfigurationsver\u00e4nderbar. Polling \u00e4ndert nur die Poller. Wir glauben, dass das lange 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++, Mikhail Makurov, Maxim Chernetsov (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 der Patch. Offensichtlich entstehen mit der Einf\u00fchrung von \u201eClickHouse\u201c und neuen Pollertypen neue Konfigurationsoptionen. In dem Link aus der letzten Folie gibt es eine kurze Beschreibung, wie man es verwendet.<\/p>\n<h3>Zur Ersetzung von fping durch nmap<\/h3>\n<p>\n<b>A:<\/b> \u2013 Wie haben Sie das letztendlich umgesetzt? K\u00f6nnen Sie es an konkreten Beispielen erkl\u00e4ren: haben Sie Strapper und ein externes Skript? Was pr\u00fcft letztendlich so schnell eine so gro\u00dfe Anzahl von Hosts? Wie beschaffen Sie diese Hosts? Muss man nmap diese irgendwie zuf\u00fchren, woher bekommen, ablegen, etwas starten?..<\/p>\n<p><b>MM:<\/b> \u2013 Cool. Sehr gute Frage! Die Essenz ist folgende. Wir haben die Bibliothek (ICMP-Ping, ein Teil von \u201eZabbix\u201c) f\u00fcr die ICMP-Pr\u00fcfungen modifiziert, bei denen die Anzahl der Pakete auf eins (1) festgelegt ist, und der Code versucht, nmap zu verwenden. Das ist also die interne Arbeit von \u201eZabbix\u201c geworden, die zu interner Arbeit des Pingers wurde. Daher ist keine Synchronisation oder Verwendung eines Trappers erforderlich. Das wurde bewusst so gemacht, um das System ganz zu lassen und sich nicht mit der Synchronisation zweier Basissysteme zu besch\u00e4ftigen: was zu pr\u00fcfen, \u00fcber den Poller zu laden, und ob das Laden 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 es nicht getestet. Der Polling-Code ist sowohl in \u201eZabbix\u201c als auch im Server einheitlich. Es sollte funktionieren. Nochmals betont: Die Systemleistung ist so, dass wir keinen Proxy ben\u00f6tigen.<\/p>\n<p><b>MT:<\/b> \u2013 Die richtige Antwort auf die Frage ist folgende: \u201eWarum brauchen Sie bei einem solchen System einen Proxy?\u201c Nur wegen NAT oder um \u00fcber einen langsamen Kanal zu \u00fcberwachen oder so.<\/p>\n<p><b>A:<\/b> \u2013 Und verwenden Sie \u201eZabbix\u201c als Alarmsystem, wenn ich es richtig verstanden habe? Oder sind die Grafiken (wo die Archivschicht ist) in ein anderes System, wie Grafana, gewandert? Oder nutzen Sie diese Funktionalit\u00e4t nicht?<\/p>\n<p><b>MM:<\/b> \u2013 Ich m\u00f6chte noch einmal betonen: Wir haben eine vollst\u00e4ndige Integration vorgenommen. Wir speichern die Historie in \u201eClickHouse\u201c, aber haben dabei das PHP-Frontend ge\u00e4ndert. Das PHP-Frontend greift auf \u201eClickHouse\u201c zu und erstellt alle Grafiken von dort. Dabei haben wir, um ehrlich zu sein, einen Teil, der aus demselben \u201eClickHouse\u201c, aus denselben Daten von \u201eZabbix\u201c Daten in anderen grafischen Darstellungen generiert.<\/p>\n<p><b>MT:<\/b> \u2013 Darunter 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 bitte etwas \u00fcber die interne Vorgehensweise mit. Wie wurde entschieden, dass Ressourcen f\u00fcr eine ernsthafte \u00dcberarbeitung des Produkts bereitgestellt werden m\u00fcssen? Es sind schlie\u00dflich bestimmte Risiken damit verbunden. Und sagen Sie bitte im Kontext dessen, dass Sie beabsichtigen, neue Versionen zu unterst\u00fctzen: Wie rechtfertigt sich diese Entscheidung aus Sicht des Managements?<\/p>\n<p><b>MM:<\/b> \u2013 Anscheinend haben wir die dramatische Geschichte nicht sehr gut erz\u00e4hlt. Wir befanden uns in einer Situation, in der etwas getan werden musste, und gingen im Wesentlichen zwei parallele Wege:<\/p>\n<ul>\n<li>Eine Gruppe k\u00fcmmerte sich um die Einf\u00fchrung des Monitorings mit neuen Methoden: Monitoring als Service, ein standardm\u00e4\u00dfiger Satz von Open-Source-L\u00f6sungen, die wir kombinieren und dann versuchen, den Gesch\u00e4ftsprozess zu \u00e4ndern, um mit dem neuen Monitoringsystem zu arbeiten.<\/li>\n<li>Parallel dazu hatten wir einen enthusiastischen Programmierer, der sich damit besch\u00e4ftigte (und sich selbst wie ein Protagonist verhielt). Es stellte sich heraus, dass er allen anderen voraus war.<\/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 wird ein Passionierter ben\u00f6tigt?<\/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 sind Sie es anscheinend. Vielen Dank, Sie sind gro\u00dfartig.<\/p>\n<p><b>MM:<\/b> \u2013 Danke.<\/p>\n<h3>\u00dcber die Patches f\u00fcr Zabbix<\/h3>\n<p>\n<b>A:<\/b> \u2013 Ist es m\u00f6glich, Ihre L\u00f6sung zu adaptieren und zu patchen f\u00fcr ein System, das Proxy verwendet (zum Beispiel in einigen verteilten Systemen); sagen wir f\u00fcr die Poller, Proxys und teilweise f\u00fcr den Preprocessor von Zabbix; und deren Interaktion? Ist es m\u00f6glich, bestehende Entwicklungen zu optimieren, um mit einem System mit mehreren Proxys zu funktionieren?<\/p>\n<p><b>MM:<\/b> \u2013 Ich wei\u00df, dass der Zabbix-Server mit Proxy gebaut wird (es wird kompiliert und der Code entsteht). Wir haben das nicht in der Produktion \u00fcberpr\u00fcft. Ich bin mir da nicht sicher, aber meines Erachtens wird der Preprocessor-Manager im Proxy nicht verwendet. Die Aufgabe des Proxys ist es, eine Sammlung von Metriken von Zabbix abzurufen, sie zu spollen (er speichert au\u00dferdem die Konfiguration, die lokale Datenbank) und sie dann zur\u00fcck an den Zabbix-Server zu geben. Der Preprocessing wird dann vom Server durchgef\u00fchrt, wenn er sie erh\u00e4lt.<\/p>\n<p>Das Interesse an Proxys ist verst\u00e4ndlich. Wir werden das pr\u00fcfen. Es ist ein interessantes Thema.<\/p>\n<p><b>A:<\/b> \u2013 Die Idee war die: Wenn man Poller patchen kann, kann man sie auch auf Proxys patchen und die Interaktion mit dem Server anpassen, w\u00e4hrend der Preprocessor daf\u00fcr nur auf dem 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 dann so, wie Sie es brauchen \u2013 erstellen Proxys (zum Beispiel mit ODBC) und verteilen den gepatchten Code auf die Systeme. Wo n\u00f6tig, erstellen Sie Proxys, wo n\u00f6tig, den Server.<\/p>\n<p><b>A:<\/b> \u2013 Wahrscheinlich wird es nicht n\u00f6tig sein, die \u00dcbertragung von Proxys zum Server zus\u00e4tzlich zu patchen?<\/p>\n<p><b>MT:<\/b> \u2013 Nein, das ist standardm\u00e4\u00dfig.<\/p>\n<p><b>MM:<\/b> \u2013 Tats\u00e4chlich wurde eine der Ideen nicht erw\u00e4hnt. Wir haben immer versucht, das Gleichgewicht zwischen einem Ideen\u00fcberschuss und der Anzahl der \u00c4nderungen, sowie der Wartungsfreundlichkeit zu wahren.<\/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 Freunden empfehlen, <noindex><a rel=\"nofollow\" href=\"https:\/\/ua-hosting.company\/cloudvps\/nl\">Cloud-VPS f\u00fcr Entwickler ab 4,99 $<\/a><\/noindex>, <b>ein einzigartiges \u00c4quivalent zu Einsteigerservern, das wir f\u00fcr Sie entwickelt haben:<\/b> <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/347386\/\">Die ganze Wahrheit \u00fcber VPS (KVM) E5-2697 v3 (6 Kerne) 10GB DDR4 480GB SSD 1Gbps ab 19 $ oder wie man einen Server richtig teilt?<\/a><\/noindex> (es sind Optionen mit RAID1 und RAID10 bis zu 24 Kernen und bis zu 40GB DDR4 verf\u00fcgbar).<\/p>\n<p><b>Dell R730xd ist im Equinix Tier IV Rechenzentrum in Amsterdam doppelt so g\u00fcnstig?<\/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, wie <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/company\/ua-hosting\/blog\/329618\/\">man eine Unternehmensinfrastruktur der Klasse C mit Dell R730xd E5-2650 v4-Servern f\u00fcr 9000 Euro im Preis-Leistungs-Verh\u00e4ltnis 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 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043d\u0444\u0435\u0440\u0435\u043d\u0446\u0438\u044f HighLoad++ \u043f\u0440\u043e\u0439\u0434\u0435\u0442 6 \u0438 7 \u0430\u043f\u0440\u0435\u043b\u044f 2020 \u0433\u043e\u0434\u0430 \u0432 \u0421\u0430\u043d\u043a\u0442-\u041f\u0435\u0442\u0435\u0440\u0431\u0443\u0440\u0433\u0435 \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0438 \u0431\u0438\u043b\u0435\u0442\u044b \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/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) 5.0.1.1\" \/>\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.\" \/>\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 Tschernizow (Intersvyaz): Zabbix, 100kNVPS auf einem Server | ProHoster","description":"Die n\u00e4chste HighLoad++-Konferenz findet am 6. und 7. April 2020 in St. Petersburg statt. Einzelheiten und Tickets unter dem Link.","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.","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","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"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}]}}